用C#抓取AJAX頁面的內容


現在的網頁有相當一部分是采用了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設置為可用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM