puppeteer 最新版本安装设置国内代理、设置跳过 chrome 安装的方法

目录
[隐藏]

puppeteer 安装设置国内代理下载 chrome 的方法

通过执行命令 npm install puppeteer,可以快速简单的将 puppeteer 添加到项目依赖中。
但是期间会下载 Chromium,如果是在国内大概率会被卡主很长时间,甚至是失败。
设置如下环境变量(支持puppeteer新旧版本),可以让它通过访问在国内的镜像文件达到快速下载的目的:

export PUPPETEER_DOWNLOAD_HOST="https://cdn.npmmirror.com/binaries/chrome-for-testing"
export PUPPETEER_DOWNLOAD_BASE_URL="https://cdn.npmmirror.com/binaries/chrome-for-testing"
export PUPPETEER_CHROME_DOWNLOAD_BASE_URL="https://cdn.npmmirror.com/binaries/chrome-for-testing"
export PUPPETEER_CHROME_HEADLESS_SHELL_DOWNLOAD_BASE_URL="https://cdn.npmmirror.com/binaries/chrome-for-testing"

参考:https://github.com/cnpm/binary-mirror-config/blob/master/package.json

puppeteer 安装时跳过下载 chrome 的方法

在项目目录里安装 puppeteer 时,都会下载 Chromium。这个慢不说,也会造成重复下载、耗时过长等问题。那么可以这么来做跳过 Chromium 的下载:

npm install puppeteer --ignore-scripts

然后在脚本中通过配置项 executablePath,指定 Chromium 所在的位置(也可以指定为本地 Chrome 浏览器安装的地址)。示例:

const puppeteer = require('puppeteer');
puppeteer.launch({
    headless: false,
    // executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
    executablePath: 'C:\\Program Files\\nodejs\\node_modules\\puppeteer\\.local-chromium\\win64-508693\\chrome-win32\\chrome.exe'
}).then(async browser => {
  const page = await browser.newPage();
  await page.goto('https://lzw.me');
  await page.screenshot({path: 'lzwme.png'});
  browser.close();
}).catch(err => {
    console.log(err);
});

提示:

当前 npmmirror 仓库已经有该镜像,可以通过设置环境变量方式从该镜像地址进行下载安装。命令示例:

# window
set PUPPETEER_DOWNLOAD_HOST="https://cdn.npmmirror.com/binaries/chrome-for-testing"
set PUPPETEER_DOWNLOAD_BASE_URL="https://cdn.npmmirror.com/binaries/chrome-for-testing"
set PUPPETEER_CHROME_DOWNLOAD_BASE_URL="https://cdn.npmmirror.com/binaries/chrome-for-testing"
set PUPPETEER_CHROME_HEADLESS_SHELL_DOWNLOAD_BASE_URL="https://cdn.npmmirror.com/binaries/chrome-for-testing"

npm install puppeteer

手动下载 chrome

有的同学可能会问,在墙里下载不到开发版的 chrome 怎么办。翻看仓库源码可以得知,下载地址是这样的:

const downloadURLs = {
  linux: 'https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/%d/chrome-linux.zip',
  mac: 'https://storage.googleapis.com/chromium-browser-snapshots/Mac/%d/chrome-mac.zip',
  win32: 'https://storage.googleapis.com/chromium-browser-snapshots/Win/%d/chrome-win32.zip',
  win64: 'https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/%d/chrome-win32.zip',
};

选择对应的平台,将 %d 替换成具体的编号,然后使用迅雷这种 P2P 下载即可。这个编号可以从 puppeteer/package.json 中的 puppeteer.chromium_revision 字段获得。

另外,你也可以从淘宝镜像仓库进行下载,地址如下:

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

修改 puppeteer 缓存目录

puppeteer 默认会将 Chromium 下载安装到缓存目录 path.join(os.homedir(), '.cache', 'puppeteer') 下,可以通过设置环境变量 PUPPETEER_CACHE_DIR 改动缓存安装的位置。

相关参考:

https://github.com/GoogleChrome/puppeteer/issues/244
https://github.com/GoogleChrome/puppeteer/issues/288

关于 puppeteer

在以前,当需要进行无界面的浏览器自动访问网站执行动作时,大都会选择 phantomjs 或 SlimerJS。

https://lzw.me/a/slimerjs-phantomjs-casperjs.html 这篇文章中我们对 phantomjs 进行了简单的使用介绍。

puppeteer 则是 chrome 官方团队出品的同类工具。当 puppeteer 出来后,phantomjs 即宣布不再继续开发维护。puppeteer 的使用很简单,功能更丰富,可以通过脚本实现各种自动化功能需求。

本文不对 puppeteer 具体使用作详细介绍。关于 puppeteer 的使用示例可参考这几篇文章:

https://github.com/laispace/puppeteer-explore
https://github.com/zhentaoo/puppeteer-deep
https://cloud.tencent.com/community/article/529168
https://github.com/GoogleChrome/puppeteer