Web自動化

這里所說的Web自動化是所有跟頁面相關(guān)的自動化,比如頁面爬取,數(shù)據(jù)抓取,頁面內(nèi)容檢測,頁面功能測試,頁面加載性能測試,頁面回歸測試等等,當(dāng)前主要由如下幾種解決方式:

文本數(shù)據(jù)獲取

這就是各種request庫或者類似curl這樣的工具做的事情,拿到的是頁面的文本,然后進行XML文檔解析,獲得相應(yīng)的內(nèi)容。但如果頁面有一些動態(tài)執(zhí)行的內(nèi)容,比如JavaScript生成跳轉(zhuǎn)URL,這樣就搞不定了,需要有JS引擎的工具來搞,比如再配合JS引擎自行實現(xiàn)的工具,或者直接使用瀏覽器內(nèi)核來搞的工具。

按照瀏覽器的方式來執(zhí)行

這就是各種使用瀏覽器內(nèi)核來實現(xiàn)的工具,比如基于WebkitPhantomJS, 基于GeckoSlimerJS, 經(jīng)過包裝的CasperJS兼容PhantomJSSlimerJS,以及基于v8JS引擎和.net平臺的trifleJS等。這些工具更新迭代跟不上Web標(biāo)準的發(fā)展,新的Web標(biāo)準無法得到良好的支持。

通過協(xié)議直接操作真實瀏覽器

這就是Selenium的實現(xiàn)方式,通過WebDriver協(xié)議進行通信,瀏覽器和瀏覽器驅(qū)動都實現(xiàn)了C/S結(jié)構(gòu)的WebDriver協(xié)議,Selenium通過瀏覽器的驅(qū)動包,來發(fā)送操作請求,瀏覽器根據(jù)請求響應(yīng)相應(yīng)的操作。這樣實現(xiàn)有一個問題是始終有一個真實瀏覽器的界面在渲染和變化,一方面效率低下,另一方面在服務(wù)端環(huán)境無法運行。于是就衍生出了使用Xvfb(virtual framebuffer X Server)來配合實現(xiàn)在服務(wù)器環(huán)境下的運行,基本解決了問題。但每一種瀏覽器的特性支持都依賴于相應(yīng)的驅(qū)動的實現(xiàn)和支持情況。

無界面瀏覽器

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

Headless Chrome相關(guān)的對比

Headless 是一種在無圖形界面環(huán)境運行的一種能力,比如高性能的服務(wù)器端環(huán)境,參考Healess Software

PhantomJS的問題

  • 使用老版本的Webkit,不支持新的Web標(biāo)準,跟真實瀏覽器存在差異

  • 開發(fā)者維護難度大,主要維護者不干了,起因是Chrome 將支持 Headless模式

  • 要解決的問題多,1800+

  • 內(nèi)存占用高,并發(fā)有問題,不穩(wěn)定,有些奇奇怪怪的bug

Selenium的問題

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

  • 需要有圖形界面,顯示設(shè)備的支持

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

  • X是架構(gòu)無關(guān)的遠程圖形界面和輸入設(shè)備兼容的系統(tǒng),C/S架構(gòu)

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

  • 這里可以簡單理解為虛擬顯示器或者顯示器模擬器

  • 也支持Headless實現(xiàn),實現(xiàn)跟Web標(biāo)準有差異

  • 通過ChromeDriver(WebDriver的Chrome實現(xiàn))的來操作Chrome,需要依賴ChromeDriver的更新

  • 可以在ChromeDriver下載查看支持的Chrome版本

Headless Chrome帶來的優(yōu)勢

  • 資源占用少(相對于PhantomJS)

  • 服務(wù)端環(huán)境(命令行,無圖形界面)

  • 支持現(xiàn)代Web標(biāo)準和技術(shù)(ES6,ServiceWorkers,WebGL...)

  • 行為符合Web規(guī)范、版本能自動更新

  • Chronium/Chrome團隊維護

Headless Chrome 參考資料

http://www.cnblogs.com/rawbin/p/7119090.html