Web自动化之Headless Chrome概览

Web自动化

这里所说的Web自动化是所有跟页面相关的自动化,比如页面爬取,数据抓取,页面内容检测,页面功能测试,页面加载性能测试,页面回归测试等等,当前主要由如下几种解决方式:

文本数据获取

这就是各种request库或者类似curl这样的工具做的事情,拿到的是页面的文本,然后进行XML文档解析,获得相应的内容。但如果页面有一些动态执行的内容,比如JavaScript生成跳转URL,这样就搞不定了,需要有JS引擎的工具来搞,比如再配合JS引擎自行实现的工具,或者直接使用浏览器内核来搞的工具。

按照浏览器的方式来执行

这就是各种使用浏览器内核来实现的工具,比如基于WebkitPhantomJS, 基于GeckoSlimerJS, 经过包装的CasperJS兼容PhantomJSSlimerJS,以及基于v8JS引擎和.net平台的trifleJS等。这些工具更新迭代跟不上Web标准的发展,新的Web标准无法得到良好的支持。

通过协议直接操作真实浏览器

这就是Selenium的实现方式,通过WebDriver协议进行通信,浏览器和浏览器驱动都实现了C/S结构的WebDriver协议,Selenium通过浏览器的驱动包,来发送操作请求,浏览器根据请求响应相应的操作。这样实现有一个问题是始终有一个真实浏览器的界面在渲染和变化,一方面效率低下,另一方面在服务端环境无法运行。于是就衍生出了使用Xvfb(virtual framebuffer X Server) 来配合实现在服务器环境下的运行,基本解决了问题。但每一种浏览器的特性支持都依赖于相应的驱动的实现和支持情况。

无界面浏览器

前面的实现方式都或多或少有自己的问题或者局限,如果浏览器本身支持在服务端环境运行,这将是一个近乎完美的解决思路。Chrome 59开始支持无界面模式,Firefox 55支持Linux版的无界面模式,Firefox 56支持全平台的无界面模式,这样一来,使用方不用被动等待浏览器的WebDriver的实现。

Headless Chrome相关的对比

Headless 是一种在无图形界面环境运行的一种能力,比如高性能的服务器端环境,参考Healess Software

PhantomJS的问题

  • 使用老版本的Webkit,不支持新的Web标准,跟真实浏览器存在差异
  • 开发者维护难度大,主要维护者不干了,起因是Chrome 将支持 Headless模式
  • 要解决的问题多,1800+
  • 内存占用高,并发有问题,不稳定,有些奇奇怪怪的bug

Selenium的问题

  • 使用WebDriver接口和浏览器驱动来操作真实浏览器,带界面渲染,速度慢
  • 需要有图形界面,显示设备的支持
  • 需要使用Xvfb(virtual framebuffer X Server)
    • X是架构无关的远程图形界面和输入设备兼容的系统,C/S架构
    • 在没有物理输入和显示设备的机器上运行
    • 这里可以简单理解为虚拟显示器或者显示器模拟器
  • 也支持Headless实现,实现跟Web标准有差异
  • 通过ChromeDriver(WebDriver的Chrome实现)的来操作Chrome,需要依赖ChromeDriver的更新

Headless Chrome带来的优势

  • 资源占用少(相对于PhantomJS)
  • 服务端环境(命令行,无图形界面)
  • 支持现代Web标准和技术(ES6,ServiceWorkers,WebGL...)
  • 行为符合Web规范、版本能自动更新
  • Chronium/Chrome团队维护

Headless Chrome 参考资料

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

LVS详解及基于LVS实现web服务器负载均衡

前言 LVS(Linux Virtual Server)Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内...

3374
来自专栏along的开发之旅

从源码看DL4J中Native BLAS的加载,以及配置

最近在用DeepLearning4J(DL4J)尝试语音识别的深度学习,git DL4J的代码,用IntelliJ IDEA打开,配置好相关依赖后,运行包org...

773
来自专栏DevOps时代的专栏

GitLab 是如何用 Headless Chrome 测试的

下面的例子介绍了GitLab如何切换到Headless Chrome GitLab最近从PhantomJS转变为Headless Chrome,用于前端测试和R...

3308
来自专栏FreeBuf

SHA1碰撞衍生出的BitErrant攻击

本文将给大家介绍BitErrant攻击,这是由SHA1碰撞衍生出来的一种攻击技术,当SHA1碰撞成为现实,一切皆有可能发生。 ? BitErrant是一种非常有...

18310
来自专栏一个会写诗的程序员的博客

React 测试驱动教程

测试是开发周期中的一个重要组成部分。没有测试的代码被称为:遗留代码。对于我而言,第一次学习 React 和 JavaScript 的时候,感到很有压力。如果你也...

732
来自专栏葡萄城控件技术团队

优化Webpack构建性能的几点建议

1583
来自专栏智能算法

必须掌握的Navicat for SQLite 所有功能

Navicat for SQLite是一套强大和全面的SQLite图形用户介面工具,提供完整的服务器管理功能。它配备了数据编辑、SQL查询和数据模型工具,并支持...

4475
来自专栏Ceph对象存储方案

RGW 服务端加密爬坑记

参考了官方文档,决定采用 Customer-Provided Keys(Amazon SSE-C)方式进行加密

1343
来自专栏小白安全

web渗透思路及总结

(一)针对网站程序,不考虑服务器。 一、查找注入,注意数据库用户权限和站库是否同服。 二、查找XSS,最近盲打很流行,不管怎样我们的目的是进入后台。...

2987
来自专栏ThoughtWorks

无法登录的用户

自从ins项目上线以后,团队其他成员都纷纷下了项目,只留下他这个项目经理留在一线解决问题。登录这块总是出现问题,上次就出现过一次,不过上次是机房网络原因,而这次...

511

扫码关注云+社区