WebDriver BiDi 可在 Firefox、Chrome 和 Puppeteer 使用

Matthias Rohmer
Matthias Rohmer

就在上週,我們與 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 Di,確保實際工作環境自動化所需的每個 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 的 CDP 支援功能已從 Firefox 129 淘汰,並預定於 2024 年底移除。如果您有現有的自動化動作,且需要 Firefox 中的 CDP 支援,強烈建議您遷移至 WebDriver BiDi。如果無法這麼做,請與 dev-webdriver@mozilla.org 聯絡,並說明您的使用情境。