不知什么原因,即使走代理,或者设置国内镜像源,依然没办法直接通过 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")
});
运行成功,大功告成。