自从Google在chrome59版本后加入了 Headless Chrome,类似phantomjs、selenium等工具作者都放弃了维护自身的产品。因此作为使用者的我们也是时候放弃phantomjs,转而研究Headless Chrome了。由于网上对于Headless Chrome的资料还很少,因此我先收集整理一波,随后慢慢学习研究,渐渐将本篇内容补充完善。
Headless Chrome 介绍
headless chrome意思是无头chrome浏览器,相对于传统的chrome浏览器,这是一个可以在后台用命令行操作浏览器的工具,对于爬虫编写以及web自动化测试都有很大的作用。相比较同类工具Phantomjs,其更加强大(主要因为其依赖的webkit更新)。
Headless Chrome 安装
目前只支持mac与linux系统,需要下载chrome浏览器并安装。
mac install headless chrome
mac下直接去官网下载安装包即可,mac下chrome浏览器位置,为了方便使用,用alias别名启动。
下载chrome-canary版:https://www.google.com/chrome/browser/canary.html
说明:
linux install headless chrome
添加源:
安装:
测试运行:
报错处理:
解析方案:
linux安装headless chrome参考:
http://akai-tsuki.hatenablog.com/entry/2017/06/18/000000
Headless Chrome 基础用法
HELP信息:
访问一个网页获取源码访问一个网页将源码创建成一个PDF
–print-to-pdf 标志将页面转出为 PDF 文件:
访问一个网页并截图
使用–screenshot标志运行 Headless Chrome 将在当前工作目录中生成一个名为 screenshot.png的文件:
访问一个网页并进行js交互(REPL模式)
–repl 标志可以使 Headless Chrome 运行在一个你可以使用浏览器评估 JS 表达式的模式下。执行下面的命令:
启动一个监听端口
可以通过浏览器打开:http://127.0.0.1:9222
Headless Chrome API
以上演示了使用命令行的方式操作headless chrome,那么怎么在代码中使用它呢?
api工具如下:
官方:puppeteer
底层:chrome-remote-interface
活跃:chromeless
非官方:headless-chrome-crawler
Python API:pychrome
puppeteer 介绍
Puppeteer 是一个由 Chrome 团队开发的 Node 库。它提供了一个高层次的 API 来控制无需显示版(或 完全版)的 Chrome。它与其他自动化测试库,如 Phantom 和 NightmareJS 相类似,但是只适用于最新版本的 Chrome。
puppeteer 安装
安装puppeteer前需要在系统上安装nodejs与npm;安装完puppeteer,默认会自动安装最新版本的chromium。
注意:
安装升级nodejs与npm
要安装puppeteer,需要先安装npm与nodejs,而puppeteer对nodejs版本有要求,因此不能用系统默认安装的nodejs版本。
共享至全局
若用yum安装过nodejs,需要移除其他版本:
查看nodejs与npm版本:
安装升级nodejs过程参考:http://jeeinn.com/2017/02/236/
puppeteer 使用
在使用puppeteer前,先要确定puppeteer、nodejs、npm安装成功(版本正确),且headless chrome安装成功。
官方API文档:
https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md
打印用户代理:
在puppeteer_test目录下创建一个example1.js文件,写入:
运行代码:
获取页面的屏幕截图:
创建一个example2.js文件,写入:
运行代码:
安装puppeteer报错
在linux下安装puppeteer报错,即:
失败原因可能是linux版本不支持,centos7下成功,centos6下测试失败。
运行puppeteer报错处理
报错如下,说明代码语法有问题,或者node版本太低,不符合要求:
报错如下,说明代码中需要设置headless状态为true
解决方案,修改代码为如下:
报错如下,与上面解决方案一致:
chrome-remote-interface工具
chromeless介绍
chromeless社区比较火热,代码更新也非常频繁,个人比较看好。
chromeless安装
chromeless对nodejs版本要求是>8.2(centos7下node7.6测试可以),因此需要先升级nodejs,升级方法参考前文;升级完以后,再安装chromeless项目环境。
chromeless使用
官方API文档:
https://github.com/graphcool/chromeless/blob/master/docs/api.md#api-goto
在线代码运行环境:
https://chromeless.netlify.com
创建chromeless_test.js,写入:
运行代码:
pychrome工具
常见问题
命令行运行headless chrome需要使用–disable-gpu参数吗?系统仍然需要安装Xvfb吗?如何创建一个运行 Headless Chrome 的 Docker 容器?headless chrome和 PhantomJS 有什么关系?
参考文章
https://zhuanlan.zhihu.com/p/29207391
https://developers.google.com/web/updates/2017/04/headless-chrome
https://juejin.im/entry/58fd5e645c497d005803b6a4
http://csbun.github.io/blog/2017/09/puppeteer/
领取专属 10元无门槛券
私享最新 技术干货