在linux (centos)上使用puppeteer实现网页截图

你在linux上安装puppeteer时可能遇到如下问题,本文将引导你如何爬坑!

> puppeteer@2.0.0 install /www/node_modules/puppeteer
> node install.js

ERROR: Failed to download Chromium r706915! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
{ Error: EACCES: permission denied, mkdir '/www/node_modules/puppeteer/.local-chromium'
  -- ASYNC --
    at BrowserFetcher.<anonymous> (/www/node_modules/puppeteer/lib/helper.js:111:15)
    at Object.<anonymous> (/www/node_modules/puppeteer/install.js:62:16)
    at Module._compile (module.js:635:30)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3
  errno: -13,
  code: 'EACCES',
  syscall: 'mkdir',
  path: '/www/node_modules/puppeteer/.local-chromium' }
npm WARN enoent ENOENT: no such file or directory, open '/www/package.json'
npm WARN www No description
npm WARN www No repository field.
npm WARN www No README data
npm WARN www No license field

我成安装puppeteer并实际截图的过程如下:

1.安装nodejs和npm

# 下载解压
wget -c https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.xz
tar -xvf node-v8.9.1-linux-x64.tar.xz

# 移动重命名(可选)
mv node-v8.9.1-linux-x64 /www/nodejs

# 创建软连接(快捷方式),如果上一步重命名不同则这一步的下划线部分根据实际情况做调整
ln -s /www/nodejs/bin/node /usr/local/bin/node
ln -s /www/nodejs/bin/npm /usr/local/bin/npm

2.安装chromium

yum install chromium

3.安装puppeteer-core(直接安装pupperter会因为chromium无法下载而报错)

npm i puppeteer-core

4.新建一个a.js

const puppeteer = require('puppeteer-core');

(async () => {
  const browser = await puppeteer.launch({
	  executablePath: '/usr/bin/chromium-browser',
	  args:["--no-sandbox"]
  });
  const page = await browser.newPage();
  await page.goto('https://www.baidu.com');
  await page.screenshot({path: 'example.png'});

  await browser.close();
})();

这一步的代码跟网上的可能不同,一个是require里面的是puppeteer-core而不是puppeteer,因为我们安装的就是puppeteer-core而不是puppeteer

另一个是launch里面有两个参数,第一个参数也是因为我们没有直接安装puppeteer所以需要指定路径,第二个参数则是因为chromium的某些限制,root账号执行需要加上这个参数

5.执行a.js

node a.js

执行完之后就可以看到一个example.png

puppeter相关文档 https://pptr.dev/

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章