安装

在你的项目里安装 Puppeteer,理解浏览器下载、安装脚本被拦截时的处理办法,以及 puppeteer 与 puppeteer-core 的区别。

约 2 分钟 · 578 字

本篇目录与全部章节

在你的项目里使用 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. ...).

要解决这个问题,你可以:

  1. 在安装依赖之后手动安装浏览器,运行:

    npx puppeteer browsers install
  2. 重新允许 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