在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
注意:如果页面中有中文可能无法正常显示,因为缺乏中文字体。解决方法是直接把你自己电脑中的c:/windows/fonts中的中文字体上传到服务器的/usr/share/fonts/chinese下即可(默认没有chinese目录,自己新建即可)。如果不行请参考这个连接https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=centos%20%E4%B8%AD%E6%96%87%E5%AD%97%E4%BD%93&oq=puppeteer&rsv_pq=a90b2ea50000943a&rsv_t=9035FHeJQWcr7x6RGsK%2BmDYU11AFyz8svepkcwhlQ51aDVXUfHrKZA7vFjQ&rqlang=cn&rsv_enter=0&rsv_dl=tb&inputT=5789&rsv_sug3=132&rsv_sug1=63&rsv_sug7=100&rsv_sug2=0&rsv_sug4=5908
puppeter相关文档https://pptr.dev/
总结
以上所述是小编给大家介绍的在linux (centos)上使用puppeteer实现网页截图功能,希望对大家有所帮助!
- MySQL入门学习笔记——七周数据分析师实战作业
- 左手用R右手Python系列——七周数据分析师学习笔记R语言、Python版
- Python Numpy学习教程(一)Python篇
- MySQL数据库基础——本地文件交互
- 左手用R右手Python系列之——noSQL基础与mongodb入门
- 左手用R右手Python系列之——数据框与apply向量运算
- 左手用R右手Python系列之——迭代器与迭代对象
- 【关关的刷题日记61】Leetcode 102. Binary Tree Level Order Traversal
- 【关关的刷题日记62】Leetcode 104. Maximum Depth of Binary Tree
- DataAnnotations - InverseProperty Attribute:
- 【关关的刷题日记63】Leetcode 111 Minimum Depth of Binary Tree
- Configure Many-to-Many relationship:
- 【关关的刷题日记64】Leetcode 110 Balanced Binary Tree
- 左手用R右手Python系列之——json序列化与反序列化
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- kali中安装漏洞靶场Vulhub(超详细)
- [全部章节]栈论 : 递归与栈式访问,如何用栈实现所有递归操作 (内附幼儿园题目,要笑着做完)
- Apache IoTDB 系列教程-2:基础 SQL 操作
- Apache IoTDB 系列教程-3:部署运维
- 栈论 : 递归与栈式访问,如何用栈实现所有递归操作(幼儿园题目篇)
- kali下安装beef并联合Metasploit
- 初次使用maven创建web工程发现只有一个idea目录,src,webapp目录都不见了,解决方案
- 栈论 : 递归与栈式访问,如何用栈实现所有递归操作(幼儿园题目篇,题目2)
- SQL注入原理及代码分析(一)
- SQL注入原理及代码分析(二)
- 写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出 现的次数。
- SSRF漏洞简单分析
- 树莓派基础实验30:BMP180气压传感器实验
- DC-1靶机实战和分析
- 如何用Python优雅的登录校园网?