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,从版本 23 开始,Puppeteer 可通过 WebDriver BiDi 为 Firefox 提供稳定支持。这样,您就可以使用与 Chrome 相同的简洁 API 来自动执行 Firefox 操作。Puppeteer 对 Chrome 开发者工具协议 (CDP) 的支持保持不变。

Firefox、CDP 和 Puppeteer

Puppeteer 是一款可靠的工具,可让开发者使用 Chrome 开发者工具协议(也称为 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

上例代码段表明,如需使用 WebDriver BiDi 与 Puppeteer 自动执行 Chrome,您需要将 protocol 显式设置为 webDriverBiDi。这是因为,对于 Chrome,Puppeteer 将继续默认使用 CDP,以免破坏现有的自动化操作,同时继续支持专门针对 Chrome 功能的自动化操作。

从 Firefox 129 开始,Firefox 中的 CDP 支持已废弃,计划于 2024 年底移除。如果您现有的自动化操作依赖于 Firefox 中的 CDP 支持,我们强烈建议您迁移到 WebDriver BiDi。如果无法做到这一点,请与 dev-webdriver@mozilla.org 联系,并提供您的用例。