做过爬虫的对 phantomjs 肯定也不陌生了,稳坐爬虫界第一大杀器宝座好多年了。它提供了整套的 js 运行环境,基本可以认为浏览器能看到的用它就能抓。
但毕竟开发者精力有限,前端又是推陈出新最快的一个领域,所以兼容性问题也越来越多,issue 列表越来越长。这时候继任者出现了,那就是 Chrome Headless,Google 出品必属精品。
Chrome Headless 就是无界面版的 Chrome,底层运行和 Chrome 没有任何区别,支持 Chrome 所有特性,随 Chrome 更新而更新。
随 Chrome Headless 同时出现的控制协议就是 CDP(Chrome Devtools Protocol),到这可能就很熟了,就是 F12 控制台所用的协议,CDP 提供的功能比控制台体现的要更全,可以实现几乎所有的操作。
在 CDP 的基础上,Google 又提供了一个 NodeJS 平台下的工具包,提供了一些高层次的接口封装。例如一段截图代码只需要:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.github.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
官网可以参见 https://github.com/GoogleChrome/puppeteer,简单执行 npm i puppeteer -g
就可快速安装。
一个没有界面的 Chrome,只需要很少的代码就可以实现 测试web、测试代码、截图对比、爬虫、监控等高级功能,比 PhantomJS 更通用更稳定。