安装
在你的项目里安装 Puppeteer,理解浏览器下载、安装脚本被拦截时的处理办法,以及 puppeteer 与 puppeteer-core 的区别。
在你的项目里使用 Puppeteer,运行:
npm i puppeteer
安装 Puppeteer 时,它会自动下载一个较新的 Chrome for Testing 版本(macOS 约 170MB,Linux 约 282MB,Windows 约 280MB),以及一个 chrome-headless-shell 二进制(自 Puppeteer v21.6.0 起提供),这个组合保证与 Puppeteer 兼容。浏览器默认下载到 $HOME/.cache/puppeteer 目录(自 Puppeteer v19.0.0 起)。配置项与控制下载行为的环境变量,见 configuration。
自动下载可能被阻止
许多现代包管理器(例如遵循新 RFC 的 npm、pnpm、Yarn Berry、Bun 和 Deno)默认会阻止依赖的安装脚本。如果你的包管理器被配置为阻止这些脚本,自动下载就会被跳过,运行 Puppeteer 时会抛出错误:Could not find Chrome (ver. ...).
要解决这个问题,你可以:
-
在安装依赖之后手动安装浏览器,运行:
npx puppeteer browsers install -
重新允许 Puppeteer 的 postinstall 脚本执行,例如对于 npm,在
package.json的"allowScripts"中加入"puppeteer":{ "allowScripts": { "puppeteer": true } }
两个包
自 v1.7.0 起,每个版本我们都会发布两个包:
puppeteer 是一个产品,用于浏览器自动化。安装时它会下载一份 Chrome,然后通过 puppeteer-core 来驱动它。作为面向终端用户的产品,puppeteer 会使用合理的默认值自动完成一系列工作流,这些默认值都可以自定义。
puppeteer-core 是一个库,用来驱动任何支持 DevTools 协议的东西。作为库,它完全通过编程接口驱动,不假定任何默认值,安装时也不会下载 Chrome。
如果你要连接远程浏览器或者自己管理浏览器,就应该用 puppeteer-core。自己管理浏览器时,你需要在调用 puppeteer.launch 时显式传入 executablePath(或者传入 channel,前提是浏览器安装在标准位置)。
使用 puppeteer-core 时,记得修改导入语句:
import puppeteer from 'puppeteer-core';
译自pptr.dev/guides/installation,对应 Puppeteer v25.14.0