Puppeteer 与 Chrome Headless 搭配Node.js的web服务提供爬虫服务入门和跳坑(Linux上部署)

一 组件安装配置和常规错误解决


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");

猜你喜欢

转载自blog.csdn.net/m0_37089544/article/details/81360117