请问怎么让webBrowser完全加载完毕后,再执行程序?

id8588 2013-06-26 09:25:44

webbrowser打开一个网址,然后再检索里面的HTML,

webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

它什么会执行两次呢? 第一次检索结果不满意,网页里有JS得完全让页面加载完毕,第二次才能得到想要的结果~~


请问怎么让webBrowser完全加载完毕后,再执行程序呢?
...全文
655 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
本拉灯 2013-06-26
  • 打赏
  • 举报
回复
引用 3 楼 id8588 的回复:
[quote=引用 1 楼 wyd1520 的回复:] [quote=引用 楼主 id8588 的回复:] webbrowser打开一个网址,然后再检索里面的HTML, webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 它什么会执行两次呢? 第一次检索结果不满意,网页里有JS得完全让页面加载完毕,第二次才能得到想要的结果~~ 请问怎么让webBrowser完全加载完毕后,再执行程序呢?
webBrowser——DocumentCompleted就是有多少个调用JS或页面他就执行多少次。你要想调一次的就用 axWebBrowser用另一种Active控件才有这个调用当前页所调用的页面与JS加载完后执行,去codeproject找这个程序上面有列子[/quote] 还有个问题,使用Thread.Sleep()方法,想让它停顿下加载剩下的页面,为什么会整个页面都停顿了,就是无法继续加载呢[/quote] Sleep是让当前的线程睡眠。线程停了当然在此线程内的方法全停了呀
id8588 2013-06-26
  • 打赏
  • 举报
回复
引用 2 楼 lizhi3186575 的回复:
WebBrowser载入一个页面后DocumentCompleted事件会执行两次,但这两次的ReadyState状态不一样,分别是Intercative和Complete。而MSDN对这两种状态值的解释是:Complete该控件已完成新文档及其所有内容的加载;Interactive该控件已经加载足够的文档以允许有限的用户交互,比如单击已显示的超链接。由此可见,实际上DocumentCompleted事件会在Interactive状态和Complete状态各调用一次,那么我们可以根据我们的需要来判断到底需要那一次 下面文章中介绍了详细的解决方案: http://www.cnblogs.com/rchlz/archive/2009/02/27/1399274.html 并不需要使用Active控件,
还有其他解决方案吗,定时器不知道有没有用
id8588 2013-06-26
  • 打赏
  • 举报
回复
引用 1 楼 wyd1520 的回复:
[quote=引用 楼主 id8588 的回复:] webbrowser打开一个网址,然后再检索里面的HTML, webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 它什么会执行两次呢? 第一次检索结果不满意,网页里有JS得完全让页面加载完毕,第二次才能得到想要的结果~~ 请问怎么让webBrowser完全加载完毕后,再执行程序呢?
webBrowser——DocumentCompleted就是有多少个调用JS或页面他就执行多少次。你要想调一次的就用 axWebBrowser用另一种Active控件才有这个调用当前页所调用的页面与JS加载完后执行,去codeproject找这个程序上面有列子[/quote] 还有个问题,使用Thread.Sleep()方法,想让它停顿下加载剩下的页面,为什么会整个页面都停顿了,就是无法继续加载呢
人生导师 2013-06-26
  • 打赏
  • 举报
回复
WebBrowser载入一个页面后DocumentCompleted事件会执行两次,但这两次的ReadyState状态不一样,分别是Intercative和Complete。而MSDN对这两种状态值的解释是:Complete该控件已完成新文档及其所有内容的加载;Interactive该控件已经加载足够的文档以允许有限的用户交互,比如单击已显示的超链接。由此可见,实际上DocumentCompleted事件会在Interactive状态和Complete状态各调用一次,那么我们可以根据我们的需要来判断到底需要那一次 下面文章中介绍了详细的解决方案: http://www.cnblogs.com/rchlz/archive/2009/02/27/1399274.html 并不需要使用Active控件,
本拉灯 2013-06-26
  • 打赏
  • 举报
回复
引用 楼主 id8588 的回复:
webbrowser打开一个网址,然后再检索里面的HTML, webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 它什么会执行两次呢? 第一次检索结果不满意,网页里有JS得完全让页面加载完毕,第二次才能得到想要的结果~~ 请问怎么让webBrowser完全加载完毕后,再执行程序呢?
webBrowser——DocumentCompleted就是有多少个调用JS或页面他就执行多少次。你要想调一次的就用 axWebBrowser用另一种Active控件才有这个调用当前页所调用的页面与JS加载完后执行,去codeproject找这个程序上面有列子
id8588 2013-06-26
  • 打赏
  • 举报
回复
引用 6 楼 tcmakebest 的回复:
说是加载一个网页,但里面可以有许多页的,这要看网页是否为框架,有没有嵌套 IFRAME 等, 你应该用 e.Url 来识别是哪一页加载完成了,看情况再执行程序。
恩,谢谢
id8588 2013-06-26
  • 打赏
  • 举报
回复
引用 5 楼 wyd1520 的回复:
[quote=引用 3 楼 id8588 的回复:] [quote=引用 1 楼 wyd1520 的回复:] [quote=引用 楼主 id8588 的回复:] webbrowser打开一个网址,然后再检索里面的HTML, webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 它什么会执行两次呢? 第一次检索结果不满意,网页里有JS得完全让页面加载完毕,第二次才能得到想要的结果~~ 请问怎么让webBrowser完全加载完毕后,再执行程序呢?
webBrowser——DocumentCompleted就是有多少个调用JS或页面他就执行多少次。你要想调一次的就用 axWebBrowser用另一种Active控件才有这个调用当前页所调用的页面与JS加载完后执行,去codeproject找这个程序上面有列子[/quote] 还有个问题,使用Thread.Sleep()方法,想让它停顿下加载剩下的页面,为什么会整个页面都停顿了,就是无法继续加载呢[/quote] Sleep是让当前的线程睡眠。线程停了当然在此线程内的方法全停了呀[/quote] 哦这样,谢谢学习到东西了
tcmakebest 2013-06-26
  • 打赏
  • 举报
回复
说是加载一个网页,但里面可以有许多页的,这要看网页是否为框架,有没有嵌套 IFRAME 等, 你应该用 e.Url 来识别是哪一页加载完成了,看情况再执行程序。

111,094

社区成员

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

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

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