Puppeteer 是一个 Node.js 库,它提供了一个高级 API 来通过 开发工具协议 控制 Chrome/Chromium。 Puppeteer 默认以 无头 模式运行,但可以配置为在完整 ("有头") Chrome/Chromium 中运行。
Puppeteer能做些什么
- 生成页面的屏幕截图和 PDF。
- 抓取 SPA(单页应用)并生成预渲染内容(即 "SSR"(服务器端渲染))。
- 自动化表单提交、UI 测试、键盘输入等。
- 使用最新的 JavaScript 和浏览器功能创建自动化测试环境。
- 捕获站点的 时间线痕迹 以帮助诊断性能问题。
- 测试 Chrome 扩展程序。
文档
https://github.com/puppeteer/puppeteer?tab=readme-ov-file
https://pptr.dev/
https://pptr.nodejs.cn/https://zhaoqize.github.io/puppeteer-api-zh_CN/#?product=Puppeteer&version=v1.20.0&show=api-class-puppeteer
对比Selenium
- 熟悉爬虫或者 UI 自动化的同学可能会联想到 PhantomJS、CasperJS 或者 Selenium,而作为 Chrome DevTools 团队亲自出品和维护的 puppeteer 不管是在功能的完整性、稳定性、兼容性、安全性还是性能都将成为碾压其他工具的存在。
Puppeteer | Selenium | |
支持浏览器 | Chromium | 多种浏览器 |
支持语言 | Node.js | 多种语言 |
安装 | 方便快速 | 稍微麻烦 |
使用 | 易上手 | 较难上手 |
- Puppeteer 比Selenium安装简单,特别是前端开发人员,完全可以当做node的一个包用,没有上手难度;
- Puppeteer 比Selenium功能更强大,可以得到浏览器的更多权限;
产品策略:
- 速度: Puppeteer 相对于自动化页面的性能开销几乎为零。
- 安全: Puppeteer 相对于浏览器而言是在进程外运行的,因此可以安全地自动执行潜在的恶意页面。
- 稳定: Puppeteer 不应该是不稳定的,也不应该泄漏内存。
- 简单: Puppeteer 提供了易于使用、理解和调试的高级 API。
- Puppeteer 需要零设置,并与最适合它的 Chrome 版本打包在一起,使其成为 很容易上手。
- Puppeteer 具有事件驱动的架构,消除了许多潜在的不稳定因素。 puppeteer 脚本中不需要 “sleep(1000)” 调用。
- Puppeteer 公开浏览器上下文,从而可以有效地并行测试执行。
- Puppeteer 在调试方面表现出色: 将 “无头” 位翻转为 false,添加 “slowMo”,你将看到浏览器正在做什么。 你甚至可以打开 Chrome DevTools 来检查测试环境。
彩蛋:发现了一个微软的web测试框架,这个团队是之前基于Puppeteer做了浏览器录制自动测试的开源项目,然后做了微软这个。
https://github.com/microsoft/playwright