当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,