就在上周,我们与 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 联系,并提供您的用例。