现在的网页有相当一部分是采用了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设置为可用

用C#抓取AJAX页面的内容的更多相关文章

  1. C#抓取AJAX页面的内容

    原文 C#抓取AJAX页面的内容 现在的网页有相当一部分是采用了AJAX技术,所谓的AJAX技术简单一点讲就是事件驱动吧(当然这种说法可能很不全面),在你提交了URL后,服务器发给你的并不是所有是页面 ...

  2. php抓取ajax页面返回图片。

    要抓取的页面:http://pic.hao123.com/ 当我们往下滚动的时候,图片是用ajax来动态获取的.这就需要我们仔细分析页面了. 可以看到,异步加载的ajax文件为: http://pic ...

  3. PHPcurl抓取AJAX异步内容(转载)

    PHPcurl抓取AJAX异步内容 其实抓ajax异步内容的页面和抓普通的页面区别不大.ajax只不过是做了一次异步的http请求,只要使用firebug类似的工具,找到请求的后端服务url和传值的参 ...

  4. 如何让搜索引擎抓取AJAX内容? 转

    越来越多的网站,开始采用"单页面结构"(Single-page application). 整个网站只有一张网页,采用 Ajax 技术,根据用户的输入,加载不同的内容. 这种做法的 ...

  5. 如何让搜索引擎抓取AJAX内容?

    越来越多的网站,开始采用"单页面结构"(Single-page application). 整个网站只有一张网页,采用Ajax技术,根据用户的输入,加载不同的内容. 这种做法的好处 ...

  6. scrapy实战4 GET方法抓取ajax动态页面(以糗事百科APP为例子):

    一般来说爬虫类框架抓取Ajax动态页面都是通过一些第三方的webkit库去手动执行html页面中的js代码, 最后将生产的html代码交给spider分析.本篇文章则是通过利用fiddler抓包获取j ...

  7. 利用curl抓取远程页面内容

    最基本的操作如下 $curlPost = 'a=1&b=2';//模拟POST数据$cookie_file    =    tempnam('./temp','kie');//可选,保存ses ...

  8. php curl抓取远程页面内容的代码

    使用php curl抓取远程页面内容的例子. 代码如下: <?php /** * php curl抓取远程网页内容 * edit by www.jbxue.com */ $curlPost = ...

  9. Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...

随机推荐

  1. 51nod 1183 编辑距离(dp)

    题目链接:51nod 1183 编辑距离 #include<cstdio> #include<cstring> #include<algorithm> using ...

  2. c#网络通信框架networkcomms内核解析之十 支持优先级的自定义线程池

    NetworkComms网络通信框架序言 本例基于networkcomms2.3.1开源版本  gplv3协议 如果networkcomms是一顶皇冠,那么CommsThreadPool(自定义线程池 ...

  3. mssqlserver 分日志(日志文件过大)

    ALTER DATABASE HexStudyDB3Reader SET RECOVERY SIMPLE WITH NO_WAIT ALTER DATABASE HexStudyDB3Reader S ...

  4. JavaScript的this用法

    1. 全局代码中的this this在全局上下文中,它的值是全局对象本身(Global Object),在浏览器中就是Window  Object,如下图示. 看下面几个例子: //Global sc ...

  5. Python 初级项目:远程操控电脑(三)-极客学院

    http://www.jikexueyuan.com/course/2376_1.html

  6. OC之0801

    1,字符串 字符串的创建:两种常用初始化方式 NSString *str=[[NSString alloc]initWithFormat:@"i am a boy"]; NSStr ...

  7. sqoop的增量导入(increment import)

    1.import增量导入的官方说明

  8. 《C++primer》v5 第1章 开始 读书笔记 习题答案

    从今天开始在博客里写C++primer的文字.主要以后面的习题作业为主,会有必要的知识点补充. 本人也是菜鸟,可能有不对之处,还望指出. 前期内容可能会比较水. 1.1略 1.2略 1.3 cin和c ...

  9. reverse-XNUCA-babyfuscator

    上一次线上赛的一道题目 链接:http://pan.baidu.com/s/1qY9ztKC 密码:xlr2 这是一道代码混淆的题目,因为当时还不知道angr这样一个软件,所以我就用了自己的一种思路 ...

  10. 【转】LokiJS:纯JavaScript实现的轻量级数据库

    原文转自:http://www.html5cn.org/article-7091-1.html LokiJS一个轻量级的面向文档的数据库,由JavaScript实现,性能高于一切.目的是把JavaSc ...