C# WebBrowser如何妥善判断页面加载完毕,包括页面内javascript触发的一些局部刷新

sugarforever 2011-02-23 11:54:16
如题。
网上找到很多方案,包括比较URL,或者对Navigated计数。
有很多实际页面,其中的大量数据是通过Javascript动态加载的。页面中的很多操作,比如登录,删除数据,都是通过ajax的方式实现的。这种情况下,如何判断页面的数据加载完毕最妥当?
高手指点。
下面是一个模拟的场景:
一个页面,打开后触发了DocumentCompleted,页面加载完毕后,其中的javascript开始加载会员信息列表数据,得到服务器端的响应后,动态生成列表的html代码在页面中显示。那么该如何妥善的判断这个过程的完成?
...全文
7842 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
jetable 2013-06-22
  • 打赏
  • 举报
回复
看过些资料,目前我们的系统中也是用webbrowser的,没有找到完美的解决方案。这一类页面只能扩展判断页面加载完成的方式,比如等待多长时间源码没有变化就算加载完成
ldb5736030 2013-06-22
  • 打赏
  • 举报
回复
哈哈 最简单的也是最笨的 也是最有效的 就是设置一个计数器在页面,第一次手动操作,查看全部加载完时的计数器结果,然后在webBrowser1_DocumentCompleted中判断该计数器是否等于加载完的那个,等于则执行不等于go on。此法的应用背景是网站比较稳定,不是三天两头的改变。如果改变了就去手动检查一下,重置计数器即可。
lgs3810 2013-04-29
  • 打赏
  • 举报
回复
引用 17 楼 yanran_hill 的回复:
[Quote=引用 15 楼 visir 的回复:] private void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e) { this.navigateCount++; // 一个页面里可能有多个请求, 比如说frame页 } private void webBrowse…… [/Quote] webBrowser1_DocumentCompleted这个未必靠谱,因为只有第一次加载页面完成后才调用这个委托函数,在加载完以后,在导航到别的URL, 就不会调这个函数了
会调用的。要不你可以show一个消息,然后手动去操作导航,我发现确实会弹出那个消息。
LongBow007 2013-04-25
  • 打赏
  • 举报
回复
顶顶 遇到了同样的问题
miameng 2013-04-16
  • 打赏
  • 举报
回复
这个问题解决了吗??楼主
miameng 2013-04-10
  • 打赏
  • 举报
回复
同求解答啊 。。
crping 2012-09-14
  • 打赏
  • 举报
回复
俺也遇到了这个问题,页内Js的多次请示也会触发DocumentCompleted事件,不知道怎么判断什么时候整个页面加载完的!
yanran_hill 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 visir 的回复:]

private void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
this.navigateCount++; // 一个页面里可能有多个请求, 比如说frame页
}

private void webBrowse……
[/Quote]
webBrowser1_DocumentCompleted这个未必靠谱,因为只有第一次加载页面完成后才调用这个委托函数,在加载完以后,在导航到别的URL, 就不会调这个函数了
liuys00 2011-09-22
  • 打赏
  • 举报
回复
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.ReadyState != WebBrowserReadyState.Complete)
return;
if (e.Url != webBrowser1.Url)
return;

if (webBrowser1.Url.ToString()==“你的那个url”)
{
timer1.Enabled = true;
}
}
void timer1_Tick(object sender, EventArgs e)
{
查看页面内容;

if(内容完整)

这时再执行你要执行的动作;
timer1.Enabled = false;

}
visir 2011-04-27
  • 打赏
  • 举报
回复
private void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
this.navigateCount++; // 一个页面里可能有多个请求, 比如说frame页
}

private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{

this.navigateCount--;
if (0 == this.navigateCount && this.webBrowser.Url != null)
{

}



}
T_long 2011-04-27
  • 打赏
  • 举报
回复
快来人啊……
T_long 2011-04-27
  • 打赏
  • 举报
回复
这个问题怎么解决啊?
Flymorn 2011-04-09
  • 打赏
  • 举报
回复
webBrowser1.Navigate("http://blog.sina.com.cn/");
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);

private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.Document .Url == e.Url )
{
//加载完毕。do something
}
}
剑锋冷月 2011-02-23
  • 打赏
  • 举报
回复
同意sp1234,ajax生成的内容的html代码你在浏览器里根本看不到代码的,ajax什么时候生成html,取决于你写的javascript事件什么时候调用,可以是页面加载完后也可以是没加载完后。
剑锋冷月 2011-02-23
  • 打赏
  • 举报
回复
WebBrowser加载完毕和ajax没关系的。ajax里显示的列表数据的html代码,在WebBrowser里也看不到的。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sugarforever 的回复:]
包括页面中通过ajax方式加载的页面数据也加载完毕
[/Quote]
大多数ajax程序加载数据刷新页面,都是在页面加载完了之后,又启动脚本程序来获取页面补充的部分。如果你取得webbrowser加载状态,此时当然是页面已经加载完了。
wuyq11 2011-02-23
  • 打赏
  • 举报
回复
ajax 执行获取数据无法判断
wuyq11 2011-02-23
  • 打赏
  • 举报
回复
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.ReadyState < WebBrowserReadyState.Complete) return;
}


  • 打赏
  • 举报
回复
执行其中的javascript,跟“页面加载完毕”无法区分。既可以在页面加载过程中去执行javascript,也可以在页面加载完成之后(document的onload之后)才执行javascript。比如说页面中有一个javascript语句是定时器到500豪秒以后开始执行一个javascript过程,如果500毫秒内页面加载完了那么这个过程就是在加载之后执行的,否则就是一边加载一边执行的。

不要把执行javascript看作是页面加载过程。任何javascript程序都是页面上有关脚本代码加载完了然后才能执行的,此时整个页面可能加载完了,也可能没有加载完。
zhushoudong 2011-02-23
  • 打赏
  • 举报
回复
直接在DocumentCompleted的事件中进行判断就行了吧
加载更多回复(4)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧