webbrowser局部刷新完成的问题

本文探讨了一种在使用Web自动化工具时遇到的挑战:如何确保在网页刷新完成后立即读取数据,避免读取到刷新前的数据。通过分析代码逻辑,解释了为何在实际执行中数据读取发生在刷新之前,并提出了可能的原因和解决方案,旨在帮助开发者优化Web自动化流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我写了这样一个程序,用webbrowser加载一个网页,然后定时运行网页中的javascript脚本,局部刷新。

我想在刷新一完成就调用另外一个函数,来读取网页中的数据。用了一个webBrowser1.StatusTextChanged这个事件

当webBrowser1.StatusText=="完成"时,base.Invoke一个读取数据的函数来读数

由于网页更新的速度非常快,程序中间最好不间断的刷新然后读取。

理想是这样的,但是程序写好的时候,我发现读取出来总是那次刷新之前的网页数据,也就是说每次定时函数起来以后,先读了网页的数据,然后网页才刷新的。我不知道这是为什么。

以下是我写的部分代码,希望各位大哥指点一下迷津:

Code Snippet

 

        private void refresh()
        {
            HtmlDocument document;
            if (webBrowser1.DocumentTitle.StartsWith("www.idcsds.com"))
            {
                document = webBrowser1.Document.Window.Frames[0].Document;
                document = document.Window.Frames[2].Document;
                document.InvokeScript("reload");
            }
        }

 

refresh是刷新函数,有定时器定时刷新。调用这个函数来刷新。

然后我想的是,刷新的时候webBrowser1.StatusText就会改变,那么我又写了

Code Snippet

       

        private delegate void aa_d();
        void webBrowser1_StatusTextChanged(object sender, EventArgs e)
        {
            DateTime dt = DateTime.Now;
            richTextBox1.Text += start.ToString() + "  " + dt.ToLongTimeString() + ":" + dt.Millisecond + "   " + webBrowser1.StatusText + "\n";
            toolStripStatusLabel1.Text = webBrowser1.StatusText;
            if (webBrowser1.StatusText=="完成")
            {
                dt = DateTime.Now;
                richTextBox1.Text += start.ToString() + "  " + dt.ToLongTimeString() + ":" + dt.Millisecond + "   开始读取数据...." + "\n";
                base.Invoke(new aa_d(getDate));
            }
        }

 

其中getDate是一个读取网页中内容的函数,在这里省略了。

这段代码看起来应该是先刷新,再通过webBrowser1_StatusTextChanged来调用读取数据的函数,但是实际的执行效果是先读取的数据,才document.InvokeScript("reload");的,也就是仿佛是先读完了数据,程序才开始调用reload这个函数,然后才开始刷新的,不知道是不是InvokeScript这个东西有执行上的延时?我能不能获得这个InvokeScript什么时候开始调用的,或者已经调用了的状态呢?

谢谢


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值