如果只是使用
npm i puppeteer来做安装,应该会一步到位。奈何因为墙的关系,不得不把一个自动化的东西给拆解了,理解其中每一步的细节,具体解决每一个细小的问题。
首先安装 nodejs 和 npm ,国内的可以通过安装 cnpm 来加快速度。
接下来,按照习惯应该是通过 npm i puppeteer 来安装 puppeteer 。但,坑出现了,你会得到错误提示:

或者
ERROR: Failed to download Chromium r515411! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOA
D" env variable to skip download.
执行 node install.js 失败。为什么会失败呢?因为这个文件里做了一个重要的工作,就是下载Chromium,去官方下载。。。于是你懂的,伟大的墙让它自然失败了。
于是一个解决办法是忽略这个脚本的执行:npm i --save puppeteer --ignore-scripts 。由于这里忽略了 Chromium 的下载,自然在后面的时候,你需要回来补上这个锅。
新建 example.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 example.js ,执行下载。此时,可能会出现如下错误:
(node:8672) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejec
tion id: 1): AssertionError [ERR_ASSERTION]: Chromium revision is not downloaded
. Run "npm install"
(node:8672) [DEP0018] DeprecationWarning: Unhandled promise rejections are depre
cated. In the future, promise rejections that are not handled will terminate the
Node.js process with a non-zero exit code.
即是Chromium没有被下载,无法执行。
从官网 https://download-chromium.appspot.com/ 进行下载(或者下载taobao镜像https://npm.taobao.org/mirrors/chromium-browser-snapshots/linux_x64/),选择好你的服务器操作系统版本。下载时,注意Chromium的版本号:

解压后,放在 <proj_dir>/node_modules/puppeteer/ 。将上述 example.js 文件加上执行路径:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
executablePath: '<proj_dir>/node_modules/puppeteer/chrome-linux/chrome',
});
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
修改 <proj_dir>/node_modules/puppeteer/package.json 文件,修改 Chromium 的版本号:

此时再执行 node example.js 应该会成功。
如果截图成功,但是却发现截图中充满了各种方块的中文乱码,那是因为 Chromium-browser 无法渲染出中文字体,需要安装系统字体:
sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy
本文详细介绍了在墙内环境下,如何安装和配置Puppeteer爬虫库,包括解决Chromium下载失败的问题,以及如何正确设置Chromium路径和版本号。

5686

被折叠的 条评论
为什么被折叠?



