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

How to wait for an HtmlElement to appear in a WebBrowser in .NET

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

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

但它似乎冻结了页面上的脚本(页面甚至告诉我它处于离线状态)。如果你想帮忙,你可以用 VB 或 C# 给我你的答案。

编辑:我现在使用的方法是使用计时器每 100 毫秒检查一次元素是否出现。

请注意 (差不多) 任何使用 Application.DoEvents() 的解决方案都是 糟糕的解决方案DoEvents() 不应用于保持用户界面响应。如果您觉得需要使用它,那么您很可能做错了什么。参见:Keeping your UI responsive and the Dangers of Application.DoEvents.

而是检查 DocumentCompleted 中的 WebBrowser.ReadyState property。它会告诉您网页是否已完全加载(但是 NOT 会考虑 asynchronous/delayed 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