用C#抓取AJAX页面的内容
生活随笔
收集整理的這篇文章主要介紹了
用C#抓取AJAX页面的内容
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用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設置為可用
轉載于:https://www.cnblogs.com/ike_li/archive/2009/07/29/1533780.html
總結
以上是生活随笔為你收集整理的用C#抓取AJAX页面的内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速找到由程序员到CTO发展道路上的问路
- 下一篇: C#中的DBNull、Null、和Str