苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4825|回复: 5

[其他] 关于webbrowse.Refresh的一个问题

[复制链接]
发表于 2013-8-22 14:01:55 | 显示全部楼层 |阅读模式
  1.         private void webBrowser1_Completed(object sender, WebBrowserDocumentCompletedEventArgs e)
  2.         {
  3.             if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return;            
  4.             MessageBox.Show("完成加载");
  5.             bt3_Click(sender, e);           
  6.         }
  7. private void bt3_Click(object sender, EventArgs e)
  8.         {
  9.             textBox1.Text = "";
  10.             string url;
  11.             HtmlElementCollection elemcoll = webBrowser1.Document.GetElementsByTagName("img");
  12.             foreach (HtmlElement elem in elemcoll)
  13.             {
  14.                 url = elem.GetAttribute("src");
  15.                 textBox1.Text += url;
  16.                 textBox1.Text += "\r\n";
  17.             }
  18.             url = textBox1.Text;
  19.             string ex = "lg.php";
  20.             if (url.IndexOf(ex) == -1)
  21.             {
  22.                 webBrowser1.Refresh();
  23.             }         
  24.         }
复制代码
当网页加载完成后会进入webBrowser1_Completed,执行bt3_Click(sender, e)这条语句,bt3_Click中判断是否存在名字为lg.php的图片,如果有就不做任何操作,如果没有则会对该网址进行刷新。
但是刷新后进入webBrowser1_Completed后,只执行if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return;
不执行MessageBox.Show("完成加载")及后面的语句就跳出去了,不清楚为什么?
请大家帮忙看看



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-8-22 14:16:11 | 显示全部楼层
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return;  

你理解这句的意思吗?就是说如果条件成立就执行return,就是直接返回不再向下执行,
可以换成这种写法
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete)  

return;

意思是一样的。下面的不执行说明上面的条件成立了。
 楼主| 发表于 2013-8-22 15:33:32 | 显示全部楼层
站长苏飞 发表于 2013-8-22 14:16
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return;  

你理解这句的意思吗?就是说 ...
  1. if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return;            
  2. MessageBox.Show("完成加载");
复制代码
不就是说webBrowser1如果加载没有完成则直接返回,如果加载完成了,则显示“完成加载”的message么。
它肯定是会加载完成的啊。为什么我在MessageBox.Show("完成加载");后加上webBrowser1.Refresh(); 它却只
刷新一次呢?不再继续刷新了?

发表于 2013-8-22 16:24:30 | 显示全部楼层
lanxinwoaini 发表于 2013-8-22 15:33
不就是说webBrowser1如果加载没有完成则直接返回,如果加载完成了,则显示“完成加载”的message么。
它 ...

你自己调试看一下就明白了吧。
 楼主| 发表于 2013-8-22 16:34:54 | 显示全部楼层
站长苏飞 发表于 2013-8-22 16:24
你自己调试看一下就明白了吧。

一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,Webbrowser控件会通过触发DocumentCompleted事件来指示网页加载完毕。但当加载的网页包含frame时,可能会多次触发该事件,如何才能够判断该网页已经完全加载完毕?
发表于 2013-8-22 17:05:39 | 显示全部楼层
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-27 20:33

© 2014-2021

快速回复 返回顶部 返回列表