c#抓取网页数据(IE浏览页面何时才算是真正的加载完毕?(图))

优采云 发布时间: 2021-12-21 14:04

  c#抓取网页数据(IE浏览页面何时才算是真正的加载完毕?(图))

  当前网页中有相当一部分使用了 AJAX 技术。无论是WebClient还是C#中的HttpRequest,都无法得到正确的结果,因为这些脚本都是在服务端发送后执行的!

  但是我们用IE浏览页面是正常的,所以只有一种解决方法就是使用WebBrowser控件

  但是使用Webbrowser,你会发现在DownloadComplete事件中,你无法知道页面什么时候真正加载了!

  当然,个别带有 Frame 的网页可能会多次触发 Complete。即使你使用counter的方法,也就是在Navigated event++中,在DownloadComplete中进行,JS执行完成后依然无法得到结果。一开始也觉得很奇怪,直到后来GG相关AJAX文章才明白了原委。

  最终的解决方案是使用WebBrowser+Timer解决页面爬行问题

  关键还是页面状态,我们可以使用webBrowser1.StatusText,如果返回“Done”,则表示页面已加载!

  示例代码如下:

  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定时器设置为可用

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线