跳转到主要内容
版本:23.11.1

常见问题解答

问:谁维护 Puppeteer?

Chrome 浏览器自动化团队维护该库,但我们很乐意获得您在项目上的帮助和专业知识!请参阅我们的贡献指南

问:跨浏览器支持的状态如何?

从 Puppeteer v23.0.0 开始,Puppeteer 提供对 Chrome 和 Firefox 的支持。

要自动化 Chrome,Puppeteer 默认使用 Chrome DevTools 协议 (CDP),但也可以使用 WebDriver BiDi 进行自动化,这是自动化 Firefox 的默认方式。

要了解 API 支持方面的细微差异,请参阅我们的WebDriver BiDi 指南

问:Puppeteer 支持 WebDriver BiDi 吗?

从 Puppeteer v23.0.0 开始,Puppeteer 具有对 WebDriver BiDi 的生产就绪支持,可以自动化 Chrome 和 Firefox。

问:Puppeteer 会继续支持 CDP 吗?

我们不会停止支持使用 CDP 自动化 Chrome - 尽管 Puppeteer 支持 WebDriver BiDi。这样做是为了不破坏依赖 CDP 的现有自动化,同时继续启用 Chrome 独有且未通过 WebDriver BiDi 标准化的自动化用例。

问:Puppeteer 的目标和原则是什么?

该项目目标如下:

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

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

  • 速度:Puppeteer 对自动化页面的性能开销几乎为零。
  • 安全性:Puppeteer 相对于浏览器以进程外方式运行,使其可以安全地自动化潜在的恶意页面。
  • 稳定性:Puppeteer 不应不稳定,也不应泄漏内存。
  • 简单性:Puppeteer 提供了一个易于使用、理解和调试的高级 API。

问:Puppeteer 是 Selenium 的替代品吗?

Puppeteer 是一个基于 Node.js 的参考实现,展示了如何使用 CDP 和 WebDriver BiDi 自动化浏览器 - 这也是 Selenium 项目正在贡献的相同 Web 标准。

Selenium 项目在多个方面超出了 Puppeteer 的功能:它为比 JavaScript 更多的语言提供绑定,并且例如,它还提供用于大规模编排自动化的工具,如 Selenium Grid。这两者都超出了 Puppeteer 的范围。

有一些社区项目在 Puppeteer 的核心功能之外添加了功能,使测试之类的操作更加方便。例如,请参阅

问:为什么 Puppeteer v.XXX 不能与特定版本的 Chrome 或 Firefox 一起使用?

每个 Puppeteer 版本都与特定的浏览器版本紧密捆绑在一起,以确保与底层协议的实现(Chrome DevTools 协议和 WebDriver BiDi)的兼容性。

这是为了防止 Chrome 或 Firefox 中的更改意外中断 Puppeteer。

问:Puppeteer 使用哪个版本的 Chrome 和 Firefox?

revisions.ts 中查找 chromefirefox 条目。

问:什么是“导航”?

从 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 的帮助

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