背景
上一版本是 childProcess + phantomjs 为核心的快照服务
phantomjs本身有缺陷,比如不能支持es6的语法、crash等,导致很多没有兼容老浏览器的网站不能正常快照
phantomjs项目本身是”大项目小团队“,说大项目是因为phantomjs功能确实挺强大,说小团队是因为核心维护人员只有两三个人,目前该项目已经完全停止更新(再好的项目没有后盾支持也白搭,活不长久)
服务升级选型
puppeteer + chrome
优点
puppeteer 和 chrome都是google自家的东西,出生高贵,这肯定是phantomjs所能比拟的。
puppeteer 是google 团队官方的无界面(Headless)Chrome 工具,它是一个
Node
库,提供了一个高级的 API 来控制 DevTools协议上的无头版 Chrome 。
缺点
puppeteer 只能用于chrome浏览器,不够灵活
chrome对于低版本的linux 是不支持的,比如 centos4.x,而我们的生产环境就是centos4.3
selenium + firefox
webdriver
webdriver是W3C定义的一个远程控制API, 可以控制用户代理(浏览器)。该API提供了一个与平台和语言无关的协议,和一种可以独立于进程之外远程控制用户浏览器行为的方法。比如可以操作DOM、注入JS脚本、甚至改变窗口大小、快照等功能,可以供开发人员自动测试网页,实现测试环境与开发环境相互独立。
优点
selenium 实现了webdriver定义API功能,并通过浏览器相应webdriver驱动,实现对浏览器的操控
selenium 支持大多数主流浏览器,包括chrome、firefox、safari和opera。
支持多种语言,java、python、js、php等
selenium还支持standalone server 模式,这表示我们可以使用webservice方式创建 client与之通信,从而一个环境多人使用的场景。(未来快照服务升级可以使用这一特性)
缺点
不同浏览器对于webdriver支持的能力有差异
结论
基于以上对比。最后终选择了selenium + firefox。