【关于WebBrowser1.Busy~~~~~~~~~~~】请问VB程序执行太快了,怎么办。
--------------------编程问答-------------------- 自己试了一个下午,没搞出来,请大家帮忙,不好意思,谢谢 --------------------编程问答-------------------- WebBrowser1.Document.getelementbyID("Submit").ClickWebBrowser1.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事件才可以 --------------------编程问答--------------------
--------------------编程问答-------------------- jiangsheng
'试试声明一个全局变量:
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
(蒋晟) 大哥,帮忙看看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 , 基础类