当前位置:编程学习 > VB >>

【关于WebBrowser1.Busy~~~~~~~~~~~】请问VB程序执行太快了,怎么办。

--------------------编程问答-------------------- 自己试了一个下午,没搞出来,请大家帮忙,不好意思,谢谢 --------------------编程问答-------------------- WebBrowser1.Document.getelementbyID("Submit").Click
       WebBrowser1.Document.getelementbyID("Upload").Click
       
       Sleep 2000
       While WebBrowser1.Busy
         DoEvents
         Sleep 3000
       Wend
--------------------编程问答-------------------- 这样的话,CPU会一直100%,基本动不了哦。不过我昨天下午我找到另外一个这样的一个句子

While WebBrowser1.Busy 
        DoEvents 
Wend  
'====在DoEvents下面不加Sleep 3000了, 这样的情况下,出现的问题还是在程序执行太快,WebBrowser1.Busy都来不及反应出它的Busy就又重新执行上面的程序了。郁闷。====================================    

--------------------编程问答-------------------- 用timer吧

又是一个sleep和webbrowser的问题 --------------------编程问答-------------------- 要等DocumentComplete事件才可以 --------------------编程问答--------------------


'试试声明一个全局变量:
dim myBusy as boolean

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    if pDisp=WebBrowser1.object then
        myBusy=true
    enf if
end sub

Private Sub Command2_Click()
    While True
        Set pp = WebBrowser1.Document.getelementbyID("Submit")
        If Not pp Is Nothing Then
            WebBrowser1.Document.getelementbyID("Submit").Click
            WebBrowser1.Document.getelementbyID("Upload").Click
            myBusy=false
            While not myBusy
                DoEvents
            Wend 
        Else
            MsgBox "当前没有可供执行的数据!程序已经暂停!"
            Exit Sub
        End If
    Wend
End Sub

--------------------编程问答-------------------- jiangsheng
 
(蒋晟)   大哥,帮忙看看http://topic.csdn.net/u/20090629/10/49aa97e5-9aa7-417c-bda8-704185b3c2ff.html

谢谢!! --------------------编程问答-------------------- To: vbman2003

您好,关于设置这个myBusy我看不明白(我刚接触VB的,对不起不好意思)

按照您的程序,在Command2_Click()之中,有下面的语句

            myBusy=false
            While not myBusy
                DoEvents
            Wend 

这样的话,每次按下,不就是把myBusy直接的赋值为false了么,那么WHILE循环不就开始循环了么,还需要之前WebBrowser1_DocumentComplete语句么?是不是应该去掉myBusy=false?

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    if pDisp=WebBrowser1.object then
        myBusy=true
    enf if
end sub

我现在的疑问是: VB的这个程序执行实在太快,因为当程序实现点击完成【提交数据】的时候,浏览器可能需要一些时间来把数据传输上去,于是反应出Busy的状态,而此时VB程序是不停的执行下去了的。相对于Busy, 那么DocumentComplete这个状态是否也能及时反应出来呢,而不会出现类似的情况呢?


--------------------编程问答-------------------- 在未完成提交之前,是不会产生对应的DocumentComplete事件的

在DocumentComplete事件里判断一下URL,当URL为预期的提交后网址时就可以判断为提交完成.

没必要在那里等.

五楼蒋老大早就说在那里摆半天了. --------------------编程问答-------------------- 感谢您的回复,能不能给我说下怎么写呢。。。我查了好多资料,还是不清楚。。。我大概知道您的意思但是还是很模糊很模糊。


--------------------编程问答--------------------
Option Explicit
  
Private Const sURL As String = "http://www.google.cn/"
Private Const sURLComplet As String = "http://www.google.cn/search?"    '结果页所包含的URL
  
Private Sub Form_Load()
    WebBrowser1.Navigate sURL
End Sub
  
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    If URL = sURL Then
        Dim Ele As Object
           
        Set Ele = WebBrowser1.Document.getElementsByName("q")        '根据Name取得对象
        Ele(0).Value = "嗷嗷叫的老马"
        
        Set Ele = WebBrowser1.Document.getElementsByName("btnG")  '根据Name取得对象
        Ele(0).Click
    End If
    If InStr(1, URL, sURLComplet, vbTextCompare) > 0 Then
        MsgBox "搜索OK"
    End If
End Sub

窗体上放一个WebBrowser1. --------------------编程问答-------------------- 因为你是用Command2_Click来完成提交, 所以声明myBusy这个全局变量,它标志网页当前状态
所以提交时设置myBusy=false,当提交完成时,WebBrowser1_DocumentComplete事件中返回myBusy=true
你代码中触发了二个Click,如果二个Click分别都是提交数据,而且都要刷新网页,那么可能如下这样更好:
  myBusy=false     '标志开始提交
    WebBrowser1.Document.getelementbyID("Submit").Click
    While not myBusy    '等待提交完成
        DoEvents
    Wend             
    myBusy=false     '标志开始提交
    WebBrowser1.Document.getelementbyID("Upload").Click
    While not myBusy   ''等待提交完成
        DoEvents
    Wend 

不知道我理解的对不对....

  --------------------编程问答-------------------- 感谢楼上2位。 关于2个按钮,具体是下面的情况:
【全选】: 就是平时的checkbox打钩了。它只是执行选中数据的功能,不提交数据。
【提交数据】: 把上面选中的数据提交。这时候,网页才会出现提交的状态(从busy到complete)

按照vbman2003您的以下的程序

            WebBrowser1.Document.getelementbyID("Submit").Click
            WebBrowser1.Document.getelementbyID("Upload").Click
            myBusy=false
            While not myBusy
                DoEvents
            Wend 
我大概明白您的程序的意思了,呵呵~~~大家看看我这样解释对不

1. 整了一个全部变量myBusy,当我打开要开始处理数据的网页的时候,会触发一次WebBrowser1_DocumentComplete()时间,那么这个时候,myBusy=True!!!记住,是True!!

2. 接着。我很高兴的按下了VB窗口上的按钮Command2_Click(), 开始执行自动操作了。这个时候关键部分来了!!
我尝试说下,注释在语句后面。。。。
            WebBrowser1.Document.getelementbyID("Submit").Click '点下【全选】
            WebBrowser1.Document.getelementbyID("Upload").Click '点下【提交数据】
            myBusy=false '把 myBusy 赋值为 False了~~~~下面开始循环,哈哈
            
While not myBusy 
                DoEvents                                 
 Wend 

 '下面都是在这个DoEvents里面循环了。。。。嗯嗯,除非,除非发生点什么变化。
 例如出现 myBusy又变化为true的情况,要出现True的情况,就是再一次出现    WebBrowser1_DocumentComplete(),于是跳出这个循环了。。。

应该就是这样的了。

嗯。晚上就试试。。。呵呵 谢谢

不过我担心的问题是
1. 这个循环DoEvents会不会导致CPU资源占用给100%了(非常严重的担心)。
2. 我担心这个myBusy的状态的变化是否如我们希望的那样 (我对这个VB 赋值概念模糊的很)





--------------------编程问答-------------------- 尽量不用DoEvents,把程序写成异步的比较好。 --------------------编程问答-------------------- 高深啊,学习
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,