Google推出了无图形界面的headless Chrome之后,可以直接在远程服务器上直接跑一些测试脚本或者爬虫脚本了,猴开心!Google还附送了Puppeteer用于驱动没头的Chome。

阿里的Macaca也顺势写了Macaca-puppeteer,可以在Macaca上直接写通用的测试用例,在开发机上用图形界面看效果,上服务器走生产,岂不是美滋滋。

然鹅,可达鸭眉头一皱,发现事情并没有那么简单。

在阿里云的Centos 7.3上,安装puppeteer之后,会发现并不能启动官方的example:

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_modules/puppeteer/.local-chromium/linux-496140/chrome-linux/chrome: error while loading shared libraries: libpangocairo-1.0.so.0: cannot open shared object file: No such file or directory

TROUBLESHOOTING: https://github.com/GoogleChro...

原来puppet虽然帮你下了一个Chromium,但并没有帮你把依赖都装好。于是你要自己把那些so都装好。

官方给的是Ubuntu版本的各个so包的apt-get安装方式,centos版本居然没有放!于是遍历了各个issue之后,终于发现还是有人给出了centos的库名,在一个看起来并不相关的issue里:

#依赖库
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#字体
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

总算不用挨个去google了……

sandbox去沙箱

这时候你再去执行脚本,发现还是跑不起来。但是报错终于变了。这个时候变成了一个莫名其妙的错误:

(node:30559) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Failed to connect to chrome!
(node:30559) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

要疯掉了有没有,这啥玩意啊!!!!关键是这时候另外一个看起来是解决上面问题的issue,对这个错误进行了详细的讨论,然而直到今天(2017年9月27日)并没有讨论出什么结果。

网上很多讨论是说,直接调试那个Chrome。按照并不能解决问题的说法:直接去puppeteer的目录找到.local-chrome里面的Chromium执行文件,直接执行

./chrome -v --no-sandbox --disable-setuid-sandbox(chrome:5333): Gtk-WARNING **: cannot open display: 

发现加上了--no-sanbox其实是能启动的,但是提示没有Gtk图形界面,那干脆加上--headless是不是就行了嘞?确实没有报错了。

回到puppeteer示例脚本,修改启动浏览器的代码,加上args:

const puppeteer = require('puppeteer');(async () => {const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});const page = await browser.newPage();await page.goto('https://example.com');await page.screenshot({path: 'example.png'});await browser.close();
})();

啊哈,终于执行成功了。下载下来了example.com的截图看了一眼,简直泪流满面。

回想一下,Puppet本身估计自带了--headless,所以如果直接去命令行执行chrome,还是要带上--headless。

终于搞定这一切发现Macaca顺便还提供了一个基于Ubuntu的Macaca-puppeteer的Docker,艾玛这方便太多了,早知道不自己折腾了。

centos安装使用puppeteer和headless chrome相关推荐

  1. puppeteer(headless chrome)实现网站登录

    puppeteer简介 puppeteer是Chrome团队开发的一个node库,可以通过api来控制浏览器的行为,比如点击,跳转,刷新,在控制台执行js脚本等等.有了这个神器,写个爬虫,自动签到,网 ...

  2. Google Puppeteer加入到headless Chrome的工具行列

    Chrome DevTools团队发布了Puppeteer,一个基于Node API的headless Chrome工具.Puppeteer提供了与其他第三方工具相似的功能,促使它们不断地创新与进步. ...

  3. Puppeteer -headless Chrome 的 Node.js API

    Puppeteer 是一个控制 headless Chrome 的 Node.js API .它是一个 Node.js 库,通过 DevTools 协议提供了一个高级的 API 来控制 headles ...

  4. Linux学习总结(九)—— CentOS常用软件安装:中文输入法、Chrome

    中文输入法 切换到root用户,运行以下命令: yum install "@Chinese Support" 按照提示,一路Yes等待安装完成.安装完成后点击左上角System - ...

  5. centos7下安装无头浏览器(headless Chrome)

    selenium是当前流行的WEB自动化工具,它可以启动本地浏览器,访问网页,模拟点击操作等,在自动化测试和网络爬虫中非常有用. 一般开发环境都是有图形界面的,所以本地只要安装普通浏览器就行了,但是在 ...

  6. Linux centos安装Firefox、Chrome浏览器

    1.安装Firefox浏览器 centos7有自带的Firefox浏览器,不过版本一般比较旧,有很多兼容性问题,需要先卸载掉 yum remove firefox 安装新版本的Firefox: yum ...

  7. centos安装chrome的解决方案

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  8. Serverless 实战——使用 Rendertron 搭建 Headless Chrome 渲染解决方案

    为什么需要 Rendertron? 传统的 Web 页面,通常是服务端渲染的,而随着 SPA(Single-Page Application) 尤其是 React.Vue.Angular 为代表的前端 ...

  9. PuppeteerSharp: 更友好的 Headless Chrome C# API

    前端就有了对 headless 浏览器的需求,最多的应用场景有两个 UI 自动化测试:摆脱手工浏览点击页面确认功能模式 爬虫:解决页面内容异步加载等问题 也就有了很多杰出的实现,前端经常使用的莫过于  ...

最新文章

  1. Java线程面试题 Top 50(转)
  2. .net3.5下使用LINQ递归算法实现简洁代码
  3. Java黑皮书课后题第5章:*5.16(找出一个整数的因子)编写程序,读入一个整数,然后以升序显示它的所有最小因子。例如,若输入的整数是120,那么输出就应该是:2、2、2、3、5
  4. Solaris 下 Oracle impdp 过程中出现的问题
  5. java 对象池 博客_Java对象池技术的原理及其实现的小结
  6. 设计模式笔记十八:中介者模式
  7. saltstack的探索-利用脚本增加用户
  8. Icode编程>>>Python编程>>>1级训练场>>>基础训练【1】
  9. Android APP 登陆界面开发 UI设计
  10. 数据结构学习之基数排序(含C++代码)
  11. Local declaration of 'XXX' hides instance variable
  12. android融云消息免打扰
  13. 论文笔记22:QRNN3D: 3D Quasi-Recurrent Neural Network for Hyperspectral Image Denoising
  14. display lldp neighbor brief
  15. 2021“载歌在谷”线上春晚震撼来袭!
  16. 关于HBC路由器设置端口映射
  17. IaC示例:Terraform Ansible自动化创建K3S集群
  18. 【MULTISPECTRAL FUSION FOR OBJECT DETECTIONWITH CYCLIC FUSE-AND-REFINE BLOCKS】论文阅读
  19. 二年级的女儿用计算机算算术,一年级的孩子一分钟口算多少题才算能达标?
  20. 详解 Spring 声明式事务

热门文章

  1. C#基础 List ForEach 遍历输出示例
  2. arduino中断函数的学习——定时中断(MsTimer2)
  3. 1.3 详解GOPATH
  4. win10系统优化计算机,电脑升级win10后,必做的5项优化,至少提升20%的运行速度...
  5. Linux基础(超级无敌认真好用,万字收藏篇!!!!)
  6. vsphere update manager
  7. 《小舍得》引爆教育话题 掌门1对1为孩子守护教育的温度
  8. Python_文件IO_CSV文件_文件交互_OS模块_异常(13)
  9. mac中创建flutter,运行ios模拟器,运行安卓模拟器教程
  10. [数据分析与可视化] Python绘制数据地图1-GeoPandas入门指北