就在上周,我们与 BrowserStack 一起,宣布 WebDriver BiDi 将变为 支持生产环境的 BrowserStack。 本周,WebDriver BiDi 与 Firefox 129 和 Puppeteer 23 均获得对 WebDriver BiDi 的正式版支持!
四年多来,Mozilla 一直是 WebDriver BiDi 的强大协作者 最初帮助制定新标准,然后逐步实施 并在 Firefox WebDriver 简报中清晰地记录相关进度。
WebDriver BiDi 从版本 23 开始可在 Firefox 和 Puppeteer 中投入生产, 通过 WebDriver BiDi 为 Firefox 提供稳定的支持。这样,您就可以 Firefox 具有简洁的 API 与 Chrome。Puppeteer 对 Chrome 的支持 开发者工具协议 (CDP) 保持不变。
Firefox、CDP 和 Puppeteer
Puppeteer 是一款可靠的工具,可让开发者使用 Chrome 浏览器自动执行基于 Chromium 的浏览器 (也称为 CDP)。2019 年,Puppeteer 获得了实验性支持 。
为此,Mozilla 实施并维护了一部分 CDP, Firefox。这一解决方案可以让 Firefox 通过 Puppeteer API 实现自动化,不过, 注意事项:
- 顾名思义,CDP 由 Chrome 的开发者工具使用,需要更改 以及开发者工具要求
- CDP 未在共享的公开规范中标准化,在 Firefox 中维护 CDP 需要稳定的沟通和 努力。
- 由于 Firefox 只实施了部分 CDP,因此 Puppeteer 永远无法 保证其完整 API 可与 Firefox 配合使用,给用户造成困扰。
虽然我们很高兴能与 Mozilla 共同维护此支持, 一直以来,我们都知道这并非永久性的解决方案。以此为基础, 包括其他主要浏览器和工具供应商, 我们一起创建了 WebDriver BiDi。
团队合作让梦想成真
Firefox 团队一直非常热衷于在 Firefox 中实现 WebDriver BiDi。 与此同时,Puppeteer 团队也一直在扩展 WebDriver BiDi 支持范围 来运行 Puppeteer API这两个团队努力实现的目标是 让生产自动化应用场景所需的每一个 API 可使用 Puppeteer 中的 WebDriver BiDi 进行加载,从而确保 Chrome 和 Firefox。
这样 Puppeteer 用户就可以选择 Firefox 或 Chrome 来实现自动化操作,
在启动 Puppeteer 时指定 browser
配置键
实例。
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 结合使用,因此您需要明确将 protocol
设置为
webDriverBiDi
。这是因为对于 Chrome 而言,Puppeteer 将始终默认
CDP - 不破坏现有的自动化操作,同时继续支持自动化操作
专门针对 Chrome 的功能而设计。
Firefox 129 将不再支持 CDP,并且 计划于 2024 年底移除。 如果 Firefox 中的现有自动化操作依赖于 CDP 支持,我们强烈建议 建议您改用 WebDriver BiDi。如果无法做到这一点,请与 dev-webdriver@mozilla.org 替换为您的用例。