1 node和npm的安装(最新版本)
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
source ~/.nvm/nvm.sh
nvm install node
nvm use node
2 查看安装版本
node -v
npm -v
3 给linux加环境配置
yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 -y
4 切换镜像(防止安装chromium报错)
npm config set puppeteer_download_host=https://storage.googleapis.com.cnpmjs.org
上面报错可用下面:
npm config set puppeteer_download_host=https://npm.taobao.org/mirror
5 安装puppeteer的npm包(建议新建项目文件夹在项目目录下)
npm i puppeteer --save
6 常见错误及解决(若以上五步没有成功安装可参照一下解决方式)
a 如果直接运行,产生下面错误(网上总结的一些常见错误):
/some/path/root/node_modules/puppeteer/.local-chromium/linux-543305/chrome-linux/chrome: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory
...
所以我们需要安装依赖包:
sudo yum install google-chrome-stable
如果提示没有这个包,那就需要添加google的源来下载,url替换成镜像的即可,添加文件/etc/yum.repo.d/google-chrome.repo
:
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
如果无法下载gpgkey
可以把gpgcheck
的值改为0
再运行一次yum的安装命令即可。
b 尝试运行还会有一个sandbox的错误(linux下回报这个必须要像下面那样加上此段代码),如果你的环境是暴露的,建议按官方教程加上沙盒运行,否则像我这样直接关闭就行,只要在js代码中加上一个no-sandbox
的参数即可。
const browser = await puppeteer.launch({args: ['--no-sandbox']});
c 某些服务器默认字体是不全的,需要手动安装,如果出现类似以下错误就需要装字体:
[0427/123834.275317:FATAL:platform_font_linux.cc(83)] Check failed: InitDefaultFont(). Could not find the default font
安装方法很简单,就用yum
就可以:
yum install ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc -y
测试用例 编辑为.js结尾即可 例如 test.js
//==========TestStart=============
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
ignoreHTTPSErrors: true,
headless: true,//true为无头浏览器 false为有界面
args: ['--no-sandbox', '--disable-setuid-sandbox'],
});// 创建浏览器实例 linux上必须要加此项才可运行
const page = await browser.newPage(); // 创建新的浏览器页面
await page.goto('https://example.com'); // 页面访问地址 http://example.com
await page.screenshot({path: 'example.png'}); // 页面截图 example.png
await browser.close(); // 关闭浏览器
})();
//==========TestEnd================
执行方法
node test.js
运行成功会在当前目录写截图生成一个名为 example.png的文件
三 搭配node自带的express配合puppeteer搭建提供http接口调用的爬虫服务
代码引入包 由于需要详细叙述 新开一篇博客此篇需要详细叙述
//引入包
const express = require('express');
const puppeteer = require('puppeteer');
const bodyParser = require('body-parser');
const assert = require('assert');
const request = require("request-promise");