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的包管理工具,默认系统源里带的版本太低了,直接给出官方源安装步骤。
1wget https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
2tar Jxvf node-v12.16.1-linux-x64.tar.xz
3mv node-v12.16.1-linux-x64 /usr/local/nodejs
4ln -s /usr/local/nodejs/bin/npm /usr/local/bin/npm
5ln -s /usr/local/nodejs/bin/node /usr/local/bin/node
安装完成后使用node -v 和 npm -v 查看版本信息,网速不给力的可以使用国内下载点:https://npm.taobao.org/mirrors/node/v12.16.1/ 。这里默认使用的包源还是官方的,会比较慢,这里换用国内的taobao源,操作命令为:
1npm config set registry=http://registry.npm.taobao.org
使用npm config list 或 npm config get registry 获取当前源信息。
如果有多个版本需要来回切换,可以使用nvm进行版本管理。
二、puppeteer 安装
这个安装步骤比较简单,就跟直接yum操作类似,几条命令就搞定:
1mkdir puppeteer_test # 创建一个项目目录
2cd puppeteer_test
3npm init
4npm i --save puppeteer
在此安装过程中,可能会遇到chromium安装失败的情况(原因你懂的,受到方校长一万点的暴击),报信息为:
1ERROR: Failed to download Chromium r722234! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
2Error: EACCES: permission denied, mkdir '/data/puppeteer_test/node_modules/puppeteer/.local-chromium'
此时有三个解决方法:
一是安装chrome,通过参数调整跳过chromium的安装,但其会要求版本匹配;
二是手动安装chromium,根据报错的信息,到taobao源上下载后解压到指定位置,下载地址:https://npm.taobao.org/mirrors/chromium-browser-snapshots/ ;
三是使用taobao定制的cnpm工具,安装操作方式如下:
1npm install -g cnpm --registry=https://registry.npm.taobao.org
2ln -s /usr/local/nodejs/lib/node_modules/cnpm/bin/cnpm /usr/local/bin/cnpm
你马爸爸果然还是你爸爸,简单快速高效。
该问题解决参看:https://github.com/puppeteer/puppeteer/issues/1597
三、代码测试
这里使用截图测试代码,具体内容如下:
1const puppeteer = require('puppeteer');
2(async () => {
3 const browser = await puppeteer.launch();
4 const page = await browser.newPage();
5 await page.goto('https://blog.361way.com');
6 await page.screenshot({path: 'example.png'});
7 await browser.close();
8})();
使用node example.js执行后,仍旧报错,内容如下:
1(node:37158) UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process!
2[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定义行为:
1const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
具体解决方法可以参看:https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md
当然,除此之外可能还会遇到中文乱码的问题,安装中文字体即可解决。
另外英文不好的,也可以查看中文文档: https://zhaoqize.github.io/puppeteer-api-zh_CN/
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/puppeteer/6359.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.