执行 npm install puppeteer 时,有可能会报错,也有可能不会。只要没看到类似:
Downloading Chromium r609904 - 82.7 Mb [=== ] 16% 990.3s
这样的输出,就是没有下载 Chromium。启动 app 后就会报错:
nodejs.Error: Chromium revision is not downloaded. Run "npm install" or "yarn install"
此时再执行这些命令通常没有用,因为能下载第一次安装时就会下载了。
方法一(推荐)
在终端执行:
PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org npm install puppeteer
改用 cnpm 的镜像地址下载。此方法基本无副作用。
方法二
改用 puppeteer-cn:
npm install --save puppeteer-cn
需要本地 Chrome 版本大于 59。详见:puppeteer-cn
方法三
用 cnpm 安装:
cnpm install puppeteer
cnpm 是淘宝的镜像源,出于一些原因,我个人已经不再使用。关于 cnpm:cnpm
方法四
最复杂的手动安装,建议没事别折腾。
这里使用 puppeteer-core 之后使用手动下载的 Chrome 进行操作。思路很简单,安装一个不带浏览器的 puppeteer,再使用的时候将浏览器地址指向一个可执行的 Chrome 浏览器文件。
安装
安装puppeteer-core。
yarn add puppeteer-core
找到 puppeteer 中对应的浏览器并下载
在 node_modules/puppeteer-core/lib/BrowserFetcher.js 中找到各平台 Chrome 下载地址。其中%s 替换为 DEFAULT_DOWNLOAD_HOST 的值,%d 替换为版本号。

替换后得到下载地址
下载后解压,放在项目目录中,这里我放在 chrome 下。
使用
这样就可以使用了。
使用代码:
const puppeteer = require('puppeteer-core');
const path = require('path');
(async () => {
const browser = await puppeteer.launch({
// 这里注意路径指向可执行的浏览器。
// 各平台路径可以在 node_modules/puppeteer-core/lib/BrowserFetcher.js 中找到
// Mac 为 '下载文件解压路径/Chromium.app/Contents/MacOS/Chromium'
// Linux 为 '下载文件解压路径/chrome'
// Windows 为 '下载文件解压路径/chrome.exe'
executablePath: path.resolve('./chrome/Chromium.app/Contents/MacOS/Chromium')
});
const page = await browser.newPage();
await page.setViewport({
width: 375,
height: 667,
deviceScaleFactor: 1,
isMobile: true
})
await page.goto('/');
await page.screenshot({path: 'mybj-blog.png'});
await browser.close();
})();
执行文件:
node index.js