跳至内容

Puppeteer

Puppeteer 是什么,它如何截图,以及在浏览器自动化方面与 Playwright 有何不同。

Puppeteer 是由 Google Chrome 团队维护的开源 Node.js 库。它通过 Chrome DevTools Protocol 或 WebDriver BiDi 控制 Chrome 或 Chromium,也能控制 Firefox。它默认以无头模式运行,页面在没有可见窗口的情况下加载和渲染。

Puppeteer 脚本会启动浏览器、打开页面,并像用户一样操作页面:跳转、点击、输入以及等待内容出现。这个库常用于截图、生成 PDF、抓取数据、性能检查,以及对基于 Chrome 的 Web 应用进行自动化测试。

Puppeteer 能做什么

  • 启动 Chrome、Chromium 或 Firefox,或连接到正在运行的浏览器。
  • 设置视口、User-Agent、地理位置和网络条件。
  • 点击、输入、提交表单,并等待选择器出现或网络空闲。
  • 拦截请求,屏蔽广告、图片或跟踪器。
  • 用 page.screenshot() 保存截图,用 page.pdf() 保存 PDF。

用 Puppeteer 截图

page.screenshot() 可输出 PNG、JPEG 或 WebP。fullPage 选项截取整个可滚动文档,clip 截取一个矩形区域,元素句柄则截取单个元素。page.setViewport() 设置宽度、高度和 deviceScaleFactor,后者决定输出为 1x 还是 2x 分辨率。

page.pdf() 与截图不同。它使用浏览器的打印布局和打印 CSS,因此可能会对页面分页或隐藏某些元素,而 page.screenshot() 记录的是屏幕上渲染出的画面。

Puppeteer 与 Playwright

Puppeteer 是以 Chrome 为核心的 JavaScript 库。Playwright 支持 Chromium、Firefox 和 WebKit,提供 JavaScript、Python、Java 和 .NET 绑定,并内置测试运行器。只需要 Chrome 的 Node.js 项目适合用 Puppeteer,需要 Safari 的 WebKit 引擎或其他语言的团队适合用 Playwright。

常见错误

  • 页面跳转后立即截图,此时字体和图片尚未加载完成。
  • 期望 page.pdf() 的效果与屏幕显示一致。
  • 同时运行大量浏览器实例,导致内存耗尽。
  • 忘记关闭浏览器,留下仍在运行的进程。

需要反复截取相同的截图?

Temposhot 的 Website Capture 会在受管理的本地浏览器中加载一组 URL,并以 Viewport 或 Full page 区域为每个 URL 保存一张图像。详见网站截图自动化。

常见问题

Puppeteer 只能用于 Chrome 吗?

Chrome 是它的主要目标。Puppeteer 也通过 WebDriver BiDi 支持 Firefox。

Puppeteer 能截取 Retina 截图吗?

能。在 page.setViewport() 中把 deviceScaleFactor 设为 2,即可得到宽度和高度均为 2 倍像素的图像。

使用 Puppeteer 需要编程吗?

需要。它是一个库,需在 Node.js 上运行的 JavaScript 或 TypeScript 代码中调用。

参考资料

相关资源

总是重复截取相同的截图吗?

Temposhot 可定时截取屏幕、窗口或指定区域,并将结果导出为 PDF、图片、ZIP 或 MP4。免费的网页工具只能处理单张图片。

相关资源

相关术语

全部术语