什么是 Puppeteer?浏览器自动化清晰解释

什么是 Puppeteer?Chrome 和 Firefox 自动化解释

Scrapeless Scraping Browser 提供受管理的云浏览器会话,Puppeteer 客户端可以用于浏览器自动化和动态网络数据工作流程。

简而言之

  • Puppeteer 是一个 JavaScript 浏览器自动化库。 它的高级 API 控制 Chrome 和 Firefox 进行导航、输入、截图、PDF、网络观察和页面评估。
  • Puppeteer 使用多于一个浏览器协议。 Chrome 通常使用 Chrome DevTools 协议,而 Firefox 自动化在当前 Puppeteer 文档中默认使用 WebDriver BiDi。
  • 该包可以管理或连接到浏览器。 工作流可以启动兼容的本地浏览器,单独安装浏览器,或连接到受支持的远程端点。
  • Puppeteer 的专注性超过了一体化的选择。 它提供浏览器控制,但将测试发现、断言、固定资产和报告留给其他库或应用程序代码。
  • 浏览器并不保证可用数据。 脚本仍需要状态感知的等待、稳定的选择器、输出验证、限制流量和显式权限来访问目标。

Puppeteer 赋予 JavaScript 对浏览器的直接控制

Puppeteer 是一个开源的 JavaScript 库,用于通过高级 API 控制受支持的浏览器。它暴露浏览器、上下文、页面、框架、输入、网络、跟踪、截图、PDF 和评估操作。脚本可以启动一个 Puppeteer 管理的浏览器,或连接到一个现有的兼容浏览器进程。由于该 API 以 JavaScript 为优先,并且与浏览器概念紧密映射,它适合 Node.js 服务、命令行工具、爬虫、视觉捕捉系统和自定义测试框架。

官方 Puppeteer 介绍 将 Puppeteer 作为一个用于 Chrome 和 Firefox 自动化的 JavaScript 库。较早的描述常常将 Puppeteer 简化为无头 Chromium,但现在已经不完整。无头 Chrome 仍然是一个核心用例,但当前浏览器支持和协议工作包括 Firefox。团队在选择浏览器或设计迁移时,应使用当前的兼容性表,而不是重复历史定义。

浏览器、上下文、页面和协议协同工作

Browser 对象拥有进程或远程连接。BrowserContext 将 Cookie 和存储分开以便独立会话。页面表示标签页,并提供导航、DOM 查询、定位器、事件、截图和脚本执行。在高级 API 之下,协议传输命令和事件。Chrome 自动化通常使用 CDP,而 WebDriver BiDi 提供一个跨浏览器的事件驱动路径,Puppeteer 用于 Firefox,并且可以在支持功能的情况下与 Chrome 一起使用。

官方 Puppeteer WebDriver BiDi 指南 解释了 Puppeteer 的 WebDriver BiDi 支持,并指出不支持的操作可能会产生 UnsupportedOperation 错误。该边界在协议选择中很重要:CDP 公开了深度的 Chrome 特定表面,而 BiDi 的目标是标准化的跨浏览器控制,但仍在开发中。测试确切的特性——网络拦截、下载、仿真、跟踪、扩展或浏览器管理——在项目所需的协议和浏览器上。

  • 浏览器。 启动或连接到浏览器进程,并管理整体生命周期。
  • BrowserContext。 在浏览器内部创建隔离的 Cookie、缓存和存储边界。
  • 页面。 表示标签页,并暴露导航、输入、评估、网络和捕获操作。
  • CDP 会话。 当高级 API 不够时,提供对 Chrome DevTools 协议域的更低级访问。
  • WebDriver BiDi 连接。 为受支持的跨浏览器操作提供事件驱动的标准路径。

Puppeteer 可以启动、安装或连接

完整的 Puppeteer 包通常管理兼容的浏览器下载,这使得本地项目易于启动,但增加了安装大小。Puppeteer Core 省略了该管理的浏览器,并在浏览器可执行文件或远程服务单独提供时有用。远程连接保持 Node.js 控制进程本地,同时浏览器执行发生在另一台主机上。每种方法都会改变谁拥有浏览器版本、可执行路径、沙盒设置、操作系统依赖关系和清理。

官方 Puppeteer 支持的浏览器表 发布 Puppeteer 发布版本与支持的 Chrome 和 Firefox 版本之间的映射。该映射是操作性的,而非琐事。固定包而默默地更改浏览器可能会创建不支持的组合,而升级包可能会更改下载的浏览器。容器和 CI 镜像应记录双方信息。远程服务应公开足够的环境信息,以重现在生产中观察到的行为。

Puppeteer 选择影响所有权和可移植性

相同的页面 API 可以位于不同的安装和协议模型之上,但这些模型并不具有相同的维护或功能边界。

选择操作效应
Puppeteer 包包括浏览器管理行为,并在项目希望 Puppeteer 拥有兼容的本地浏览器时很方便。
Puppeteer Core将浏览器安装和生命周期留给项目或远程提供者,减少库打包中的假设。
本地启动应用程序拥有操作系统依赖关系、浏览器进程、沙盒配置、资源和清理。
远程连接服务拥有浏览器托管,而应用程序保留 Puppeteer 逻辑,并必须验证远程特性支持。
CDP提供深入的Chrome特定检查和控制,并且是Puppeteer中Chrome的默认路径。
WebDriver BiDi提供跨浏览器命令和事件,支持的特性并且是Puppeteer中Firefox的默认路径。

受益于集中API的Puppeteer用例

Puppeteer适合希望在JavaScript应用程序中使用浏览器原语,而不使用规定测试架构的项目。

动态页面提取

Puppeteer可以呈现客户端应用程序,执行许可的交互,并从DOM或观察到的响应中提取结构化公共信息。

截图和PDF服务

Node.js服务可以加载受控页面,应用视口和媒体设置,并产生视觉或可打印的文档。

自定义测试工具

已有JavaScript运行器的团队可以添加浏览器控制,同时保留自己的测试工具、断言、报告和调度。

浏览器诊断

CDP访问、跟踪、控制台事件、性能数据和网络检查可以支持调试和合成监控。

Puppeteer将测试架构和容量留给项目

Puppeteer不规定一个运行器、断言库、固定模型或报告格式。这对于在应用程序中嵌入自动化是有用的,但测试团队必须组装和维护这些层次。浏览器进程也消耗物质资源,并且一个Node.js进程可以在代码看起来复杂之前创建太多页面。仔细定义浏览器和上下文池,确定性地关闭资源,并隔离不应共享存储的账户或市场。

Chrome开发工具协议文档 文档Chrome开发工具协议作为用于仪器操作、检查、调试和分析Chrome的接口。CDP的深度是有价值的,但Chrome特定的命令降低了可移植性。在一个小适配器后保持低级协议调用,记录他们为何需要,并在同一工作流程通过WebDriver BiDi或其他浏览器运行时提供清晰的行为。

Puppeteer项目准备清单

重要的决定是浏览器所有权、协议、上下文范围、证据和Puppeteer有意保持开放的框架层。

  1. 从需求中选择浏览器。 确认Chrome是否足够,或者Firefox行为是否重要。使用当前的支持浏览器表并在提交矩阵之前运行确切的组合。
  2. 选择包的所有权。 当Puppeteer应该管理一个兼容的浏览器时使用完整包,或者当容器、系统包或远程服务拥有浏览器时使用Puppeteer Core。
  3. 识别协议依赖。 列出每个直接的CDP调用和预计通过WebDriver BiDi每个特性。保持浏览器特定行为可见,而不是隐藏在通用帮助器中。
  4. 有意地范围上下文。 对于独立的Cookies和存储使用单独的上下文。只有在工作流程意图继续一个身份或状态时,共享上下文才是合适的。
  5. 等待有意义的条件。 将进展绑定到选择器、响应、URL变更、函数结果或其他可观察状态。固定延迟不应承担主要的同步负担。
  6. 组装测试堆栈。 如果项目是测试套件,请命名围绕Puppeteer的运行器、断言库、固定、报告和文档政策。
  7. 测量浏览器容量。 在增加工作者之前,跟踪进程内存、活动页面、启动成本、会话持续时间、网络量和目标主机并发性。
  8. 验证输出内容。 检查最终的URLs、预期字段、页面语言、记录数量和页面类型。成功的导航仍可能落在同意屏幕或不完整的应用程序外壳上。

与无抓取抓取浏览器一起使用Puppeteer

无抓取抓取浏览器可以托管一个浏览器会话,Puppeteer客户端通过支持的远程端点连接到该会话。该应用程序保持熟悉的Puppeteer页面操作,而无抓取则拥有云浏览器进程、会话设置和配置的网络路径。

在移动生产工作流程之前,验证当前的端点、支持的客户端包、会话控制和远程特性表面。回顾当前 无抓取抓取浏览器产品概述, 无抓取抓取浏览器入门文档,和 无抓取定价 在选择运营模式之前。

结论:Puppeteer是一个专注的浏览器控制库

Puppeteer 为 JavaScript 应用程序提供了一种直接的、高级的方式来控制 Chrome 和 Firefox。它可以启动兼容的浏览器,连接到远程会话,通过 CDP 工作,并使用 WebDriver BiDi 进行支持的跨浏览器操作。专注的 API 使得将浏览器行为嵌入自定义系统变得简单。

这种专注也将重要决策留给项目。控制浏览器版本,使协议假设明确,隔离上下文状态,选择基于条件的等待,验证返回的页面,并在测试时组装测试堆栈。

准备在云中运行 Puppeteer 吗?

创建一个 Scrapeless 账户,并在移动更大自动化服务之前,针对受管理的浏览器会话测试一个受限的 Puppeteer 工作流。

免费开始 →

常见问题

Puppeteer 是否支持 Firefox?

是的。当前 Puppeteer 文档列出了对 Chrome 和 Firefox 的支持。Firefox 默认使用 WebDriver BiDi,而 Chrome 通常使用 CDP。功能覆盖可能因浏览器和协议而异,因此请测试每个所需操作,而不是假设行为相同。

Puppeteer 仅用于无头的 Chrome 吗?

不是。Puppeteer 可以在无头或有头模式下运行受支持的浏览器,并且现在支持 Chrome 和 Firefox。历史上对“无头 Chrome 库”的描述忽略了当前的浏览器和 WebDriver BiDi 支持。

Puppeteer 和 Puppeteer Core 之间有什么区别?

完整的 Puppeteer 包括浏览器管理行为,通常与兼容的受管理浏览器一起工作。Puppeteer Core 是不包含该浏览器所有权的库,适用于提供可执行文件、容器镜像或独立远程浏览器服务的项目。

Puppeteer 可以用于网络爬虫吗?

可以。Puppeteer 可以渲染 JavaScript 页面,与允许的公共控件交互,检查 DOM,并观察响应。仅在浏览器执行更改可用数据时使用它;当初始响应足够时,直接 HTTP 收集更简单。

Puppeteer 包含测试运行器吗?

不需要单一的运行器或作为完整测试架构的一部分捆绑。团队通常将 Puppeteer 与 JavaScript 测试运行器、断言库、测试数据和报告工具配对,或将其嵌入拥有调度和结果处理的自定义应用程序中。

参考资料