如何等待HtmlElement出现在.NET中的WebBrowser中

时间:2017-11-04 13:47:42

标签: c# .net vb.net webbrowser-control

我的Windows窗体中有一个WebBrowser控件,可以导航到一个网站。 WebBrowser1.DocumentCompleted事件触发5次,但仍有一些脚本在之后执行。在我可以认为页面已完全加载之前,我必须等待特定元素出现。我试过这个:

While WebBrowser1.Document.GetElementById("username") Is Nothing
    Application.DoEvents()
End While

但它似乎冻结了页面上的脚本(页面甚至告诉我它处于脱机状态)。如果您想提供帮助,可以在VB或C#中给我答案。

编辑:我现在正在使用一种方法,如果元素出现,我会使用Timer检查每100毫秒。

1 个答案:

答案 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