指南
配置
默认情况下,Puppeteer 会下载并使用特定版本的 Chrome,以确保其 API 开箱即用。若要搭配其他版本的 Chrome 或 Chromium 使用 Puppeteer,请在创建Browser实例时传入可执行文件的路径:
调试
使用 Puppeteer进行调试可能是一项艰巨的任务。由于 Puppeteer会涉及浏览器的许多不同组件(例如网络请求和 Web API),因此不存在能够调试所有可能问题的单一方法。值得庆幸的是,Puppeteer提供了多种调试方法,希望这些方法能够覆盖所有可能的问题。
请求拦截
一旦启用了请求拦截,每个请求都会停滞,除非它被 continue、respond 或 abort 处理。 下面是一个简单的请求拦截器示例,它会中止所有图片请求:
无头模式
默认情况下,Puppeteer 以无头模式启动浏览器。 在 v22 之前,Puppeteer 默认启动旧版无头模式。旧版无头模式现在称为chrome-headless-shell,并以独立的二进制文件发布。chrome-headless-shell 的行为与常规 Chrome 并不完全一致,但在不需要完整 Chrome 功能集的自动化任务中,它目前性能...
截图
如需截图,请使用 Page.screenshot()。 你也可以使用 ElementHandle.screenshot() 截取特定元素的截图: 默认情况下,ElementHandle.screenshot() 会尝试将元素滚动到视图中(如果元素被隐藏)。
PDF生成
如需打印 PDF,请使用 Page.pdf()。 默认情况下,Page.pdf() 会等待字体加载完成。
Chrome 扩展
Puppeteer 可用于测试 Chrome 扩展。 你可以使用 browser.extensions() 方法列出所有已安装的扩展及其属性。要卸载扩展,请使用 browser.uninstallExtension() 方法。
Cookie
Puppeteer 提供了通过直接操作浏览器存储来提前获取、设置和删除 Cookie 的方法。如果你需要在测试中保存和恢复特定的 Cookie,这会很有用。 以下示例演示了如何获取浏览器默认 BrowserContext 中可用的 Cookie。
文件
目前,Puppeteer 尚未提供以编程方式处理文件下载的方法。 如需上传文件,你需要定位一个文件输入元素,并调用 ElementHandle.uploadFile。
在浏览器中运行 Puppeteer
Puppeteer 是一个用于自动化浏览器的强大工具,但你知道吗,它的 API 也可以直接在浏览器内部运行?这让你能够在不需要 Node.js 特定功能的任务中利用 Puppeteer 的能力。
在 Chrome 扩展中运行 Puppeteer
Chrome 扩展环境与常规的 Node.JS 环境有显著不同,因此,目前在 chrome.debugger 中运行 Puppeteer 的支持 是实验性的。如果遇到 bug,请提交 issue:https://github.com/puppeteer/puppeteer/issues/new/choose。
屏幕配置
使用 --screen-info 命令行标志配置无头屏幕。 下面的脚本将 Chrome 配置为以双屏配置运行。主 800x600 屏幕配置为横向方向,副 600x800 屏幕位于主屏幕的正右侧,为纵向方向。
窗口管理
使用 Puppeteer 的Browser.getWindowBounds和Browser.setWindowBounds方法来管理浏览器窗口的位置和状态。 以下脚本在主800x600屏幕的默认位置打开一个窗口,然后将该窗口移动到新建的屏幕上并在此处将其最大化。之后,它会将窗口恢复到正常状态。
WebMCP
WebMCP 是一个实验性 API,可能会发生变化。目前仅在 Chrome 151+ 中受支持,并且需要启用特定标志。 WebMCP 是一个实验性 API,允许页面注册可由浏览器或外部代理(如 LLM)发现和调用的工具。Puppeteer 提供了一个实验性 API,用于与启用了 WebMCP 的页面交互。