就在上週,我們與 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 聯絡,並說明您的使用情境。