zoukankan      html  css  js  c++  java
  • 用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设置为可用

  • 相关阅读:
    POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
    LCA 最近公共祖先 (模板)
    线段树,最大值查询位置
    带权并查集
    转负二进制
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
  • 原文地址:https://www.cnblogs.com/icejd/p/3871610.html
Copyright © 2011-2022 走看看