天天看點

C#抓取AJAX頁面的内容

現在的網頁有相當一部分是采用了AJAX技術,所謂的AJAX技術簡單一點講就是事件驅動吧(當然這種說法可能很不全面),在你送出了URL後,伺服器發給你的并不是所有是頁面内容,而有一大部分是JS腳本,即用<JAVASCRIPT标簽表示的,這其中有些是連結了外部的JS檔案,有些是内置的JS腳本,這些腳本是在用戶端加載了伺服器發回來的源碼後才執行的,是以不管是采用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)

         {

             webBrowser1.Navigate(Url);

             if (webBrowser1.StatusText == "完成")

             {

                 timer1.Enabled = false;

                 //頁面加載完成,做一些其它的事

             }

       }

繼續閱讀