Headless Chrome and API

自从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/

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180307G0UY4900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券