Html GetElementById失败。。只在特定的页面上

Html GetElementById失败。。只在特定的页面上,html,vb.net,Html,Vb.net,我正在尝试在此网站的登录表单中输入信息: 我正在VB.net vs 2015中构建一个windows窗体应用程序,并使用WebBrowser控件。我的WB controls DocumentCompleted事件中有以下代码: Dim PWord As HtmlElement PWord = wb.Document.GetElementById("password") If PWord IsNot Nothing Then PWord.InnerText = "password" El

我正在尝试在此网站的登录表单中输入信息:

我正在VB.net vs 2015中构建一个windows窗体应用程序,并使用WebBrowser控件。我的WB controls DocumentCompleted事件中有以下代码:

Dim PWord As HtmlElement
PWord = wb.Document.GetElementById("password")

If PWord IsNot Nothing Then
    PWord.InnerText = "password"
Else
    MsgBox("fail..Again!")
End If
对于我的生活,我不能确定为什么我不能找到密码字段或电子邮件字段,登录按钮等在这个页面上的ID的。无论我尝试使用哪个元素的ID,我都会收到失败消息


一点背景:我完全失明,使用屏幕阅读器jaws for windows访问我的计算机,因此,如果我真的把这篇文章搞砸了,论坛的错误部分,链接/代码标签的错误使用等等,我深表歉意。

看起来该网站在初始页面加载后异步加载数据。解决方法是在DocumentCompleted事件中启用计时器。勾号处理程序应该是您当前的代码。三秒钟的时间间隔似乎足够了:

Private Sub wb_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles wb.DocumentCompleted
    Timer1.Start()
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim PWord As HtmlElement = wb.Document.GetElementById("password")

    If PWord IsNot Nothing Then
        PWord.InnerText = "password"
    Else
        MsgBox("fail..Again!")
    End If

    Timer1.Stop()
End Sub

@叉车:没有。这是有效的VB.NET代码:嗯。。代码是有效的,我已经用其他页面测试过了,比如Gmail登录页面。。它就是找不到这个元素,在这个页面上…奇怪。。。你的代码看起来不错。不幸的是,我没有访问IDE的权限,因此目前无法测试。我猜这与嵌套在这么多标记中的元素有关,但我自己的HTML体验非常有限。。因为页面似乎没有框架,所以仍然应该通过ID找到它?嵌套的标签和框架都不重要。GetElementById在这两种情况下都应该找到。这样的延迟不是很可靠。。。如果网站继续加载数据,则DocumentCompleted应被多次触发。尝试检查wb.ReadyState=WebBrowserReadyState.Complete或wb.IsBusy=False,然后执行代码并查看其是否有效。如果有,那么它将取代计时器,而且更可靠。或者,您可以使用一个计时器来检查元素是否存在的每一个滴答声。您的解决方案运行良好。我将添加一些检查,因为我同意猜测什么时候打勾不是很优雅,但答案是准确的。谢谢。我非常喜欢@VisualIncent关于不执行Timer1的建议。除非控件存在,否则停止。