2014-02-20 82 views
9

如何使用PhantomJS記錄Webdriver上的所有HTTP請求和頁面加載響應? 我使用Python和我的超級簡單的測試腳本是這樣的:使用Webdriver和PhantomJS記錄HTTP流量

from selenium import webdriver 

driver = webdriver.PhantomJS() 
driver.get('http://www.golem.de') 

我已經找到了PhantomJS功能:

page.onResourceRequested = function (request) { 
    console.log('Request ' + JSON.stringify(request, undefined, 4)); 
}; 

但我不知道如何使用Selenium粘在一起這Webdriver分別是Ghostdriver。 我怎麼能這樣做?

+6

我最近發現可以通過驅動程序以HAR格式獲得一些HTTP信息。 get_log(「har」)',但是我在每一種形式的重定向中都進行了搜索,每一種重定向都沒有被報告。有什麼建議麼? – Thorben

回答

2

記錄所有網絡流量的一種方法是使用美妙的工具strace,將所有網絡請求(和數據)記錄到文件中。

strace -s9999 -e trace=network curl http://example.com > /dev/null 

的部分輸出:

sendto(3, "GET/HTTP/1.1\r\nUser-Agent: curl/7.32.0\r\nHost: example.com\r\nAccept: */*\r\n\r\n", 75, MSG_NOSIGNAL, NULL, 0) = 75 
recvfrom(3, "HTTP/1.1 200 OK\r\nAccept-Ranges: bytes\r\nCache-Control: max-age=604800\r\nContent-Type: text/html\r\nDate: Sun, 08 Ju... 
+0

輸出結果比較低......比我期望的要低:(但是謝謝,比沒有好多了 –

+0

我知道這不是對你的問題的回答,但也許有人認爲它有用。如果您只是爲了開發目的而需要HTTP流量,那麼您可以考慮臨時使用Firefox Web驅動程序,以便檢查所有內容。一切正常後,您可以切換回phantomjs – serguitus

2

另一個一般低電平的方式,但略水平高於stracetcpdump。您可以過濾到服務器應用程序的特定偵聽端口範圍和目標主機。如果需要,您還可以記錄數據包以供日後分析。使用-AASCII)轉儲選項,可以過濾請求到給定頁面。對於要求一個簡單的例子到本地主機端口80:

tcpdump -i lo -A -nn dst port 80 and dst host `hostname` 

我敢肯定,Wireshark的或類似的軟件可以做這種類型的協議的具體過濾了。

2

正如Torben所說,driver.get_log(「har」)是一個解決方案,我認爲這對我來說是一個最好的解決方案。

from selenium import webdriver 

service_args = ['--ignore-ssl-errors=yes'] 
driver = webdriver.PhantomJS(service_args=service_args) 
driver.get('https://www.google.com/') 
screenshot = driver.get_screenshot_as_png() 
imgname = "google.png" 
save_img = open(imgname, 'a') 
save_img.write(screenshot) 
save_img.close() 
print driver.get_log('har') 
driver.quit() 

對於另一種解決方案,我們可以參考:1。 browsermob-proxy, 2.或者用webdriver/firebug趕上網絡(似乎netexport不能被火狐驗證,也許我們可以用螢火蟲本身,對於最新的螢火蟲,它具有輸出har的功能) 3.與2相同,另一種解決方案如下:How to capture all requests made by page in webdriver? Is there any alternative to Browsermob?

相關問題