模拟链接点击webbrowser控件vb.net

Posted

技术标签:

【中文标题】模拟链接点击webbrowser控件vb.net【英文标题】:Simulating a link click webbrowser control 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") 而不声明“链接”对象并绕过错误。但是仍然没有触发点击事件。 【参考方案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,我认为解决方案会更简单,不需要循环,但既然没有,它就是这样。希望这对其他人有帮助。

【讨论】:

以上是关于模拟链接点击webbrowser控件vb.net的主要内容,如果未能解决你的问题,请参考以下文章

c# webBrowser1 模拟点击超链接后,如何获取连接页面的信息(ajax ),需要不弹出窗口

delphi中WebBrowser控件怎么模拟点击网页框架中的按钮button?

如何使用 WebBrowser 控件模拟鼠标单击

vb 中WebBrowser1打开网址点击

webkit 模拟点击 winform

webbreswer