我正在尝试从网页中提取链接,但似乎webbrowser无法导航,因此我在webbrowser1.readstate<>处获得无限循环READYSTATE_COMPLETE ...
但是,如果在webbrowser1.readstate<>处创建一个断点readystate_complete,webbrowser在userform中成功导航,代码工作....
有什么想法吗?感谢
Do Until n = num
WebBrowser1.Navigate URL
Do While WebBrowser1.readyState <> READYSTATE_COMPLETE
Loop
If WebBrowser1.readyState = READYSTATE_COMPLETE Then
'code
end if
n = n +1
loop
答案 0 :(得分:3)
您在问题和答案中使用的while
循环是一个busy waiting紧密循环,在等待某事发生时消耗CPU周期是徒劳的。它适用于InternetExplorer
对象(因为后者在其自己的独立进程中运行)。它不适用于进程内WebBrowser
控件,因为您的循环不会抽取Windows消息,这是导航工作所必需的。如果您想坚持使用循环方法,请考虑在循环中放置Sleep 250和DoEvents个调用来缓解繁忙的等待和泵消息。这仍然是not recommended,您应该考虑重新分解代码以使用WebBrowser_DocumentComplete
事件。