【问题标题】:Simulating a link click webbrowser control vb.net模拟链接点击webbrowser控件vb.net
【发布时间】:2013-07-29 10:13:15
【问题描述】:

我正在尝试让我的应用程序单击 Web 浏览器控件中加载的页面内的链接,但似乎没有发生任何事情。手动单击链接有效(它执行一些 javascript 命令以使用 ajax 加载数据)。我不能简单地转到 URL,因为 HREF 是“#”

到目前为止,我已经尝试了这些方法:

wb.Document.GetElementById("MyElement").InvokeMember("click") wb.Document.GetElementById("MyElement").RaiseEvent("onmousedown") wb.Document.GetElementById("MyElement").RaiseEvent("onclick")

不确定它是否会有所帮助,但是: wb.Document.GetElementById("MyElement").RaiseEvent("onmouseover") 似乎部分模拟了链接上的鼠标悬停

我可以尝试模拟鼠标点击的任何其他选项吗?

谢谢!

【问题讨论】:

  • 您的第一次尝试,只要您的 ID 正确,wb.Document.GetElementById("MyElement").InvokeMember("click") 应该可以工作。发布链接的html
  • 是的,应该。但由于某种原因,它没有。 :)
  • 必须尝试将链接作为 HtmlElementCollection 获取? Dim links As HtmlElementCollection = wb.Document.GetElementsByTagName("a")... for each link -> link.InvokeMember("click")
  • 当我尝试以这种方式声明“链接”时收到此消息:Unable to cast object of type 'System.Windows.Forms.HtmlElementCollection' to type 'mshtml.HTMLElementCollection'.
  • 尝试For Each link In wb.Document.GetElementsByTagName("a") 而不声明“链接”对象并绕过错误。但是仍然没有触发点击事件。

标签: vb.net webbrowser-control raiseevent invokemember


【解决方案1】:

我有同样的问题。什么都行不通; RaiseEvent、Document.GetElementById(oLink.Id).InvokeMember("click")等

最后我通过循环遍历 Document.Links HTMLElementCollection 找到了链接;然后做了一个 link.Focus 和一个愚蠢的 SendKeys.Send("{ENTER}")。这行得通!见下文:

        Dim bFound As Boolean = False
        Dim oLink As HtmlElement = Nothing

        For Each oLink In wbExample.Document.Links
            If oLink.InnerText IsNot Nothing _
            AndAlso oLink.InnerText.ToString.Trim = "12345" Then
                bFound = True
                Exit For
            End If
        Next

        If bFound = False Then
            Throw New Exception("Big time lameness; can't find the link.")
        End If

        oLink.Focus()
        SendKeys.Send("{ENTER}")

【讨论】:

    【解决方案2】:

    我遇到了同样的问题...这行得通。

    For Each Mylink As HtmlElement In WebBrowser1.Document.Links
        If Mylink.InnerText.Contains("SomeTextToSearchFor") Then
            WebBrowser1.Navigate(Mylink.GetAttribute("href"))
        End If
    Next
    

    【讨论】:

      【解决方案3】:

      首先,这是我第一次在任何网站上对提交的问题进行回复。 我遇到了同样的问题,并根据之前的帖子提出了以下问题,至少在我的情况下有效并且避免了使用 sendkeys:

      Dim oLink As HtmlElement = Nothing
      
      For Each oLink In WebBrowser1.Document.Links
          If oLink.InnerText IsNot Nothing _
             AndAlso oLink.InnerText.ToString.Trim = "TextToSearchFor" Then
              oLink.InvokeMember("click")
              Exit For
          End If
      Next
      

      如果我试图访问的链接有一个与之关联的 ID,我认为解决方案会更简单,不需要循环,但既然没有,它就是这样。希望这对其他人有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多