WebDriver BiDi 可在 Firefox、Chrome 和 Puppeteer 使用

就在上週,我們與 BrowserStack 一同宣布 WebDriver BiDi 已準備好在 BrowserStack 上正式推出。本週,WebDriver BiDi 的夏季活動持續進行,Firefox 129 和 Puppeteer 23 都已準備好支援 WebDriver BiDi!

Mozilla 在 WebDriver BiDi 方面已合作四年多,一開始協助塑造新標準,接著逐步在 Firefox 中實作,並透過 Firefox WebDriver 電子報清楚記錄進度。

由於 WebDriver BiDi 現已可在 Firefox 中正式使用,因此 Puppeteer 自 23 版起,便可透過 WebDriver BiDi 為 Firefox 提供穩定支援。這樣一來,您就能使用與 Chrome 相同的簡潔 API 自動化 Firefox。Puppeteer 對 Chrome 開發人員工具通訊協定 (CDP) 的支援仍維持不變。

Firefox、CDP 和 Puppeteer

Puppeteer 是可靠的工具,可讓開發人員使用 Chrome DevTools 通訊協定 (也稱為 CDP) 自動化以 Chromium 為基礎的瀏覽器。2019 年,Puppeteer 開始支援 Firefox 的實驗功能。

為了讓這項功能運作,Mozilla 在 Firefox 中實作並維護 CDP 子集。這項解決方案可讓 Firefox 透過 Puppeteer API 自動化,但有以下限制:

  • 顧名思義,CDP 是由 Chrome 的開發人員工具使用,需要根據開發人員工具需求進行變更。
  • CDP 並未以共用的公開規格標準化,因此在 Firefox 中維護 CDP 需要持續的溝通和努力。
  • 由於 Firefox 只實作 CDP 的子集,Puppeteer 無法保證其完整 API 可與 Firefox 搭配運作,這會讓使用者感到困惑。

我們很高興過去幾年與 Mozilla 合作提供這項支援,但我們一直知道這並非永久解決方案。我們與其他主要瀏覽器和工具供應商合作,共同打造 WebDriver BiDi。

團結力量大

Firefox 團隊一直積極在 Firefox 中實作 WebDriver BiDi。同時,Puppeteer 團隊也一直在 Puppeteer API 中擴充 WebDriver BiDi 支援功能。兩個團隊的目標是讓 Puppeteer 中的 WebDriver BiDi 提供實際工作環境自動化用途所需的所有 API,確保 Chrome 和 Firefox 都能提供支援。

共用團隊資訊主頁:顯示過去幾個月內通過測試的次數。
共用團隊資訊主頁,顯示過去幾個月內通過測試的次數。

這可讓 Puppeteer 使用者在啟動 Puppeteer 例項時指定 browser 設定鍵,以便為自動化作業選取 Firefox 或 Chrome。

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 支援

如上程式碼片段所示,如要使用 Puppeteer 搭配 WebDriver BiDi 自動化 Chrome,您必須明確將 protocol 設為 webDriverBiDi。這是因為在 Chrome 中,Puppeteer 會繼續預設為 CDP,以免中斷現有的自動化功能,同時也繼續支援專屬於 Chrome 功能的自動化功能。

Firefox 129 版已淘汰 CDP 支援功能,且該功能預計將於 2024 年底移除。如果您有現有的自動化動作,且需要 Firefox 中的 CDP 支援,強烈建議您遷移至 WebDriver BiDi。如果無法這麼做,請與 dev-webdriver@mozilla.org 聯絡,並說明您的使用情境。