標籤:blog http 使用 檔案 for 問題 html 代碼
現在的網頁有相當一部分是採用了AJAX技術,不管是採用C#中的WebClient還是HttpRequest都得不到正確的結果,因為這些指令碼是在伺服器發送完畢後才執行的!
但我們用IE瀏覽頁面時是正常的,所以解決方案只有1個就是採用WebBrowser控制項
但是使用Webbrowser你會發現,在DownloadComplete事件中,你根本無法知道頁面何時才算是真正的載入完畢!
當然個別有Frame的網頁可能會觸發多次Complete,即使你採用計數器的辦法,即在Navigated事件中++,而在DownloadComplete中做--,也仍然不能得到JS完成執行後的結果,我開始也感覺到非常奇怪,直到後來GG了相關AJAX的文章,明白了其中原委.
最終解決方案就是利用WebBrowser+Timer來解決抓取頁面的問題
而其中的關鍵仍然是頁面狀態,我們可以利用webBrowser1.StatusText,如果返回"完成",表示頁面載入完畢!
範例程式碼如下:
private void timer1_Tick(object sender, EventArgs e) { textBox1.Text += webBrowser1.StatusText; if (webBrowser1.StatusText == "完成") { timer1.Enabled = false; //頁面載入完成,做一些其它的事 textBox1.Text += webBrowser1.Document.Body.OuterHtml; //webBrowser1.DocumentText 注意不要用這個,這個和查看源檔案一樣的 } } private void Form1_Load(object sender, EventArgs e) { string Url = "http://cd.mei8.cn/face/work/windex.aspx?btn=6"; webBrowser1.Navigate(Url); }
放三個控制項,webBrowser,timer,textBox timer設定為可用