对码当歌,猿生几何?

网页快照服务升级——selenium + firefox

背景

  1. 上一版本是 childProcess + phantomjs 为核心的快照服务

  2. phantomjs本身有缺陷,比如不能支持es6的语法、crash等,导致很多没有兼容老浏览器的网站不能正常快照

  3. phantomjs项目本身是”大项目小团队“,说大项目是因为phantomjs功能确实挺强大,说小团队是因为核心维护人员只有两三个人,目前该项目已经完全停止更新(再好的项目没有后盾支持也白搭,活不长久)

服务升级选型

puppeteer + chrome

优点

  1. puppeteer 和 chrome都是google自家的东西,出生高贵,这肯定是phantomjs所能比拟的。

  2. puppeteer 是google 团队官方的无界面(Headless)Chrome 工具,它是一个 Node 库,提供了一个高级的 API 来控制 DevTools协议上的无头版 Chrome 。

缺点

  1. puppeteer 只能用于chrome浏览器,不够灵活

  2. chrome对于低版本的linux 是不支持的,比如 centos4.x,而我们的生产环境就是centos4.3

selenium + firefox

webdriver

webdriver是W3C定义的一个远程控制API, 可以控制用户代理(浏览器)。该API提供了一个与平台和语言无关的协议,和一种可以独立于进程之外远程控制用户浏览器行为的方法。比如可以操作DOM、注入JS脚本、甚至改变窗口大小、快照等功能,可以供开发人员自动测试网页,实现测试环境与开发环境相互独立。

优点

  1. selenium 实现了webdriver定义API功能,并通过浏览器相应webdriver驱动,实现对浏览器的操控

  2. selenium 支持大多数主流浏览器,包括chrome、firefox、safari和opera。

  3. 支持多种语言,java、python、js、php等

  4. selenium还支持standalone server 模式,这表示我们可以使用webservice方式创建 client与之通信,从而一个环境多人使用的场景。(未来快照服务升级可以使用这一特性

缺点

  1. 不同浏览器对于webdriver支持的能力有差异

结论

基于以上对比。最后终选择了selenium + firefox。