在作網頁訪問質量監控時,少不了使用到httpwatch這個工具。httpwatch能記錄訪問一個網頁過程當中發生的全部細節,包括網頁裏全部元素,從DNSlookup、網絡鏈接到第一個數據包發送時間等等(以下圖所示),都有詳細記錄,從而爲咱們查找問題提供了可視的方式。通常咱們都是在出現問題時,就用它分析一下。但若是用它去長期跟跟蹤一個網頁的訪問狀況,而後記錄入庫,這些數據就可爲分析問題提供一個基礎數據,這也是頗有意義的。那麼httpwatch能實現這個需求嗎。答案是確定的,使用python就能夠輕鬆實現這個功能。下面代碼使用了python自動從一個外部文件讀取將要監測的頁面,並將一些時間要素打印出來,固然,你還能夠實現更強的功能 html
外部文件格式: python
http://www.cites2.com/page1.html 網絡
http://www.cites3.com/page2.html dom
httpwatch默認支持C#用ruby,python若是要調用它,須要用到win32com這個模塊,這個須要安裝pywin32,能夠到這個地址下載 函數
http://sourceforge.net/projects/pywin32/files/pywin32/ 工具
如下是程序實現代碼: 測試
#coding=UTF-8
import win32com.client url
###定義一個函數,經過它讀取外部文件來得到將要檢查的URL,以列表返回
def getCiteToCheck(filepath):
input = open(filepath,'r')
cites = input.readlines()
return cites spa
def checkCite(cites):
#建立一個HttpWatch實例,並打開一個IE進程
control = win32com.client.Dispatch('HttpWatch.Controller')
plugin = control.IE.New()
plugin.Log.EnableFilter(False) #httpwatch的能夠設置過濾某些條目,這裏設爲不過濾
plugin.Record() #激活httpwatch記錄
i=1
for domain in cites:
url = domain.strip('\n') #由於從文件裏讀的地址會帶有換行符\n,所以須要先去掉,但測試時,不去掉也能夠正常打開
plugin.GotoURL(url)
control.Wait(plugin,-1)
#能夠將日誌記錄到一個xml文件裏去
logFileName='d:\\log'+str(i)+'.xml'
plugin.Log.ExportXML(logFileName)
#也能夠直接讀log的內容
print(plugin.Log.Entries.Count)
for s in plugin.Log.Entries: #plugin.log.Entries是一個列表,列表元素是一個對象,它對應一個頁面裏包含的全部URL元素
print(s.URL)
print(s.time)
#s.Timings.Blocked返回的是一個Timing的對象,Timing對象有三個屬性:分別是Duration、Started、Valid
#Duration是指下載一個RUL元素所耗時間,Started是指開始時間
#Timings含有Blocked、CacheRead、Connect、DNSLookup、Network、Receice、Send、TTFB、Wait幾個對象
print('Blocked:'+str(s.Timings.Blocked.Duration))
print('CacheRead:'+str(s.Timings.CacheRead.Duration))
print('Connect:'+str(s.Timings.Connect.Duration))
print('DNSLookup:'+str(s.Timings.DNSLookup.Duration))
print('Network:'+str(s.Timings.Network.Duration))
print('Receive:'+str(s.Timings.Receive.Duration))
print('Send:'+str(s.Timings.Send.Duration))
print('TTFB:'+str(s.Timings.TTFB.Duration))
print('Wait:'+str(s.Timings.Wait.Duration))
i=i+1
plugin.Stop()
plugin.CloseBrowser()
###########
cite_file="cite.txt" cites = getCiteToCheck(cite_file) ######## print(cites) for i in [1,2,3,4]: checkCite(cites)