跳至主要内容
版本:22.5.0

常见问题解答

问:谁维护 Puppeteer?

Chrome 浏览器自动化团队维护该库,但我们非常欢迎您为该项目提供帮助和专业知识!请参阅我们的贡献指南

问:跨浏览器支持的状态是什么?

官方 Firefox 支持目前处于实验阶段。与 Mozilla 的持续合作旨在支持常见的端到端测试用例,开发人员希望这些用例涵盖跨浏览器。Puppeteer 团队需要用户的意见来稳定 Firefox 支持并向我们提出缺少的 API。

从 Puppeteer v2.1.0 开始,您可以指定 puppeteer.launch({product: 'firefox'}) 在 Firefox Nightly 中运行您的 Puppeteer 脚本,无需任何其他自定义补丁。虽然 较旧的实验 需要一个已修补的 Firefox 版本,但 当前方法 可与“库存”Firefox 配合使用。

我们将继续与其他浏览器供应商合作,为 Safari 等浏览器提供 Puppeteer 支持。这项工作包括探索跨浏览器命令的执行标准(而不是依赖 Chrome 使用的非标准 DevTools 协议)。

2023-11-17 更新:Puppeteer 对新的 WebDriverBiDi 协议提供实验性支持,该协议可用于自动化 Firefox。Firefox 中的 WebDriver BiDi 实现将来将取代 Firefox 中当前的 CDP 实现。有关更多详细信息,请参阅 https://puppeteer.com.cn/webdriver-bidi

问:Puppeteer 是否支持 WebDriver BiDi?

Puppeteer 对 WebDriver BiDi 提供实验性支持。请参阅 https://puppeteer.com.cn/webdriver-bidi

问:Puppeteer 的目标和原则是?

该项目的目标是

  • 提供一个参考实现,突出显示 Chrome DevToolsWebDriver BiDi 协议的功能。
  • 扩大跨浏览器自动化测试的采用。
  • 帮助推广新的 DevTools 协议和 WebDriver BiDi 功能...并捕获错误!
  • 更多地了解自动化浏览器测试的痛点,并帮助填补这些空白。

我们采用 Chromium 原则 来帮助我们推动产品决策

  • 速度:Puppeteer 对自动化页面几乎没有性能开销。
  • 安全性:Puppeteer 在浏览器之外运行,因此可以安全地自动化潜在的恶意页面。
  • 稳定性:Puppeteer 不应该不稳定,也不应该泄露内存。
  • 简单性:Puppeteer 提供了一个高级 API,易于使用、理解和调试。

问:Puppeteer 是否是 Selenium WebDriver 的替代品?

。这两个项目因截然不同的原因而很有价值

  • Selenium WebDriver 专注于跨浏览器自动化,并为多种语言提供绑定;Puppeteer 仅适用于 JavaScript。
  • Puppeteer 专注于 Chromium;其价值主张是为基于 Chromium 的浏览器提供更丰富的功能。

也就是说,你可以使用 Puppeteer 对 Chromium 运行测试,例如使用社区驱动的 jest-puppeteerPuppeteer 的 Angular 集成。虽然这可能不应该成为你唯一的测试解决方案,但与经典的 WebDriver 相比,它确实有一些优点

  • Puppeteer 无需任何设置,并捆绑了与其配合得最好的 Chrome 版本,使其非常容易上手
  • Puppeteer 具有事件驱动的架构,消除了很多潜在的不稳定性。在 puppeteer 脚本中不需要“sleep(1000)”调用。
  • Puppeteer 公开了浏览器上下文,从而可以有效地并行执行测试。
  • Puppeteer 在调试方面表现出色:将“headless”位翻转为 false,添加“slowMo”,你将看到浏览器正在做什么。你甚至可以打开 Chrome DevTools 来检查测试环境。

问:为什么 Puppeteer v.XXX 不适用于 Chromium v.YYY?

我们将 Puppeteer 视为与 Chromium不可分割的实体。每个版本的 Puppeteer 都捆绑了一个特定的 Chromium 版本——唯一保证与其配合使用的版本。

这不是一个人为的限制:Puppeteer 的很多工作实际上都是在 Chromium 存储库中进行的。这是一个典型的故事

问:Puppeteer 使用哪个 Chrome 版本?

revisions.ts 中查找 chrome 条目。

问:Puppeteer 使用哪个 Firefox 版本?

由于 Firefox 支持处于实验阶段,因此当 PUPPETEER_PRODUCT 环境变量设置为 firefox 时,Puppeteer 会下载最新的 Firefox Nightly。这也是 revisions.tsfirefox 的值为 latest 的原因——Puppeteer 并未绑定到特定的 Firefox 版本。

在 Puppeteer 安装过程中获取 Firefox Nightly

PUPPETEER_PRODUCT=firefox npm i puppeteer

将 Firefox Nightly 下载到现有的 Puppeteer 项目中

npx puppeteer browsers install firefox

问:什么是“导航”?

从 Puppeteer 的角度来看,“导航”是任何更改页面 URL 的操作。除了浏览器访问网络以从 Web 服务器获取新文档的常规导航之外,还包括 锚点导航历史记录 API 的使用。

有了这个“导航”的定义,Puppeteer 可以与单页面应用程序无缝协作。

问:什么是“受信任”和“不受信任”的输入事件之间的区别?

在浏览器中,输入事件可以分为两大类:受信任与不受信任。

  • 可信事件:用户与页面交互时产生的事件,例如使用鼠标或键盘。
  • 不可信事件:Web API 产生的事件,例如 document.createEventelement.click() 方法。

网站可以通过以下方式区分这两组事件

  • 使用 Event.isTrusted 事件标志
  • 嗅探伴随事件。例如,每个可信的 'click' 事件之前都有 'mousedown''mouseup' 事件。

出于自动化目的,生成可信事件非常重要。Puppeteer 生成的所有输入事件都是可信的,并且会触发适当的伴随事件。如果出于某种原因需要不可信事件,则始终可以使用 page.evaluate 进入页面上下文并生成一个虚假事件

await page.evaluate(() => {
document.querySelector('button[type=submit]').click();
});

问:Puppeteer 是否支持媒体和音频播放?

Puppeteer 默认使用 Chrome for Testing 二进制文件,该文件从 M120 开始支持专有编解码器。

问:我在测试环境中安装/运行 Puppeteer 时遇到问题。我应该在哪里寻求帮助?

我们针对各种操作系统提供 故障排除 指南,其中列出了所需依赖项。

问:我还有更多问题!我该去哪里提问?

有许多方法可以获得有关 Puppeteer 的帮助

在发布问题之前,请务必搜索这些渠道。