webBrowser判断网页加载问题
做个VB程序,点击一个BUTTON打开一个页面,如果该页面成功加载,则无动作,如果未成功加载(不管是服务器忙还是什么的)就在指定的时间刷新,知道打开为止下面为代码,
指定时间刷新不会,请牛人指点,在线等待
public partial class Form1 : Form
{
int navigateCount = 0;
public Form1()
{
InitializeComponent();
}
private void button1_Click_1(object sender, EventArgs e)
{
webBrowser1.Navigate(new Uri("http://www.scjj.gov.cn:8635/login.aspx "));
}
private void groupBox4_Enter(object sender, EventArgs e)
{
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
this.navigateCount++; // 一个页面里可能有多个请求, 比如说frame页
}
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
this.navigateCount--;
if (0 == this.navigateCount && this.webBrowser1.Url != null)
{
//无操作
}
else
{
webBrowser1.Refresh();
}
}
}
} --------------------编程问答-------------------- 真心不像是VB代码 ? 怎么看都是C#啊. --------------------编程问答-------------------- 给你一个正确的思路 , 具体代码也不难,我这里就不写了 ,你自己看着拿去修改就行.
在正常情况下点击button ,打开页面 ,然后再页面加载的同时和页面加载完毕后,这两个时间段,去读取网站服务器的信息, 利用http请求,判断响应的http 标头 ,部分代码如下:
try
{
// 利用http请求,判断响应的http 标头 .
HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(this.webBrowser1.Url);
hwr.CookieContainer = new CookieContainer();
HttpWebResponse hwrsp = (HttpWebResponse)hwr.GetResponse();
WebHeaderCollection webHead = hwrsp.Headers;
if (webHead.HasKeys())
{
//此处代表网站正常访问 ;
return;
}
else
{
// 此处执行循环你想要的刷新代码,此处刷新应该是重新访问页面,调用,webBrowser1.Navigate();
//,而不是写成 webBrowser1.Refresh(); 具体区别是因为会在某种情况下产生不符合本意的运行结果.
}
}
catch
{
//此处亦可添加重新访问网站代码;.
}
最后说下关于http标头内的内容,是可以根据key 和value值读取出来的 .
例如百度的http标头:
Http标头信息:
Connection Keep-Alive
Content-Length 9777
Cache-Control private
Content-Type text/html;charset=gbk
Date Sat, 08 Dec 2012 13:32:29 GMT
Expires Sat, 08 Dec 2012 13:32:29 GMT
P3P CP=" OTI DSP COR IVA OUR IND COM "
Set-Cookie BAIDUID=3391E85B09E108DE569454170ABF5817:FG=1; expires=Sat, 08-Dec-42 13:32:29 GMT; path=/; domain=.baidu.com
Server BWS/1.0
Cookies信息:
BAIDUID 3391E85B09E108DE569454170ABF5817:FG=1
Http状态维护版本 0
Cookies的发出时间 2012-12-08 21:33:20
Cookies的过期时间 2042-12-08 21:32:29
如此亦可以看出,webHead.HasKeys() 判断起来并不能做到足够的精准,而网站的开发者亦是可以自定义开发http头的信息的,故而还需要具体根据网站的特性,以百度为例子,可以具体去判断Connection , path=/; domain=.baidu.com ,以及Cookies的发出时间是不是我访问网站的时候发出的等等信息,来精确判断加载的结果. webHead.GetKey();webHead.Get();webHead.allkeys;webHead.GetValues() ;等等诸多方法和属性都是你可以利用的,具体你自己再改改吧,那有就可以完善了.
补充:.NET技术 , C#