如何等待 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
我的 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