Puppeteer 与 Playwright--哪个更好?
说到在现代浏览器上自动执行任务,Playwright 和 Puppeteer 是两个值得考虑的强大工具。我曾探讨过它们的异同,尤其是在网络刮擦等场景中。Playwright 和 Puppeteer 都能为端到端测试提供高级 API 控制。它们可以处理用户手动完成的大部分任务。不过,两者之间也有一些区别。
Playwright 因其跨浏览器支持和丰富功能而受到关注,而 Puppeteer 则以简洁和与 Chrome 的紧密集成而闻名。在网页抓取方面,两者都很强大,但 Playwright 的多浏览器支持在某些情况下可能更有优势。
在 Playwright 和 Puppeteer 之间做出选择取决于具体的项目要求和偏好。两者各有所长,都是浏览器自动化任务的宝贵资产。
什么是 Puppeteer?
Puppeteer由 Google 于 2018 年创建,由 Chromium 开发人员提供支持。它提供了一个专门用于管理基于 Chromium 环境的 API。这款多功能工具允许用户自动执行浏览器任务,如截图、生成 PDF、导航单页应用程序、渲染内容、模拟鼠标和键盘输入,以及 通过 page.evaluate 方法进行网络搜索.
此外,Puppeteer 还能简化网页上的表单填写和其他交互操作。Puppeteer 是用于自动执行浏览器相关操作的综合解决方案。无论是捕捉网站快照还是浏览复杂的网络应用程序,Puppeteer 都能为开发人员提供简化工作流程和提高效率的工具。
什么是 Playwright?
Playwright是微软开发的一款工具,主要用于测试应用程序和网站。不过,许多网络刮擦人员也发现它在刮擦过程中自动执行浏览器操作时非常有用。Playwright 背后的团队也创建了 Puppeteer,他们的目标是为所有主要的渲染引擎提供类似的功能,从而扩大 Puppeteer 的成功。有了 Playwright,你可以使用不同的编程语言在各种浏览器上自动执行操作。
与 Puppeteer 一样,Playwright 也使用 cookies 来管理自动等待时间或独立浏览器实例。当你需要模拟不同的会话或用户时,这一功能非常方便。Playwright 简化了自动执行浏览器任务的过程,为使用不同浏览器和语言的开发人员提供了灵活性。
网络抓取中的Playwright 与 Puppeteer
Playwright 和 Puppeteer 都是用于控制无头浏览器的工具 Node.js.它们在很多方面都很相似,但也有一些关键的区别。
受欢迎程度
Puppeteer 始终比 Playwright 更受欢迎, npmtrends 数据显示2023 年初,Puppeteer 的月下载量超过 300 万,而 Playwright 仅略高于 90 万。根据 2024 年 1 月 9 日的 GitHub 数据,Puppeteer 继续保持领先,拥有 85.7k 个 stars 和 9.2k 个 forks,而 Playwright 则以 58k 个 stars 和 3.2k 个 forks 落后。
这是可以理解的,因为 Playwright 比 Puppeteer 年轻两年,在受欢迎程度上需要时间追赶。因此,Puppeteer 有更多的时间来建立自己的用户群。
前提条件和安装
要使用 Puppeteer 或 Playwright,首先要安装 Node.js。访问官方网站下载最新版本。然后,打开终端或命令提示符并键入
Puppeteer
npm install puppeteer
Playwright:
npm install playwright
请记住,Playwright 支持多种编程语言,但它通常与 Node.js 一起使用。
性能
Puppeteer 使用 V8 JavaScript 引擎,该引擎在执行前将 JavaScript 转换为机器代码,因此速度很快。V8 采用了隐藏类和内联缓存等结构,提高了访问对象属性时的性能。此外,Puppeteer 还提供具有事件驱动架构的 DevTools 协议,简化了页面加载和网络请求等事件监控。
另一方面,Playwright 使用的 WebSocket 连接在刮擦过程中保持开放。这样可以批量发送请求,减少延迟并提高性能。与 Puppeteer 相比,Playwright 可以高效处理更复杂、更大规模的网络刮擦任务。
生态系统
Puppeteer 提供完整的浏览器控制,通常以无可见界面的方式运行,但如果需要,也可以设置为显示浏览器窗口。它在 Windows、Linux 和 macOS 上都能很好地运行,但仅限于 Chrome 或 Chromium 浏览器,并且只支持 JavaScript。
不过,Puppeteer 正在测试与 Edge 和 Firefox 的兼容性。为了伪装你的浏览器指纹,Puppeteer 提供了像 puppeteer-extra-plugin-stealth 这样的实用插件。这些插件可以让你修改请求头和 User-Agent,并隐藏浏览器的无头状态。最近,Puppeteer 又引入了用于指纹伪装的新配置。
Playwright 比 Puppeteer 更灵活。它支持多个浏览器(Chromium、Firefox、WebKit)和多种编程语言(JavaScript、Python、TypeScript、Java、.NET)。它可在 Windows、Linux 和 macOS 上运行,并提供无头和有界面浏览器模式。
Playwright 也有插件,例如 playwright-extra,它们有助于规避 bot 检测,并支持更接近真人的行为,包括处理 reCAPTCHAs。开发者正在努力让 puppeteer-extra 插件兼容 Playwright 的生态。
请求处理
Puppeteer 和 Playwright 都是用于网页抓取的库。Puppeteer 采用异步方式工作,这意味着它可以同时处理很多请求,这在并发抓取多个页面时很有用。
另一方面,Playwright 和 Puppeteer 一样是异步的,但也能同步处理请求。它一次处理一个请求,使代码的编写和理解更加容易。使用 Playwright,你可以根据需要在同步和异步操作之间切换。
因此,Puppeteer 可以同时处理多个任务,而 Playwright 则可以简单地逐个处理任务,还能在同步和异步操作之间切换。
社区支持和文件
Puppeteer 的历史更悠久,在问答网站(如 堆栈溢出.这意味着当你遇到困难时很容易找到帮助。他们的文档内容详尽,便于初学者使用,并提供大量示例和提示。
Playwright 较新,但其社区发展迅速。虽然讨论可能比 Puppeteer 少,但你仍然可以找到常见问题的解决方案。Playwright 的文档涵盖了从入门到高级功能的所有知识,并提供了清晰的示例。
剧作家与木偶师:对比表
以下是 Playwright 和 Puppeteer 主要区别的简化版:

最后的话
作为专家,我建议在选择 Puppeteer 和 Playwright 时仔细考虑项目的具体需求。Puppeteer 和 Playwright 提供了强大的自动化功能,但它们是否适合取决于具体的项目要求和团队动态。Playwright 非常出色,因为它可与不同的浏览器和多种编程语言配合使用,并具有许多出色的功能。它适用于许多不同的自动化任务,包括网络搜索。
不过,如果你的项目只使用 Chrome 浏览器,或者你需要来自社区的大量帮助和清晰的说明,那么 Puppeteer 可能会更好。它存在的时间更长,有很多人可以帮助你。此外,它的说明也很容易遵循。

