我的Windows窗体中有一个WebBrowser控件,可以导航到一个网站。 WebBrowser1.DocumentCompleted
事件触发5次,但仍有一些脚本在之后执行。在我可以认为页面已完全加载之前,我必须等待特定元素出现。我试过这个:
While WebBrowser1.Document.GetElementById("username") Is Nothing
Application.DoEvents()
End While
但它似乎冻结了页面上的脚本(页面甚至告诉我它处于脱机状态)。如果您想提供帮助,可以在VB或C#中给我答案。
编辑:我现在正在使用一种方法,如果元素出现,我会使用Timer检查每100毫秒。
答案 0 :(得分:3)
请注意(几乎)使用Application.DoEvents()
的任何解决方案都是 错误解决方案 。不应使用DoEvents()
来保持用户界面的响应。如果您觉得需要使用它,那么您很可能做错了什么。请参阅:Keeping your UI responsive and the Dangers of Application.DoEvents。
相反,请检查DocumentCompleted
内的WebBrowser.ReadyState
property。它会告诉您网页是否已完全加载(但不会考虑异步/延迟的Javascript代码)。
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
'Do stuff.
End If
End Sub