الاستفادة من ميزات WebDriver BiDi: التشغيل الآلي في Chrome وFirefox مع Puppeteer

يتحدث محرك الدمى الآن إلى Firefox! 🎉 ولكن انتظر، ألم يتم ذلك من قبل؟ 🤔 لنلقِ نظرة على WebDriver BiDi، وهو البروتوكول الجديد في Puppeteer، ونتعرّف على أهمية هذا التطوير المثير لسير عمل التشغيل الآلي في Firefox.

WebDriver BiDi هو بروتوكول تشغيل مبرمَج جديد وموحّد على مستوى جميع المتصفّحات يجمع بين أفضل ما في WebDriver Classic وChrome DevTools Protocol (CDP). وتوفّر هذه الميزة إمكانية التواصل في الاتجاهين، ما يتيح استخدام أساليب مبرمَجة أكثر فعالية وكفاءة، والتحكّم بشكل دقيق. يمكنك تتبُّع مستوى التقدّم في خارطة العمل الرسمية.

منذ آخر تحديث بشأن الحالة، واصلنا العمل عن كثب مع مجموعة عمل أدوات واختبارات المتصفّحات في W3C. توفّر Puppeteer الآن ميزات مثل التسجّل وأحداث الشبكة وإرسال النماذج، وذلك بفضل التحسينات التي تم إجراؤها على WebDriver BiDi.

أريد الاطّلاع على الرمز.

يعرض النص البرمجي Puppeteer التالي WebDriver BiDi أثناء العمل، ويعمل بسلاسة على Chrome وFirefox:

  1. افتح المتصفّح الذي اخترته مع ضبط البروتوكول.
  2. راقِب رسائل وحدة التحكّم بحثًا عن الأخطاء.
  3. انتقِل إلى صفحة ويب، واضبط سمات إطار العرض، ثم انقر على زر.
  4. تحقّق من محتوى النص وتأكّد من المساواة.
import * as assert from 'node:assert'; 
import puppeteer from 'puppeteer';

// Arrange: Launch browser with WebDriver BiDi
const browser = await puppeteer.launch({
  protocol: 'webDriverBiDi',
     product: 'firefox', // or 'chrome'
});
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();

// Arrange: Monitor console messages
page.on('console', message => {
  if (message.type() != 'error') return;
  console.log('RECEIVED: %s', message.text());
});

// Action
await page.setViewport({width: 600, height: 1041});
await page.goto('https://coffee-cart.app/?breakable=1');

const coffee = await page.waitForSelector('[data-test="Espresso"]');
await coffee.click();

// Assert 
const checkout = await page.$('[data-test="checkout"]');
const total = await checkout.evaluate(el => el.textContent);
assert.equal(total, 'Total: $10.00');

browser.close();

مستوى تقدّم WebDriver BiDi في Puppeteer

لتقييم إمكانات WebDriver BiDi في Puppeteer، استخدمنا مجموعة اختبارات Puppeteer الشاملة. على الرغم من أنّ عملية تنفيذ واجهة برمجة التطبيقات Puppeteer وWebDriver BiDi لا تزال قيد التطوير ولا تتضمّن جميع ميزات Puppeteer مع Chrome وCDP حتى الآن، نريد أن نقدّم لك صورة واضحة عن الوضع الحالي.

فايرفوكس:

  • لقد وصل WebDriver BiDi إلى مستوى جودة مناسب لمهام التشغيل الآلي العملية. نجحت Mozilla في نقل اختبارات Puppeteer لـ pdf.js من Firefox وCDP إلى Firefox وWebDriver BiDi.
  • يجتاز أكثر من% 55 من الاختبارات بنجاح باستخدام WebDriver BiDi، ما يشير إلى وظائفه المتزايدة.
  • ومن الواضح أنّ أكثر من 82 اختبارًا جديدًا يستخدم WebDriver BiDi بكفاءة، ما يمهد الطريق لمزيد من التحسينات.

Chrome:

  • يحقّق Chrome حاليًا معدّل اجتياز يبلغ% 68 باستخدام WebDriver BiDi، ما يشير إلى أنّه يقدّم وظائف موثوقة. على الرغم من أنّ هناك مجالًا لمزيد من التحسين مقارنةً بالنهج المستنِد إلى CDP، إلا أنّ هذا النهج يُعدّ مبشرًا بتطويرات مستقبلية مثيرة.

ولا تزال بعض الميزات، مثل الوصول إلى ملفات تعريف الارتباط واعتراض طلبات الشبكة، وميزات المحاكاة المحددة والأذونات، قيد توحيد المقاييس. وسيتم دمجها في Puppeteer بعد أن تصبح جاهزة. في الوقت الحالي، يمكنك الاطّلاع على القائمة الكاملة لميزات Puppeteer المتوافقة مع WebDriver BiDi.

ألم يكن Puppeteer متوافقًا مع Firefox من قبل؟

على الرغم من أنّ Puppeteer كان يقدّم في السابق دعمًا تجريبيًا لمتصفّح Firefox باستخدام عملية تنفيذ محدودة وغير متوافقة مع جميع المتصفّحات لإطار عمل CDP، إلا أنّه كان يواجه قيودًا ولم يكن حلًا مستدامًا.

يعالج الإصدار التجريبي الجديد من Firefox وWebDriver BiDi هذه المشاكل.

ندرك أنّه قد تكون لديك أسئلة إضافية، مثل:

  • هل سيتم إيقاف دعم بروتوكول "إدارة الهوية وإمكانية الوصول" (CDP) في Firefox؟
  • هل كل ميزات Puppeteer متوافقة؟

للحصول على إجابات مفصّلة ومزيد من المعلومات، يمكنك الاطّلاع على الإعلان المخصّص من Firefox.

تجارب مثيرة في المستقبل

كان الاختبار على جميع المتصفحات أحد أهم احتياجات المطوّرين، لذا يسرّنا أن نتولى قيادة عملية دمج WebDriver BiDi في Puppeteer، ما يشكّل نقطة تحول نحو تجربة تشغيل آلي أكثر سلاسة وفعالية على جميع المتصفحات. ننصحك باستكشاف WebDriver BiDi باستخدام Puppeteer.

في المستقبل، سيصبح WebDriver BiDi البروتوكول التلقائي لواجهة Puppeteer، ما يُتيح تجربة تشغيل آلي متّسقة ومفعّلة.

إذا واجهت أي مشاكل عند إجراء اختبارات Puppeteer باستخدام WebDriver BiDi، يمكنك فتح المشاكل في أداة تتبُّع مشاكل Puppeteer.