Web自動化之Headless Chrome概覽

Web自動化

這裏所說的Web自動化是全部跟頁面相關的自動化,好比頁面爬取,數據抓取,頁面內容檢測,頁面功能測試,頁面加載性能測試,頁面迴歸測試等等,當前主要由以下幾種解決方式:html

文本數據獲取

這就是各類request庫或者相似curl這樣的工具作的事情,拿到的是頁面的文本,而後進行XML文檔解析,得到相應的內容。但若是頁面有一些動態執行的內容,好比JavaScript生成跳轉URL,這樣就搞不定了,須要有JS引擎的工具來搞,好比再配合JS引擎自行實現的工具,或者直接使用瀏覽器內核來搞的工具。git

按照瀏覽器的方式來執行

這就是各類使用瀏覽器內核來實現的工具,好比基於WebkitPhantomJS, 基於GeckoSlimerJS, 通過包裝的CasperJS兼容PhantomJSSlimerJS,以及基於v8JS引擎和.net平臺的trifleJS等。這些工具更新迭代跟不上Web標準的發展,新的Web標準沒法獲得良好的支持。github

經過協議直接操做真實瀏覽器

這就是Selenium的實現方式,經過WebDriver協議進行通訊,瀏覽器和瀏覽器驅動都實現了C/S結構的WebDriver協議,Selenium經過瀏覽器的驅動包,來發送操做請求,瀏覽器根據請求響應相應的操做。這樣實現有一個問題是始終有一個真實瀏覽器的界面在渲染和變化,一方面效率低下,另外一方面在服務端環境沒法運行。因而就衍生出了使用Xvfb(virtual framebuffer X Server) 來配合實如今服務器環境下的運行,基本解決了問題。但每一種瀏覽器的特性支持都依賴於相應的驅動的實現和支持狀況。web

無界面瀏覽器

前面的實現方式都或多或少有本身的問題或者侷限,若是瀏覽器自己支持在服務端環境運行,這將是一個近乎完美的解決思路。Chrome 59開始支持無界面模式,Firefox 55支持Linux版的無界面模式,Firefox 56支持全平臺的無界面模式,這樣一來,使用方不用被動等待瀏覽器的WebDriver的實現。chrome

Headless Chrome相關的對比

Headless 是一種在無圖形界面環境運行的一種能力,好比高性能的服務器端環境,參考Healess Software瀏覽器

PhantomJS的問題

  • 使用老版本的Webkit,不支持新的Web標準,跟真實瀏覽器存在差別服務器

  • 開發者維護難度大,主要維護者不幹了,原由是Chrome 將支持 Headless模式架構

  • 要解決的問題多,1800+併發

  • 內存佔用高,併發有問題,不穩定,有些奇奇怪怪的bugless

Selenium的問題

  • 使用WebDriver接口和瀏覽器驅動來操做真實瀏覽器,帶界面渲染,速度慢

  • 須要有圖形界面,顯示設備的支持

  • 須要使用Xvfb(virtual framebuffer X Server)

    • X是架構無關的遠程圖形界面和輸入設備兼容的系統,C/S架構

    • 在沒有物理輸入和顯示設備的機器上運行

    • 這裏能夠簡單理解爲虛擬顯示器或者顯示器模擬器

  • 也支持Headless實現,實現跟Web標準有差別

  • 經過ChromeDriver(WebDriver的Chrome實現)的來操做Chrome,須要依賴ChromeDriver的更新

Headless Chrome帶來的優點

  • 資源佔用少(相對於PhantomJS)

  • 服務端環境(命令行,無圖形界面)

  • 支持現代Web標準和技術(ES6,ServiceWorkers,WebGL...)

  • 行爲符合Web規範、版本能自動更新

  • Chronium/Chrome團隊維護

Headless Chrome 參考資料

相關文章
相關標籤/搜索