模拟链接点击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 ),需要不弹出窗口