c#抓取网页数据(IE浏览页面何时才算是真正的加载完毕?(图))
优采云 发布时间: 2021-12-21 14:04c#抓取网页数据(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定时器设置为可用