Puppeteer 指南

栏目: Node.js · 发布时间: 7年前

内容简介:Puppeteer 是 Chrome 出品的一个无头浏览器。如果你听说过 Phantomjs 或者 Selenium,那么就应该知道它是做什么的了。Puppeteer 与它们类似,提供了一系列 api,让我们可以通过脚本控制浏览器的行为,理论上可以做到任何浏览器能做的事。先创建一个测试用的项目,执行万事开头难,第一步安装时就会遇到问题。

Puppeteer 是 Chrome 出品的一个无头浏览器。如果你听说过 Phantomjs 或者 Selenium,那么就应该知道它是做什么的了。Puppeteer 与它们类似,提供了一系列 api,让我们可以通过脚本控制浏览器的行为,理论上可以做到任何浏览器能做的事。

安装 Puppeteer

先创建一个测试用的项目,执行 npm init 初始化好 package.json ,然后执行以下命令安装 Puppeteer:

npm install puppeteer --save-dev

万事开头难,第一步安装时就会遇到问题。

Puppeteer 安装过程中会去下载 Chromium,墙内用户则会报错。如果你看到以下信息,说明是下载 Chromium 时连接不上。

ERROR: Failed to download Chromium r588429! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
Error: Download failed: server returned code 502. URL: https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/588429/chrome-win32.zip

或者

ERROR: Failed to download Chromium r588429! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
{ Error: connect ETIMEDOUT 172.217.24.48:443

如提示所说,设置 PUPPETEER_SKIP_CHROMIUM_DOWNLOAD 可以跳过安装 Chromium。

PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 npm install puppeteer --save-dev

此时可以安装成功,但是使用 Puppeteer 时会由于找不到 Chromium 而报错。可以创建一个文件 test.js ,内容如下:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({path: 'example.png'});

  await browser.close();
})();

然后执行 node test.js 则会报错:

$ node test.js
(node:18368) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Chromium revision is not downloaded. Run "npm install" or "yarn install"
(node:18368) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

一个解决方案是先手动下载 Chromium,然后在执行时通过配置指定 Chromium 位置, 这篇文章 给出了解决步骤。

但是我更倾向于还原 Puppeteer 安装时的过程。但是由于一些环境原因,即便翻墙了也只能手动下载 Chromium,无法在安装 Puppeteer 时自动下载 Chromium。

读了一下源码之后,可以这么解决:

  1. 安装 Puppeteer,安装失败,提示无法下载 https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/588429/chrome-win32.zip
  2. 使用 PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 npm install puppeteer --save-dev 成功安装 Puppeteer
  3. 执行 node test.js 提示无法找到 Chromium
  4. 手动下载步骤 1 中的 chrome-win32.zip ,注意不同版本、不同系统的下载地址是不一样的
  5. 开启一个静态文件服务,使得 http://127.0.0.1:8000/chrome-win32.zip 指向需要下载的文件
  6. ./node_modules/puppeteer/lib/BrowserFetcher.js 这个文件中的 %s/chromium-browser-snapshots/Win_x64/%d/chrome-win32.zip 替换为 http://127.0.0.1:8000/chrome-win32.zip
  7. 搜索这个文件中的 downloadURLs ,去掉对应的 util.format 的调用,使其直接使用 downloadURLs[this._platform]
  8. 执行 node ./node_modules/puppeteer/install.js 完成安装
  9. 执行 node test.js 测试能否成功生成截图

至此,成功完成了 Puppeteer 的安装。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

奔腾年代

奔腾年代

郭万盛 / 中信出版集团 / 2018-9-1 / 68.00

1994年4月20日,一条64K国际专线将中关村地区教育与科研示范网络与互联网连在了一起。中国,成为第77个全功能接入互联网的国家。 1995年,中国互联网正式开始商业化应用。浪潮开始! 这是一个波澜壮阔的年代,带给我们翻天覆地的变化。中国互联网25年发展史的全景展示、忠实梳理和记录。 在更宏观的角度审视互联网与中国的关系,人们将会发现,互联网革命给中国带来了重新崛起的时代机遇。......一起来看看 《奔腾年代》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具