সচরাচর জিজ্ঞাস্য

ক্রস ব্রাউজার সমর্থন অবস্থা কি?

অফিসিয়াল ফায়ারফক্স সমর্থন পরীক্ষামূলক। Mozilla-এর সাথে চলমান সহযোগিতার লক্ষ্য হল সাধারণ এন্ড-টু-এন্ড টেস্টিং ব্যবহারের ক্ষেত্রে সমর্থন করা, যার জন্য ডেভেলপাররা ক্রস-ব্রাউজার কভারেজ আশা করে। ফায়ারফক্স সমর্থন স্থিতিশীল করতে এবং অনুপস্থিত APIগুলি আমাদের নজরে আনতে Puppeteer টিমের ব্যবহারকারীদের কাছ থেকে ইনপুট প্রয়োজন।

Puppeteer v2.1.0 থেকে আপনি puppeteer.launch({product: 'firefox'}) নির্দিষ্ট করতে পারেন আপনার Puppeteer স্ক্রিপ্টগুলি Firefox Nightly-এ চালানোর জন্য, কোনো অতিরিক্ত কাস্টম ছাড়াই।
প্যাচ যদিও একটি পুরানো পরীক্ষা ফায়ারফক্সের একটি প্যাচড সংস্করণের প্রয়োজন হয়, বর্তমান পদ্ধতিটি "স্টক" ফায়ারফক্সের সাথে কাজ করে।

আমরা সাফারির মতো ব্রাউজারগুলিতে Puppeteer সমর্থন আনতে অন্যান্য ব্রাউজার বিক্রেতাদের সাথে সহযোগিতা অব্যাহত রাখি। এই প্রচেষ্টার মধ্যে ক্রস-ব্রাউজার কমান্ড কার্যকর করার জন্য একটি স্ট্যান্ডার্ড অন্বেষণ অন্তর্ভুক্ত রয়েছে (Chrome দ্বারা ব্যবহৃত অ-মানক DevTools প্রোটোকলের উপর নির্ভর করার পরিবর্তে)।

Puppeteer এর লক্ষ্য এবং নীতি কি?

প্রকল্পের লক্ষ্যগুলি হল:

  • একটি পাতলা, ক্যানোনিকাল লাইব্রেরি প্রদান করুন যা DevTools প্রোটোকলের ক্ষমতাগুলিকে হাইলাইট করে৷
  • অনুরূপ পরীক্ষার লাইব্রেরির জন্য একটি রেফারেন্স বাস্তবায়ন প্রদান করুন। অবশেষে, এই অন্যান্য কাঠামো তাদের ভিত্তি স্তর হিসাবে Puppeteer গ্রহণ করতে পারে।
  • হেডলেস/স্বয়ংক্রিয় ব্রাউজার টেস্টিং গ্রহণ করুন।
  • ডগফুডকে সাহায্য করুন নতুন DevTools প্রোটোকল বৈশিষ্ট্য...এবং বাগ ধরতে!
  • স্বয়ংক্রিয় ব্রাউজার পরীক্ষার ব্যথা পয়েন্ট সম্পর্কে আরও জানুন এবং সেই ফাঁকগুলি পূরণ করতে সহায়তা করুন৷

পণ্যের সিদ্ধান্ত নিতে সাহায্য করার জন্য আমরা Chromium নীতিগুলিকে মানিয়ে নিই:

  • গতি : একটি স্বয়ংক্রিয় পৃষ্ঠার উপরে পুতুলের কার্যক্ষমতা প্রায় শূন্য রয়েছে।
  • নিরাপত্তা : Puppeteer Chromium-এর ক্ষেত্রে অফ-প্রক্রিয়া পরিচালনা করে, সম্ভাব্য দূষিত পৃষ্ঠাগুলিকে স্বয়ংক্রিয়ভাবে নিরাপদ করে তোলে।
  • স্থিতিশীলতা : পুতুল ফ্ল্যাকি হওয়া উচিত নয় এবং মেমরি ফাঁস করা উচিত নয়।
  • সরলতা : Puppeteer একটি উচ্চ-স্তরের API প্রদান করে যা ব্যবহার করা, বোঝা এবং ডিবাগ করা সহজ।

Puppeteer কি সেলেনিয়াম/ওয়েবড্রাইভার প্রতিস্থাপন করছে?

না . উভয় প্রকল্প খুব ভিন্ন কারণে মূল্যবান:

  • সেলেনিয়াম/ওয়েবড্রাইভার ক্রস-ব্রাউজার অটোমেশনের উপর ফোকাস করে; এর মান প্রস্তাব একটি একক স্ট্যান্ডার্ড API যা সমস্ত প্রধান ব্রাউজার জুড়ে কাজ করে।
  • পুতুল ক্রোমিয়ামের উপর দৃষ্টি নিবদ্ধ করে; এর মূল্য প্রস্তাব হল সমৃদ্ধ ক্ষমতা এবং উচ্চ নির্ভরযোগ্যতা।

তাতে বলা হয়েছে, আপনি Chromium-এর বিরুদ্ধে পরীক্ষা চালানোর জন্য Puppeteer ব্যবহার করতে পারেন , যেমন সম্প্রদায়-চালিত জেস্ট-পাপেটিয়ার ব্যবহার করে। যদিও এটি সম্ভবত আপনার একমাত্র পরীক্ষার সমাধান হওয়া উচিত নয়, ওয়েবড্রাইভারের তুলনায় এটির কয়েকটি ভাল পয়েন্ট রয়েছে:

  • Puppeteer-এর জন্য শূন্য সেটআপ প্রয়োজন এবং এটি Chromium সংস্করণের সাথে একত্রিত হয় যার সাথে এটি সবচেয়ে ভাল কাজ করে। কোনো পরীক্ষা না করার চেয়ে শুধুমাত্র Chromium-এ চলমান কয়েকটি পরীক্ষা করা ভালো।
  • Puppeteer এর ইভেন্ট-চালিত আর্কিটেকচার রয়েছে, যা অনেক সম্ভাব্য ফ্লাককেস দূর করে। পুতুল স্ক্রিপ্টে খারাপ "স্লিপ(1000)" কলের কোন প্রয়োজন নেই।
  • Puppeteer ডিফল্টভাবে হেডলেস রান করে, যা এটিকে দ্রুত দৌড়াতে সাহায্য করে। Puppeteer v1.5.0 এছাড়াও ব্রাউজার প্রসঙ্গ উন্মোচন করে, এটি দক্ষতার সাথে পরীক্ষা সম্পাদনকে সমান্তরাল করা সম্ভব করে তোলে।
  • ডিবাগিংয়ের ক্ষেত্রে পাপেটিয়ার উজ্জ্বল হয়: "হেডলেস" বিটটিকে মিথ্যাতে ফ্লিপ করুন, "স্লোমো" যোগ করুন এবং আপনি দেখতে পাবেন ব্রাউজারটি কী করছে৷ এমনকি পরীক্ষার পরিবেশ পরিদর্শন করতে আপনি Chrome DevTools খুলতে পারেন।

কেন Puppeteer v.XXX Chromium v.YYY এর সাথে কাজ করে না?

আমরা Puppeteer কে Chromium এর সাথে একটি অবিভাজ্য সত্তা হিসেবে দেখি। Puppeteer-এর প্রতিটি সংস্করণ Chromium-এর একটি নির্দিষ্ট সংস্করণ বান্ডিল করে – একমাত্র সংস্করণ যার সাথে কাজ করার নিশ্চয়তা রয়েছে।

এটি একটি কৃত্রিম সীমাবদ্ধতা নয়। Puppeteer এর উপর অনেক কাজ আসলে Chromium ভান্ডারে হচ্ছে। এখানে একটি সাধারণ গল্প আছে:

  1. একটি Puppeteer বাগ রিপোর্ট করা হয়েছে
  2. এটি DevTools প্রোটোকলের একটি সমস্যা, তাই আমরা এটি Chromium-এ ঠিক করি
  3. আপস্ট্রিম ঠিক হয়ে গেলে, আমরা আপডেটেড ক্রোমিয়ামকে পাপেটিয়ারে রোল করি

যাইহোক, প্রায়শই Chromium এর পরিবর্তে অফিসিয়াল Google Chrome এর সাথে Puppeteer ব্যবহার করা বাঞ্ছনীয়। এটি কাজ করার জন্য, আপনাকে একটি puppeteer-core সংস্করণ ইনস্টল করতে হবে যা Chrome সংস্করণের সাথে মিলে যায়।

উদাহরণস্বরূপ, puppeteer-core দিয়ে Chrome 101 চালাতে, chrome-101 npm ট্যাগ ব্যবহার করুন:

npm install puppeteer-core@chrome-101

Puppeteer কোন Chromium সংস্করণ ব্যবহার করে?

নিম্নলিখিত উপায়গুলির মধ্যে একটি ব্যবহার করে সংস্করণটি খুঁজুন:

  • revisions.tschromium এন্ট্রি দেখুন। সংশ্লিষ্ট Chromium কমিট এবং সংস্করণ নম্বর খুঁজে পেতে, OmahaProxy- এর "Find Releases" বিভাগে একটি r দ্বারা উপসর্গযুক্ত সংশোধনের জন্য অনুসন্ধান করুন৷
  • versionsPerRelease ম্যাপ দেখুন versions.js এ যেটিতে Chromium এবং Puppeteer সংস্করণের মধ্যে ম্যাপিং রয়েছে। দ্রষ্টব্য: ফাইলটিতে শুধুমাত্র Puppeteer সংস্করণ রয়েছে যেখানে Chromium আপডেট করা হয়েছে। সব Puppeteer সংস্করণ তালিকাভুক্ত করা হয় না.

Puppeteer কোন ফায়ারফক্স সংস্করণ ব্যবহার করে?

যেহেতু ফায়ারফক্স সমর্থন পরীক্ষামূলক, তাই PUPPETEER_PRODUCT এনভায়রনমেন্ট ভেরিয়েবল firefox সেট করা হলে Puppeteer সর্বশেষ ফায়ারফক্স নাইটলি ডাউনলোড করে। এই কারণেই revisions.ts-firefox মান latest -- Puppeteer একটি নির্দিষ্ট ফায়ারফক্স সংস্করণের সাথে আবদ্ধ নয়।

Puppeteer ইনস্টলেশনের অংশ হিসেবে ফায়ারফক্স নাইটলি আনতে:

PUPPETEER_PRODUCT=firefox npm i puppeteer
# or "yarn add puppeteer"

একটি নেভিগেশন কি বিবেচনা করা হয়?

Puppeteer এর দৃষ্টিকোণ থেকে, "নেভিগেশন" এমন কিছু যা একটি পৃষ্ঠার URL পরিবর্তন করে। নিয়মিত নেভিগেশন ছাড়াও যেখানে ব্রাউজার ওয়েব সার্ভার থেকে একটি নতুন নথি আনতে নেটওয়ার্কে আঘাত করে, এতে অ্যাঙ্কর নেভিগেশন এবং ইতিহাস API ব্যবহার অন্তর্ভুক্ত রয়েছে।

"নেভিগেশন" এর এই সংজ্ঞার সাথে, পাপেটিয়ার একক-পৃষ্ঠার অ্যাপ্লিকেশনগুলির সাথে নির্বিঘ্নে কাজ করে।

একটি "বিশ্বস্ত" এবং "অবিশ্বস্ত" ইনপুট ইভেন্টের মধ্যে পার্থক্য কী?

ব্রাউজারে, ইনপুট ইভেন্ট দুটি বড় গ্রুপে বিভক্ত করা যেতে পারে: বিশ্বস্ত বনাম অবিশ্বস্ত।

  • বিশ্বস্ত ইভেন্ট : পৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করে ব্যবহারকারীদের দ্বারা তৈরি ইভেন্ট, যেমন মাউস বা কীবোর্ড ব্যবহার করে।
  • অবিশ্বস্ত ইভেন্ট : ওয়েব API দ্বারা তৈরি ইভেন্ট, যেমন document.createEvent বা element.click() পদ্ধতি।

ওয়েবসাইটগুলি এই দুটি গ্রুপের মধ্যে পার্থক্য করতে পারে:

  • একটি Event.isTrusted ইভেন্ট পতাকা ব্যবহার করে
  • সহগামী ইভেন্টের জন্য স্নিফিং। উদাহরণস্বরূপ, প্রতিটি বিশ্বস্ত 'click' ইভেন্টের আগে 'mousedown' এবং 'mouseup' ইভেন্ট থাকে।

অটোমেশনের উদ্দেশ্যে বিশ্বস্ত ইভেন্ট তৈরি করা গুরুত্বপূর্ণ। Puppeteer এর সাথে উত্পন্ন সমস্ত ইনপুট ইভেন্টগুলি বিশ্বস্ত এবং সঠিক সহগামী ইভেন্টগুলিকে আগুন দেয়।

যদি, কোনো কারণে, একজনের একটি অবিশ্বস্ত ইভেন্টের প্রয়োজন হয়, তাহলে পৃষ্ঠার সাথে একটি পৃষ্ঠা প্রসঙ্গে যাওয়া সবসময় সম্ভব। একটি জাল ইভেন্ট page.evaluate এবং তৈরি করা:

await page.evaluate(() => {
  document.querySelector('button[type=submit]').click();
});

Puppeteer কোন বৈশিষ্ট্য সমর্থন করে না?

আপনি দেখতে পাবেন যে অডিও এবং ভিডিও যুক্ত পৃষ্ঠাগুলি নিয়ন্ত্রণ করার সময় Puppeteer আশানুরূপ আচরণ করে না। উদাহরণস্বরূপ, ভিডিও প্লেব্যাক এবং স্ক্রিনশটগুলি ব্যর্থ হওয়ার সম্ভাবনা রয়েছে ।) এর দুটি কারণ রয়েছে:

  • Puppeteer ক্রোমিয়াম (ক্রোম নয়) দিয়ে বান্ডিল করা হয়। তাই ডিফল্টরূপে, এটি Chromium-এর সমস্ত মিডিয়া-সম্পর্কিত সীমাবদ্ধতাগুলিকে উত্তরাধিকার সূত্রে পায়৷ এর মানে হল Puppeteer লাইসেন্সকৃত ফরম্যাট যেমন AAC বা H.264 সমর্থন করে না।
    • puppeteer.launchexecutablePath বিকল্পের সাথে Chromium-এর পরিবর্তে Puppeteer-কে আলাদাভাবে-ইনস্টল করা সংস্করণ Chrome ব্যবহার করতে বাধ্য করা সম্ভব। এই মিডিয়া ফর্ম্যাটগুলিকে সমর্থন করে এমন Chrome-এর অফিসিয়াল রিলিজের প্রয়োজন হলেই আপনার এই কনফিগারেশনটি ব্যবহার করা উচিত৷
  • যেহেতু Puppeteer (সমস্ত কনফিগারেশনে) Chromium বা Chrome এর একটি ডেস্কটপ সংস্করণ নিয়ন্ত্রণ করে, তাই শুধুমাত্র Chrome এর মোবাইল সংস্করণ দ্বারা সমর্থিত বৈশিষ্ট্যগুলি সমর্থিত নয়৷ এর মানে হল যে Puppeteer HTTP লাইভ স্ট্রিমিং (HLS) সমর্থন করে না।

আমার পরীক্ষার পরিবেশে Puppeteer ইনস্টল/চালাতে সমস্যা হচ্ছে। আমি কোথায় সাহায্য খুঁজতে হবে?

আমাদের কাছে বিভিন্ন অপারেটিং সিস্টেমের জন্য একটি সমস্যা সমাধানের নির্দেশিকা রয়েছে যা প্রয়োজনীয় নির্ভরতা তালিকাভুক্ত করে।

প্রতিটি npm ci রানে Chromium ডাউনলোড হয়। আমি কিভাবে ডাউনলোড ক্যাশে করতে পারি?

ডিফল্ট ডাউনলোড পাথ হল node_modules/puppeteer/.local-chromium । যাইহোক, আপনি PUPPETEER_DOWNLOAD_PATH পরিবেশ পরিবর্তনশীল দিয়ে সেই পথটি পরিবর্তন করতে পারেন।

Puppeteer লঞ্চের সময় Chromium এক্সিকিউটেবল অবস্থানের সমাধান করতে সেই ভেরিয়েবলটি ব্যবহার করে, তাই আপনাকে PUPPETEER_EXECUTABLE_PATH ও নির্দিষ্ট করতে হবে না।

উদাহরণস্বরূপ, Chromium ডাউনলোডকে ~/.npm/chromium এ রাখতে:

export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium
npm ci

# by default the Chromium executable path is inferred
# from the download path
npm test

# a new run of npm ci will check for the existence of
# Chromium in ~/.npm/chromium
npm ci

আমার আরো প্রশ্ন আছে! আমি কোথায় জিজ্ঞাসা করব?

Puppeteer-এ সাহায্য পাওয়ার অনেক উপায় আছে:

আপনার প্রশ্ন পোস্ট করার আগে এই চ্যানেলগুলি অনুসন্ধান করতে ভুলবেন না।