若是要以自動化的方式驅動Chrome進行數據抓取,必須實現Chrome Dev Protocol協議的客戶端。這個協議自己並不複雜,我在以前的文章中也簡單的介紹過一下。html
Google自己有一個Node的實現chrome-remote-interface,對於其它語言,github上也有很多的實現,我也實現過一個,仍是很是簡單的。不過雖然實現這個協議很是簡單,但原始的DevProtocol中是很是底層的API,要使用這些API實現數據抓取仍是要進行許多的封裝工做的。git
爲了更加簡單的使用Headless Chrome,Google Chrome團隊官方提供了另外一個高等級API版本的Node js庫puppeteer。相比底層API,這個要好用得多了。一個簡單的示例以下:github
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); await page.screenshot({path: 'example.png'}); await browser.close(); })();
這個庫很是好用,有空的話後續我還會寫一系列文章來介紹它。對它感興趣的朋友能夠先看看這篇文章:https://github.com/emadehsan/thal。web
經過puppeteer,咱們能夠完成大部分web自動化的功能。不過,和底層的DevProtocol接口比起來,仍是有一些功能缺失的。例如,對於某個頁面,要想獲取到其全部的http請求和響應數據就沒法實現,而這些經過DevProtocol仍是很容易實現的。雖然puppeteer的定位是高層api,若是能同時開放底層接口的話就更加好了。chrome