zoukankan      html  css  js  c++  java
  • WebBrowser控件判断完全加载中DocumentCompleted和Navigated的关系

    WebBrowser控件判断完全加载使用DocumentCompleted是有问题的,所以有人提出可以使用判断DocumentCompleted的次数和Navigated次数完全相等的方法判断是否完全加载

    并提出每次都会Navigated在DocumentCompleted之前执行,

    此方案在本人测试后发现此两事件没有必然关系,并且也没先后次序

    测试原理:

    定义2个全局变量用于记录两事件次数,并使用一个计时器,即时判断当前两全局变量

    如果最后两个值不相等,那么两事件不是同时必然发生,

    如果出现同一时刻 DocumentCompleted的次数大于Navigated,那么前者就不一定是在Navigated之后执行了,不能确定两者的顺序关系

    测试代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;
     
    using System.Configuration;
    using System.Web;
    using System.Net;
    using System.Net.Sockets;
    using System.IO;
    using System.Text.RegularExpressions;
     
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
     
    using mshtml;
     
    using SHDocVw;
     
    namespace TestCrass
    {
        public partial class Form5 : Form
        {
            System.Timers.Timer time = new System.Timers.Timer();
     
            int qunue = 0;//当前轮次
            int ced = 0;//DocumentCompleted次数
            int ned = 0;//Navigated次数
            int ning = 0;//Navigating次数
            public Form5()
            {
                InitializeComponent();
                time.Interval = 10;
                time.Enabled = true;
                time.Elapsed += new System.Timers.ElapsedEventHandler((ss, ee) => { button1_Click(ss,ee); });
     
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
               
                Invoke((ThreadStart)delegate()
              {
               //此刻ced比ned大,说明DocumentCompleted事件触发次数大于Navigated,所以Navigated可能后发生
                    if (ned < ced)
                    {
                        label5.Text = "第"+qunue.ToString()+"次有问题"+ned.ToString()+".."+ced.ToString();
                    }
                    
                });
     
            }
     
     
     
            private void Form5_Load(object sender, EventArgs e)
            {
                webBrowser1.Navigate("http://item.taobao.com/item.htm?id=21926784253");
            }
     
            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                ced++;
                label4.Text = "ced" + ced.ToString();
                if (webBrowser1.DocumentText.Contains("无法显示该网页") || webBrowser1.DocumentText.Contains("已取消") || webBrowser1.DocumentText.Contains("可以尝试以下操作"))
                {
                    webBrowser1.Refresh();
                    return;
                }
                //time.Enabled = true;
                //button1_Click(null, null);
     
     
            }
     
            private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
            {
                ned++;
                label3.Text = "ned" + ned.ToString();
            }
     
            private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
            {
                ning++;
                qunue++;
                label1.Text = "qunue" + qunue.ToString();
                label2.Text = "ning" + ning.ToString();
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                webBrowser1.Navigate(textBox1.Text);
     
            }
     
            private void button3_Click(object sender, EventArgs e)
            {
                ced = 0;
                ned = 0;
                ning = 0;
                qunue = 0;
                label1.Text = "";
                label2.Text = "";
                label3.Text = "";
                label4.Text = "";
            }
        }
    }

    测试淘宝,如之前的错误结论,可以通过测试,

    捕获

    找个复杂点的网站 www.163.com

    测试

    捕获2

    结果是Navigated次数才33次,还少1次,所以据此说明,之前的他人说法是不对的

    据此方法来判断是否加载完也是不对的,

    通过多方查找

    有一种方法可以完全判断是否加载完成:

    正在测试中

  • 相关阅读:
    java 无符号byte转换
    MySQL分区总结
    eclipse @override注解出错
    git 利用hook 实现服务器自动更新代码
    Centos 安装mysql
    Centos Python3安装共存
    chromedriver 代理设置(账号密码)
    PyQt5整体介绍
    python图片云
    PyPt5 浏览器实例
  • 原文地址:https://www.cnblogs.com/sung/p/2849059.html
Copyright © 2011-2022 走看看