WebDriver BiDi 可在 Firefox、Chrome 和 Puppeteer 中正式投入使用

就在上周,我们与 BrowserStack 联合宣布,WebDriver BiDi 已在 BrowserStack 中做好正式版发布准备。本周,WebDriver BiDi 的夏季继续火热进行,Firefox 129 和 Puppeteer 23 都已支持 WebDriver BiDi,可用于生产环境!

在 WebDriver BiDi 方面,Mozilla 已经是强大的合作伙伴超过四年了。最初,他们帮助制定了新标准,然后在 Firefox 中逐步实现了该标准,并通过 Firefox WebDriver 简报清晰地记录了进展。

现在,Firefox 中已支持 WebDriver BiDi 的正式版,因此从 23 版开始,Puppeteer 通过 WebDriver BiDi 为 Firefox 提供稳定支持。这样,您就可以使用与 Chrome 相同的简洁 API 来自动执行 Firefox 操作。Puppeteer 对 Chrome 开发者工具协议 (CDP) 的支持保持不变。

Firefox、CDP 和 Puppeteer

Puppeteer 是一款可靠的工具,可供开发者使用 Chrome 开发者工具协议(也称为 CDP)自动操作基于 Chromium 的浏览器。2019 年,Puppeteer 获得了对 Firefox 的实验性支持。

为此,Mozilla 在 Firefox 中实现并维护了 CDP 的一部分。此解决方案可让您使用 Puppeteer API 自动执行 Firefox 操作,但存在一些注意事项:

  • 顾名思义,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,说明您的用例。