首先,谷歌把Chromium支持了Headless,也就是无头浏览器,不用界面直接在CI模式下运行,宣布了phantomjs下岗
几大应用:
- 爬虫技术
- 前端unit test单元测试,比如结合karma+jasmine这些
- UI automation test,web界面自动化测试
然后,谷歌还做了一个Puppeteer,也就是用来操作浏览器的一套接口,可以很方便和Chromium浏览器通讯
但是,安装Puppeteer的时候,需要从谷歌官方网站下载对应操作系统的Chromium,下载经常失败
尽管可以使用手动下载,但毕竟不能自动化,然后就是从淘宝镜像下载,也需要设置环境变量
发现有一个Puppeteer Chromium Resolver ,用来自动解决这些问题:
npm install puppeteer-chromium-resolver --save
安装时,会自动安装Chromium,使用的时候就可以用缓存快速调用了,调用需要使用自定义executablePath
require("puppeteer-chromium-resolver")({
//hosts: ["https://storage.googleapis.com", "https://npm.taobao.org/mirrors"]
}).then(function (revisionInfo) {
console.log("Chromium revision installed.");
revisionInfo.puppeteer.launch({
headless: false,
executablePath: revisionInfo.executablePath
});
});
1,可以自己设置镜像hosts,默认是官方站和阿里镜像,一个下载失败,自动尝试另一个,无缝解决国内国外下载
2,下载默认是保存到user的目录(也可以指定savePath),而不是node_modules,因为node_modules可能随时删除,下次安装需要重新下载,同时,如果有多个项目都要用,那么Chromium也是很大的,300多兆,如果多个太占用空间,存到全局的user目录,只存一个,而且下载一次,就不再下载,方案和phantomjs类似
其他问题:
Puppeteer和Chromium Headless固然是极好的,但目前在一些旧的系统上安装,缺少依赖无法运行,比如在linux centos6,还需要安装依赖才能进行,可能并不是每个人都有权限去安装这些依赖,而phantomjs似乎没有这些依赖问题
依赖可参考:https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md