用C#抓取AJAX页面的内容
生活随笔
收集整理的這篇文章主要介紹了
用C#抓取AJAX页面的内容
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
用C#抓取AJAX頁面的內(nèi)容[轉(zhuǎn)]
現(xiàn)在的網(wǎng)頁有相當(dāng)一部分是采用了AJAX技術(shù),不管是采用C#中的WebClient還是HttpRequest都得不到正確的結(jié)果,因為這些腳本是在服務(wù)器發(fā)送完畢后才執(zhí)行的!但我們用IE瀏覽頁面時是正常的,所以解決方法只有1個就是采用WebBrowser控件
但是使用Webbrowser你會發(fā)現(xiàn),在DownloadComplete事件中,你根本無法知道頁面何時才算是真正的加載完畢!
當(dāng)然個別有Frame的網(wǎng)頁可能會觸發(fā)多次Complete,即使你采用計數(shù)器的辦法,即在Navigated事件中++,而在DownloadComplete中做--,也仍然不能得到JS完成執(zhí)行后的結(jié)果,我開始也感覺到非常奇怪,直到后來GG了相關(guān)AJAX的文章,明白了其中原委.
最終解決方案就是利用WebBrowser+Timer來解決抓取頁面的問題
而其中的關(guān)鍵仍然是頁面狀態(tài),我們可以利用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設(shè)置為可用
轉(zhuǎn)載于:https://www.cnblogs.com/ike_li/archive/2009/07/29/1533780.html
總結(jié)
以上是生活随笔為你收集整理的用C#抓取AJAX页面的内容的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速找到由程序员到CTO发展道路上的问路
- 下一篇: SpringBoot 之环境搭建