笔记:Puppeteer 安装失败的解决办法

不知什么原因,即使走代理,或者设置国内镜像源,依然没办法直接通过 NPM(Yarn/PNPM) 成功下载安装 Puppeteer:

 ERROR: Failed to set up Chromium r1108766! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to skip download.
│ Error: Download failed: server returned code 403. URL: https://storage.googleapis.com/chromium-browser-snapshots/Mac/1108766/chrome-mac.zip

报错信息中的下载地址 👉 https://storage.googleapis.com/chromium-browser-snapshots/Mac/1108766/chrome-mac.zip 是可以直接访问下载的 Chromium 的。

那就只有手动安装了。

Step1

首先要先安装 Puppeteer 包,但自动下载 Chromiunm,报错信息里建议设置 PUPPETEER_SKIP_DOWNLOAD 的环境变量,不想设置环境变量,也可以这么做:

npm install --ignore-scripts

因为 Puppeteer 下载 Chromium 的动作是在 post install 脚本里执行的,用--ignore-scripts 标识可以跳过下载。

Step2

手动下载 Chromium 包,可以直接从报错信息里的地址下载 https://storage.googleapis.com/chromium-browser-snapshots/Mac/1108766/chrome-mac.zip

也可以选择从国内镜像下载👇:

https://registry.npmmirror.com/binary.html?path=chromium-browser-snapshots/

记得选择正确的系统和版本号。

Step3

把下载的包放在项目目录的任何地方,在初始化 Puppeteer 时,通过 executablePath 参数,指定 Chromium 的所在目录。

注意,Mac系统要指定到 chrome-mac/Chromium.app/Contents/MacOS/Chromium。其中 Chromium.app 在 Finder 中显示的是一个可执行程序,但还是要深入指定到其内部 Contents/MacOS/Chromium 为止。

  const browser = await puppeteer.launch({
    headless: false,
    userDataDir: USER_DATA_DIR,
    executablePath: path.join(__dirname,"../chrome-mac/Chromium.app/Contents/MacOS/Chromium")
  });

运行成功,大功告成。