רק בשבוע שעבר, ביחד עם BrowserStack, הודענו ש-WebDriver BiDi מוכן לשימוש בסביבת הייצור ב-BrowserStack. השבוע של WebDriver BiDi נמשך גם Firefox 129 ו-Puppeteer 23, שכל אחד מהם מקבל תמיכה מוכנה לייצור ב-WebDriver BiDi!
Mozilla שותפה פעילה ב-WebDriver BiDi כבר יותר מארבע שנים. בהתחלה היא עזרה לעצב את התקן החדש, ולאחר מכן הטמיעה אותו בהדרגה ב-Firefox. ההתקדמות של Mozilla מתועדת בניוזלטר של WebDriver ב-Firefox.
עכשיו, כש-WebDriver BiDi מוכן לשימוש בסביבת הייצור ב-Firefox, Puppeteer מגרסה 23 ואילך מציע תמיכה יציבה ב-Firefox דרך WebDriver BiDi. כך תוכלו לבצע אוטומציה ב-Firefox באמצעות אותו ממשק API תמציתי כמו ב-Chrome. התמיכה של Puppeteer בפרוטוקול Chrome Developer Protocol (CDP) נשארה ללא שינוי.
Firefox, CDP ו-Puppeteer
Puppeteer הוא כלי מהימן למפתחים שמאפשר לבצע אוטומציה של דפדפנים מבוססי Chromium באמצעות Chrome DevTools Protocol, שנקרא גם CDP. בשנת 2019 נוספה ל-Puppeteer תמיכה ניסיונית ב-Firefox.
כדי לעשות זאת, Mozilla הטמיעה קבוצת משנה של CDP ב-Firefox וניהול אותה. הפתרון הזה מאפשר להפוך את Firefox לאוטומטי באמצעות Puppeteer API, אבל יש לו מגבלות:
- כפי שרומז השם, כלי הפיתוח של Chrome משתמשים ב-CDP, והוא צריך להשתנות בהתאם לדרישות של כלי הפיתוח.
- ה-CDP לא סטנדרטי במפרט ציבורי משותף, וכדי לשמור על ה-CDP ב-Firefox נדרש תקשורת יציבה ומאמץ.
- מכיוון ש-Firefox הטמיע רק קבוצת משנה של CDP, Puppeteer אף פעם לא יכול להבטיח שה-API המלא שלו יפעל עם Firefox, דבר שעלול לגרום לבלבול בקרב המשתמשים.
אנחנו שמחים שהצלחנו לשמור על התמיכה הזו יחד עם Mozilla בשנים האחרונות, אבל תמיד ידענו שזה לא פתרון קבוע. על סמך השותפות הזו, ועם ספקים אחרים של דפדפנים וכלים, יצרנו יחד את WebDriver BiDi.
עבודת צוות מובילה לחלום
צוות Firefox עבד בלהט על הטמעת WebDriver BiDi ב-Firefox. במקביל, צוות Puppeteer הרחיב את התמיכה ב-WebDriver BiDi ב-Puppeteer API. המטרה ששני הצוותים פעלו להשגתה הייתה להפוך כל API שנדרש לתרחישים לדוגמה של אוטומציה בסביבת הייצור באמצעות WebDriver BiDi ב-Puppeteer, כדי להבטיח תמיכה גם ב-Chrome וגם ב-Firefox.
כך משתמשי Puppeteer יכולים לבחור ב-Firefox או ב-Chrome לפעולות האוטומטיות שלהם, על-ידי ציון מפתח ההגדרה של browser
כשמפעילים מכונת Puppeteer.
import puppeteer from 'puppeteer';
const firefoxBrowser = await puppeteer.launch({
browser: 'firefox', // WebDriver BiDi is used by default in Firefox.
});
const page = await firefoxBrowser.newPage();
...
await firefoxBrowser.close();
const chromeBrowser = await puppeteer.launch({
browser: 'chrome',
protocol: 'webDriverBiDi', // CDP would be used by default for Chrome.
});
const page = await chromeBrowser.newPage();
...
await chromeBrowser.close();
מידע נוסף על החידושים ב-Firefox 129 ועל העבודה של Mozilla בנושא WebDriver BiDi זמין בפוסט בבלוג Mozilla Hacks.
תמיכה ב-CDP בעתיד
קטע הקוד הקודם מראה שכדי לבצע אוטומציה של Chrome באמצעות WebDriver BiDi עם Puppeteer, צריך להגדיר את protocol
ל-webDriverBiDi
באופן מפורש. הסיבה לכך היא שב-Chrome, Puppeteer ימשיך להשתמש ב-CDP כברירת מחדל – כדי לא לשבור תהליכים אוטומטיים קיימים, אבל גם כדי להמשיך לתמוך בתהליכים אוטומטיים שמתמקדים בתכונות של Chrome.
התמיכה ב-CDP ב-Firefox הוצאה משימוש בגרסה 129, ומתוכננת להסרה בסוף שנת 2024. אם יש לכם תהליכים אוטומטיים קיימים שמסתמכים על תמיכה ב-CDP ב-Firefox, מומלץ מאוד לעבור ל-WebDriver BiDi. אם זה לא אפשרי, עליכם לפנות לכתובת dev-webdriver@mozilla.org למקרה שלכם.