用Python驅(qū)動Headless Chrome

headless chrome.png

Headless Browser(無頭的瀏覽器)是什么鬼?

簡而言之,Headless Browser是沒有圖形用戶界面(GUI)的web瀏覽器捏顺,通常是通過編程或命令行界面來控制的卡骂。

Headless Browser的許多用處之一是自動化可用性測試或測試瀏覽器交互。如果您正在嘗試檢查頁面在不同的瀏覽器中呈現(xiàn)的方式,或者確認(rèn)頁面元素在用戶啟動某個工作流之后出現(xiàn)宰翅,那么使用Headless Browser可以提供大量的幫助。除此之外爽室,如果內(nèi)容是動態(tài)呈現(xiàn)的(比如通過Javascript)汁讼,web抓取等傳統(tǒng)的面向web的任務(wù)就很難做了。使用Headless Browser可以方便地訪問這些內(nèi)容阔墩,因為內(nèi)容的呈現(xiàn)方式與完全瀏覽器中的內(nèi)容完全相同嘿架。

基于不同的瀏覽器,有不同的瀏覽器引擎戈擒。(http://www.cnblogs.com/wangjunqiao/p/5212561.html)

主流瀏覽器所使用的內(nèi)核分類

Trident內(nèi)核:IE,MaxThon,TT,The World,360,搜狗瀏覽器等
Gecko內(nèi)核:Netscape6及以上版本眶明,F(xiàn)F,MozillaSuite/SeaMonkey等
Presto內(nèi)核:Opera7及以上
Webkit內(nèi)核:Safari,Chrome等

先讓我們看看瀏覽器處理過程中的每一個步驟:

1.處理HTML腳本,生成DOM樹
2.處理CSS腳本筐高,生成CSSOM樹 (DOM和CSSOM是獨立的數(shù)據(jù)結(jié)構(gòu))
3.將DOM樹和CSSOM樹合并為渲染樹
4.對渲染樹中的內(nèi)容進(jìn)行布局搜囱,計算每個節(jié)點的幾何外觀
5.將渲染樹中的每個節(jié)點繪制到屏幕中

Headless Browser實際就是節(jié)約了第4,5步的時間。

3年前柑土,無頭瀏覽器 PhantomJS 已經(jīng)如火如荼出現(xiàn)了蜀肘,緊跟著 NightmareJS 也成為一名巨星。無頭瀏覽器帶來巨大便利性:頁面爬蟲稽屏、自動化測試扮宠、WebAutomation...用過PhantomJS的都知道,它的環(huán)境是運行在一個封閉的沙盒里面狐榔,在環(huán)境內(nèi)外完全不可通信坛增,包括API、變量薄腻、全局方法調(diào)用等收捣。

Headless Chrome和Python
在發(fā)布Headless Chrome之前,當(dāng)你需要自動化瀏覽器的時候隨時都有可能涉及多個窗口或標(biāo)簽庵楷,你必須擔(dān)心CPU和/或內(nèi)存的使用罢艾。這兩種方式都與必須從被請求的URL中顯示顯示的圖形的瀏覽器相關(guān)聯(lián)。

當(dāng)使用一個無頭的瀏覽器時尽纽,我們不用擔(dān)心這個咐蚯。因此,我們可以預(yù)期我們編寫的腳本的內(nèi)存開銷會降低弄贿,執(zhí)行速度也會更快春锋。
而Chrome從59版本開始 推出了 headless mode(當(dāng)時僅支持Mac和Linux),而目前最新的Chrome63版已經(jīng)開始在windows上支持headless mode差凹。

安裝Headless Chrome 在windows
Selenium操作chrome瀏覽器需要有ChromeDriver驅(qū)動來協(xié)助看疙。
什么是ChromeDriver豆拨?

ChromeDriver是Chromium team開發(fā)維護(hù)的,它是實現(xiàn)WebDriver有線協(xié)議的一個單獨的服務(wù)能庆。ChromeDriver通過chrome的自動代理框架控制瀏覽器施禾,建議從以下地址直接下載最新的版本:ChromeDriver 2.34
它才可以支持Chrome v61-63。
可以將此driver放置于:C:\Program Files\Google\Chrome\Application\ (對應(yīng)的Chrome安裝目錄下)

安裝Selenium 在windows
cmd命令里面運行:
$pip install selenium

編寫對應(yīng)的腳本
編寫一個對應(yīng)的百度搜索的腳本

import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import time

chrome_options = Options()
chrome_options.add_argument("--headless")

base_url = "http://www.baidu.com/"
#對應(yīng)的chromedriver的放置目錄
driver = webdriver.Chrome(executable_path=(r'C:\Program Files\Google\Chrome\Application\chromedriver.exe'), chrome_options=chrome_options)

driver.get(base_url + "/")

start_time=time.time()
print('this is start_time ',start_time)

driver.find_element_by_id("kw").send_keys("selenium webdriver")
driver.find_element_by_id("su").click()
driver.save_screenshot('screen.png')

driver.close()

end_time=time.time()
print('this is end_time ',end_time)

以上的腳本運行完成后搁胆,你會在你的當(dāng)前目錄看到一個類似于下面畫面的screen.png.


screen.png

可以看出上面的寫法和直接使用Selenium調(diào)用Chrome瀏覽器的時候極其類似弥搞,只是多添加了對chrome_options的重寫。

據(jù)運行的試驗表明渠旁,Headelss 的確比Headed的瀏覽器在內(nèi)存消耗攀例,運行時間,CPU占用上面都有一定的優(yōu)勢顾腊。

headless對比.png

使用Headless Chrome也許能讓你的自動化測試運行更快粤铭,而且在視覺測試上面也有一定的優(yōu)勢。感興趣的朋友可以上手試試杂靶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梆惯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吗垮,更是在濱河造成了極大的恐慌垛吗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烁登,死亡現(xiàn)場離奇詭異怯屉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)饵沧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門锨络,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狼牺,你說我怎么就攤上這事羡儿。” “怎么了锁右?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長讶泰。 經(jīng)常有香客問我咏瑟,道長,這世上最難降的妖魔是什么痪署? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任码泞,我火速辦了婚禮,結(jié)果婚禮上狼犯,老公的妹妹穿的比我還像新娘余寥。我一直安慰自己领铐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布宋舷。 她就那樣靜靜地躺著绪撵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祝蝠。 梳的紋絲不亂的頭發(fā)上音诈,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音绎狭,去河邊找鬼细溅。 笑死,一個胖子當(dāng)著我的面吹牛儡嘶,可吹牛的內(nèi)容都是我干的喇聊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼蹦狂,長吁一口氣:“原來是場噩夢啊……” “哼誓篱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸥咖,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤燕鸽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啼辣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啊研,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年鸥拧,在試婚紗的時候發(fā)現(xiàn)自己被綠了党远。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡富弦,死狀恐怖沟娱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腕柜,我是刑警寧澤济似,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站盏缤,受9級特大地震影響砰蠢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唉铜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一台舱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潭流,春花似錦竞惋、人聲如沸柜去。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗓奢。三九已至,卻和暖如春胰挑,著一層夾襖步出監(jiān)牢的瞬間蔓罚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工瞻颂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留豺谈,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓贡这,卻偏偏與公主長得像茬末,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盖矫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容