puppeteer安装

Puppeteer 是一个由 Chrome 团队开发的 Node 库。它提供了一个高层次的 API 来控制无需显示版(或 完全版)的 Chrome。它与其他自动化测试库,如 Phantom 和 NightmareJS 相类似,但是只适用于最新版本的 Chrome。安装puppeteer前需要在系统上安装nodejs与npm;安装完puppeteer,默认会自动安装最新版本的chromium。系统默认安装的npm与nodejs版本都很低,而使用puppeteer需要node6.4.0+,async/await需要node7.6.0+ 。

一、nodejs与npm的安装

nodejs与npm的关系有点类似于redhat系统与yum的关系,npm就是node的包管理工具,默认系统源里带的版本太低了,直接给出官方源安装步骤。



<br />
wget https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
tar Jxvf node-v12.16.1-linux-x64.tar.xz
mv node-v12.16.1-linux-x64 /usr/local/nodejs
ln -s /usr/local/nodejs/bin/npm /usr/local/bin/npm
ln -s /usr/local/nodejs/bin/node /usr/local/bin/node
安装完成后使用node -v 和 npm -v 查看版本信息,网速不给力的可以使用国内下载点:https://npm.taobao.org/mirrors/node/v12.16.1/ 。这里默认使用的包源还是官方的,会比较慢,这里换用国内的taobao源,操作命令为:



<br />
npm config set registry=http://registry.npm.taobao.org
使用npm config list 或 npm config get registry 获取当前源信息。



如果有多个版本需要来回切换,可以使用nvm进行版本管理。

二、puppeteer 安装

这个安装步骤比较简单,就跟直接yum操作类似,几条命令就搞定:



<br />
mkdir puppeteer_test # 创建一个项目目录
cd puppeteer_test
npm init
npm i --save puppeteer
在此安装过程中,可能会遇到chromium安装失败的情况(原因你懂的,受到方校长一万点的暴击),报信息为:



<br />
ERROR: Failed to download Chromium r722234! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
Error: EACCES: permission denied, mkdir '/data/puppeteer_test/node_modules/puppeteer/.local-chromium'
<img src="https://www.361way.com/wp-content/uploads/2020/03/puppeteer-chromium.png" width="908" height="382" title="puppeteer-chromium" alt="puppeteer-chromium" />



此时有三个解决方法:



一是安装chrome,通过参数调整跳过chromium的安装,但其会要求版本匹配;



二是手动安装chromium,根据报错的信息,到taobao源上下载后解压到指定位置,下载地址:https://npm.taobao.org/mirrors/chromium-browser-snapshots/ ;



三是使用taobao定制的cnpm工具,安装操作方式如下:



<br />
npm install -g cnpm --registry=https://registry.npm.taobao.org
ln -s /usr/local/nodejs/lib/node_modules/cnpm/bin/cnpm /usr/local/bin/cnpm
你马爸爸果然还是你爸爸,简单快速高效。



该问题解决参看:https://github.com/puppeteer/puppeteer/issues/1597

三、代码测试

这里使用截图测试代码,具体内容如下:



<br />
const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.361way.com');
  await page.screenshot({path: 'example.png'});
  await browser.close();
})();
使用node example.js执行后,仍旧报错,内容如下:



<br />
(node:37158) UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process!
[0318/141911.157972:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
解决方法为修改browser定义行为:



<br />
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
具体解决方法可以参看:https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md&nbsp;



当然,除此之外可能还会遇到中文乱码的问题,安装中文字体即可解决。



另外英文不好的,也可以查看中文文档: https://zhaoqize.github.io/puppeteer-api-zh_CN/#/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注