網站狀態驗證WebBrowser控制元件實現

lyfclear發表於2009-07-17

現在管理的網站(主要是一些小網站)不下幾十個每天早上一來要瀏覽一遍,看一下這些網站是否能正常的訪問.這是一項枯燥又不得不做的事,後來想用程式來實現這一工作,跳離重複的去驗證工作.

首先選用的是HttpWebRequest HttpWebResponse 來讀返回狀態碼;後來發現這是徒勞的一些不能訪問的網站被劫持到“鐵通”一個固定ip的網站頁面下。又換用IPHostEntry hostentry = Dns.Resolve(url); IPEndPoint ipendpoint= new IPEndPoint(hostentry.AddressList[0],0);來找ip 結果同樣被被劫持到“鐵通”一個固定ip(可能是我對HttpWebRequest瞭解不深)。

不得不選用WebBrowser 這個比較“耗資源”的控制元件來實現了

一.首先建一個form 加入一個 linklabel 一個button 一個webbrowser 控制元件就齊了

二. 為了記錄時間加入了一個private Stopwatch sw = new Stopwatch(); //建立一個記時函式

using System.Diagnostics;

using System.Collections.Specialized;

StringCollection sc = new StringCollection();//為了記錄出錯資訊

三.將所有的網址放入一個陣列

private string[] UrlAddress()

{ string[] urladdress ={

"網站標題x", //用兩個逗號做截斷

"網站標題y"};

return urladdress;

}

四.建立按鈕響應事件

private void buttonCheck_Click(object sender, EventArgs e)

{

sw.Start();

string[] url = UrlAddress();

array = null;

this.webBrowserResult.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);//載入完成後的委託事件

for (int i = 0; i < url.Length; i++)

{

this.linkLabelUrlAddress.Text = url[i];

this.linkLabelUrlAddress.Refresh();

loading = true;

array = url[i].Split(new string[] { ".." }, StringSplitOptions.None); //分割字串

this.webBrowserResult.Navigate(array[0]);

while (loading)

{

Application.DoEvents();

}

// this.webBrowserResult.Show();

//System.Threading.Thread.Sleep(3000);

// this.webBrowserResult.Hide();

}

for (int i = 0; i < sc.Count; i++)

{

this.textBoxUrl.AppendText(sc[i]);

}

this.webBrowserResult.Visible = false;

this.textBoxUrl.Visible = true;

this.textBoxUrl.Refresh();

MessageBox.Show("查詢用時" + sw.Elapsed.ToString()); //計時顯示並結束

sw.Stop();

}

五. WebBrowser 控制元件完成載入後的事件

private void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

{

if(this.webBrowserResult.ReadyState==WebBrowserReadyState.Complete )

{

loading = false;

if (this.webBrowserResult.Document != null)

{

string title = this.webBrowserResult.Document.Title.ToString();

string url = this.webBrowserResult.Document.Url.ToString();

if (title.Equals("中國鐵通提醒您! 您輸入的域名無法訪問!"))

{

sc.Add(url+"被鐵通截獲無法訪問!!!");

this.webBrowserResult.Stop();

}

else if(title.IndexOf(array[1])<0)

{

sc.Add(url + "訪問出現異常 ----異常提示" + title+"!!!");

this.webBrowserResult.Stop();

}

}

}

}

這個小程式可以用但是不是太理想幾十個網站大概要兩三分鐘才可以完成判斷。也沒用多執行緒(主要是不知道怎麼用)那裡要改進的希望廣大網友給我留言

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13380151/viewspace-1024233/,如需轉載,請註明出處,否則將追究法律責任。

相關文章