W ubiegłym tygodniu wspólnie z BrowserStack ogłosiliśmy, że WebDriver BiDi jest gotowy do wdrożenia w BrowserStack. W tym tygodniu lato WebDriver BiDi trwa, a Firefox 129 i Puppeteer 23 otrzymują gotowe do produkcji obsługę WebDriver BiDi.
Mozilla od ponad 4 lat współpracuje przy tworzeniu nowego standardu WebDriver BiDi, początkowo pomagając w opracowaniu nowego standardu, a potem stopniowo wdrażając go w przeglądarce Firefox, starając się dokumentować postępy w newsletterze dla Firefoksa WebDriver.
WebDriver BiDi jest teraz gotowy do wdrożenia w Firefoxie, a Puppeteer od wersji 23 zapewnia stabilną obsługę Firefoxa za pomocą WebDriver BiDi. Dzięki temu możesz automatyzować Firefoxa za pomocą tego samego zwięzłego interfejsu API co w Chrome. Obsługa protokołu Chrome DevTools (CDP) przez Puppeteer pozostaje niezmieniona.
Firefox, CDP i Puppeteer
Puppeteer to niezawodne narzędzie dla programistów do automatyzacji przeglądarek opartych na Chromium za pomocą protokołu Chrome DevTools Protocol (CDP). W 2019 r. Puppeteer otrzymał obsługę eksperymentalną w Firefoksie.
Aby to umożliwić, Mozilla wdrożyła i utrzymywała podzbiór CDP w Firefox. To rozwiązanie umożliwia automatyzację przeglądarki Firefox za pomocą interfejsu Puppeteer API, ale ma pewne ograniczenia:
- Jak wskazuje nazwa, CDP jest używany przez Narzędzie deweloperskie w Chrome i musi być dostosowywany do wymagań tego narzędzia.
- Platforma CDP nie jest ustandaryzowana we wspólnej, publicznej specyfikacji, a utrzymanie jej w przeglądarce Firefox wymagało stabilnej komunikacji i wysiłku.
- Firefox wdrożył tylko podzbiór interfejsu CDP, więc Puppeteer nie może zagwarantować, że jego pełny interfejs API będzie działać z Firefoxem, co może wprowadzać użytkowników w błąd.
Chociaż przez kilka ostatnich lat razem z Mozilla utrzymywaliśmy tę usługę, zawsze wiedzieliśmy, że nie jest to trwałe rozwiązanie. Opierając się na tej współpracy, w tym innych największych dostawców przeglądarek i narzędzi, wspólnie utworzyliśmy WebDriver BiDi.
.Współpraca to podstawa
Zespół Firefoksa pracował nad wdrożeniem funkcji WebDriver BiDi w przeglądarce Firefox. Jednocześnie zespół Puppeteer rozszerza obsługę WebDriver BiDi o interfejs Puppeteer API. Obydwa zespoły pracowały nad tym, aby udostępnić wszystkie interfejsy API wymagane do automatyzacji w produkcji za pomocą WebDriver BiDi w Puppeteer, zapewniając obsługę zarówno w Chrome, jak i w Firefox.
Dzięki temu użytkownicy Puppeteer mogą wybrać Firefoxa lub Chrome do automatyzacji, podając klucz konfiguracji browser
podczas uruchamiania instancji 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();
Więcej informacji o nowościach w Firefox 129 i o działaniach Mozilli nad WebDriver BiDi znajdziesz w powiązanym poście na blogu Mozilla Hacks.
wsparcie CDP w przyszłości
Powyższy fragment kodu pokazuje, że aby zautomatyzować Chrome za pomocą WebDriver BiDi w Puppeteer, musisz jawnie ustawić protocol
na webDriverBiDi
. Wynika to z faktu, że w Chrome Puppeteer będzie domyślnie korzystać z CDP, aby nie zakłócać obecnej automatyzacji, lecz także w dalszym ciągu obsługiwać automatyzacje specjalizujące się w funkcjach Chrome.
Obsługa CDP w Firefoksie została wycofana od wersji 129 i planowana jest na koniec 2024 roku. Jeśli masz automatyzacje, które korzystają z obsługi CDP w Firefox, zdecydowanie zalecamy migrację do WebDriver BiDi. Jeśli to niemożliwe, napisz na dev-webdriver@mozilla.org, przesyłając swój przypadek użycia.