注:文章聚合了現(xiàn)在 headless chrome 介紹和使用方式
包含了三個(gè)部分
chrome 在 mac 上的安裝和簡(jiǎn)單使用(來(lái)自官方)
利用 selenium 的 webdrive 驅(qū)動(dòng) headless chrome(自己添加)
利用Xvfb方式實(shí)現(xiàn)偽 headless chrome
概念Headless模式解決了什么問(wèn)題: 自動(dòng)化工具例如 selenium 利用有頭瀏覽器進(jìn)行測(cè)試,面臨效率和穩(wěn)定性的影響,所以出現(xiàn)了 Headless Browser, 3年前,無(wú)頭瀏覽器 PhantomJS 已經(jīng)如火如荼出現(xiàn)了,緊跟著 NightmareJS 也成為一名巨星。無(wú)頭瀏覽器帶來(lái)巨大便利性:頁(yè)面爬蟲(chóng)、自動(dòng)化測(cè)試、WebAutomation...
用過(guò)PhantomJS的都知道,它的環(huán)境是運(yùn)行在一個(gè)封閉的沙盒里面,在環(huán)境內(nèi)外完全不可通信,包括API、變量、全局方法調(diào)用等。
So, Chrome59 推出了 headless mode,Chrome59版支持的特性,全部可以利用:
ES2017
ServiceWork(PWA測(cè)試隨便耍)
無(wú)沙盒環(huán)境
無(wú)痛通訊&API調(diào)用
無(wú)與倫比的速度
...
現(xiàn)在有兩個(gè)方式獲取支持 headless 的 chrome
1.chrome 59 beta 版本:下載鏈接https://dl.google.com/chrome/...
2.安裝安裝黃金版 chrome,Chrome Canary :獲取方式:
brew install Caskroom/versions/google-chrome-canary
3.簡(jiǎn)單的使用,我就以 chrome 59,演示一下:
用一個(gè)命令啟動(dòng) Chrome 作為一個(gè) Headless 服務(wù): ./Applications/Google Chrome.app/Contents/MacOS/Google Chrome --headless --remote-debugging-port=9222 --disable-gpu http://demo.testfire.net 或者切到google chrome 這個(gè)程序目錄下 cd /Applications/Google Chrome.app/Contents/MacOS 然后執(zhí)行 ./Google Chrome --headless --remote-debugging-port=9222 --disable-gpu http://demo.testfire.net
使用 Headless Chrome 抓取數(shù)據(jù):
將要使用 Node.js 去連接我們運(yùn)行中的 Chrome 實(shí)例。你需要確保你已經(jīng)安裝了 Node,才可以繼續(xù)這個(gè)步驟。
讓我們生成一個(gè)普通的 Node 項(xiàng)目,只有一個(gè)依賴那就是 Chrome Remote Interface 包,它可以幫助我們與 Chrome 溝通。然后我們創(chuàng)建一個(gè)空白的 index.js 文件。
mkdir my-headless-chrome && cd my-headless-chrome npm init --yes npm install --save chrome-remote-interface touch index.js
現(xiàn)在我們將要放一些代碼到index.js。這個(gè)模板例子是由 Chrome 團(tuán)隊(duì)提供的。它指示這個(gè)瀏覽器導(dǎo)航到github.com,然后通過(guò) client 里的 Network 屬性捕獲這個(gè)頁(yè)面上所有的網(wǎng)絡(luò)請(qǐng)求。
vi index.js 將代碼復(fù)制到里面: const CDP = require("chrome-remote-interface"); CDP(client => { // extract domains const { Network, Page } = client; // setup handlers Network.requestWillBeSent(params => { console.log(params.request.url); }); Page.loadEventFired(() => { client.close(); }); // enable events then start! Promise.all([Network.enable(), Page.enable()]) .then(() => { return Page.navigate({ url: "https://github.com" }); }) .catch(err => { console.error(err); client.close(); }); }).on("error", err => { // cannot connect to the remote endpoint console.error(err); });
最后啟動(dòng)我們的 Node 應(yīng)用。
node index.js
我們可以看到 Chrome 發(fā)出的所有的網(wǎng)絡(luò)請(qǐng)求,然而并沒(méi)有一個(gè)實(shí)際的瀏覽器窗口。
$ node index.js http://demo.testfire.net/ http://demo.testfire.net/style.css http://demo.testfire.net/images/logo.gif http://demo.testfire.net/images/header_pic.jpg http://demo.testfire.net/images/pf_lock.gif http://demo.testfire.net/images/gradient.jpg http://demo.testfire.net/images/home1.jpg http://demo.testfire.net/images/home2.jpg http://demo.testfire.net/images/home3.jpg
這是一個(gè)非常棒的方式去查看加載了那些資源.
參考鏈接:https://github.com/yesvods/Bl...
ubuntu 系統(tǒng)下可以參考:https://medium.com/@dschnr/us...
鑒于以上的方式是利用 nodejs直接去操作 headless chrome
我提供一種方式,利用 selenium 的 webdrive 的 chromedriver驅(qū)動(dòng) chrome59進(jìn)行 headless chrome 操作
利用 webdrive 的webdriver.ChromeOptions()方法,添加 headless 相關(guān)參數(shù),從而驅(qū)動(dòng) headless的 chrome
下面的代碼是進(jìn)行一個(gè) web 登錄的過(guò)程:
#coding:utf-8 from selenium import webdriver url = "http://demo.testfire.net" chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") driver = webdriver.Chrome(chrome_options=chrome_options,executable_path="/Users/xxxx/driver/chromedriver") driver.get("http://demo.testfire.net") driver.find_element_by_xpath("http://*[@id="_ctl0__ctl0_LoginLink"]").click() driver.find_element_by_xpath("http://*[@id="uid"]").clear() driver.find_element_by_xpath("http://*[@id="uid"]").send_keys("admin") driver.find_element_by_xpath("http://*[@id="passw"]").send_keys("admin") driver.find_element_by_xpath("http://*[@id="login"]/table/tbody/tr[3]/td[2]/input").click() print driver.current_url
最后 print 出登錄成功的當(dāng)前 url: http://demo.testfire.net/bank...
利用Xvfb方式實(shí)現(xiàn)偽 headless chrome當(dāng)瀏覽器不支持headless模式,可以利用python 的Xvfb實(shí)現(xiàn)偽 headless mode,Xvfb只是產(chǎn)生了一個(gè)虛擬窗口,瀏覽器只是沒(méi)有在當(dāng)前窗口顯示.
簡(jiǎn)單的列舉利用腳本
#coding:utf-8 from selenium import webdriver from xvfbwrapper import Xvfb xvfb = Xvfb(width=1280,height=720) xvfb.start() driver = webdriver.Chrome() driver.get("http://demo.testfire.net") cookies = driver.get_cookies() print cookies driver.close() xvfb.stop()
參考文檔:http://tobyho.com/2015/01/09/...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44368.html
摘要:安裝安裝依賴庫(kù)安裝已經(jīng)相關(guān)的插件,可以使用或者使用在這篇文章中,我使用和,如果你不喜歡這兩個(gè)庫(kù),你可以選擇你喜歡的任何一個(gè)庫(kù),只要它能在瀏覽器中運(yùn)行就可以。 本文翻譯自:Automated testing with Headless Chrome作者:Eric Bidelman (Google 工程師)譯者:justjavac 如果您想使用 Headless Chrome 進(jìn)行自動(dòng)測(cè)試...
摘要:安裝安裝依賴庫(kù)安裝已經(jīng)相關(guān)的插件,可以使用或者使用在這篇文章中,我使用和,如果你不喜歡這兩個(gè)庫(kù),你可以選擇你喜歡的任何一個(gè)庫(kù),只要它能在瀏覽器中運(yùn)行就可以。 本文翻譯自:Automated testing with Headless Chrome作者:Eric Bidelman (Google 工程師)譯者:justjavac 如果您想使用 Headless Chrome 進(jìn)行自動(dòng)測(cè)試...
摘要:了解模式指的是不需要用戶界面的瀏覽器,這種瀏覽器在自動(dòng)化測(cè)試和爬蟲(chóng)領(lǐng)域有著廣泛的應(yīng)用。實(shí)踐使用瀏覽器的模式進(jìn)行自動(dòng)化測(cè)試,你需要先滿足以下前提運(yùn)行環(huán)境或者或者最新版已加入萬(wàn)事俱備,廢話不多說(shuō)我們直接上演示代碼。 了解HEADLESS模式 HEADLESS BROWSER 指的是不需要用戶界面的瀏覽器,這種瀏覽器在自動(dòng)化測(cè)試和爬蟲(chóng)領(lǐng)域有著廣泛的應(yīng)用。 例如你想在網(wǎng)頁(yè)上運(yùn)行一些測(cè)試,從網(wǎng)頁(yè)...
摘要:前端每周清單第期現(xiàn)狀分析與優(yōu)化策略單元測(cè)試爬蟲(chóng)作者王下邀月熊編輯徐川前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開(kāi)發(fā)教程工程實(shí)踐深度閱讀開(kāi)源項(xiàng)目巔峰人生等欄目。 showImg(https://segmentfault.com/img/remote/1460000011008022); 前端每周清單第 29 期:Web 現(xiàn)狀分析與優(yōu)化策略...
摘要:函數(shù)計(jì)算就是這里的膠水??偨Y(jié)函數(shù)計(jì)算有如下優(yōu)勢(shì)無(wú)需采購(gòu)和管理服務(wù)器等基礎(chǔ)設(shè)施專注業(yè)務(wù)邏輯的開(kāi)發(fā)提供日志查詢性能監(jiān)控報(bào)警等功能快速排查故障以事件驅(qū)動(dòng)的方式觸發(fā)應(yīng)用響應(yīng)用戶請(qǐng)求毫秒級(jí)別彈性伸縮,快速實(shí)現(xiàn)底層擴(kuò)容以應(yīng)對(duì)峰值壓力按需付費(fèi)。 摘要: 使用 puppeteer 結(jié)合函數(shù)計(jì)算,可以快速的構(gòu)建彈性的服務(wù)完成各種功能,包括:生成網(wǎng)頁(yè)截圖或者 PDF、高級(jí)爬蟲(chóng),可以爬取大量異步渲染內(nèi)容的網(wǎng)...
閱讀 3744·2021-11-25 09:43
閱讀 2612·2021-11-18 13:11
閱讀 2238·2019-08-30 15:55
閱讀 3284·2019-08-26 11:58
閱讀 2837·2019-08-26 10:47
閱讀 2243·2019-08-26 10:20
閱讀 1282·2019-08-23 17:59
閱讀 3016·2019-08-23 15:54