利用python和httpwatch實現自動監控網頁

在作網頁訪問質量監控時,少不了使用到httpwatch這個工具。httpwatch能記錄訪問一個網頁過程當中發生的全部細節,包括網頁裏全部元素,從DNSlookup、網絡鏈接到第一個數據包發送時間等等(以下圖所示),都有詳細記錄,從而爲咱們查找問題提供了可視的方式。通常咱們都是在出現問題時,就用它分析一下。但若是用它去長期跟跟蹤一個網頁的訪問狀況,而後記錄入庫,這些數據就可爲分析問題提供一個基礎數據,這也是頗有意義的。那麼httpwatch能實現這個需求嗎。答案是確定的,使用python就能夠輕鬆實現這個功能。下面代碼使用了python自動從一個外部文件讀取將要監測的頁面,並將一些時間要素打印出來,固然,你還能夠實現更強的功能 html

外部文件格式: python

http://www.cites.com/ ruby

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)

相關文章
相關標籤/搜索