如何使用 HTMLElement 以编程方式单击链接元素?
Posted
技术标签:
【中文标题】如何使用 HTMLElement 以编程方式单击链接元素?【英文标题】:How to click a link element programmatially with HTMLElement? 【发布时间】:2011-07-15 15:00:27 【问题描述】:我正在做一个自动化程序。我将网页加载到我的 Windows 窗体中并将其加载到 WebBrowser 控件中。然后,我需要以编程方式单击 WebBrowser 中的链接。我怎样才能做到这一点?例如:
<a href="http://www.google.com">Google Me</a>
<a href="http://www.facebook.com" id="fbLink">Facebook Me</a>
以上是两种不同的条件。第一个元素没有id
属性,而第二个元素有。关于如何以编程方式单击每个的任何想法?
【问题讨论】:
以编程方式点击是什么意思? 程序会自动点击链接。以编程方式点击意味着它被程序点击,但未被用户点击 【参考方案1】:您必须首先通过其 ID 或其他过滤器找到您的元素:
htmlElement fbLink = webBrowser.Document.GetElementByID("fbLink");
并模拟“点击”:
fbLink.InvokeMember("click");
通过内部文本查找链接的示例:
HtmlElement FindLink(string innerText)
foreach (HtmlElement link in webBrowser.Document.GetElementsByTagName("a"))
if (link.InnerText.Equals("Google Me"))
return link;
【讨论】:
我无法在 axwebbrowser 事件下实现此代码。我尝试使用断点对其进行调试,但我发现它会自动停止在“foreach(webBrowser.Document.GetElementsByTagName(“a”)中的 HtmlElement 链接)”处。你知道发生了什么事吗? mshtml.HTMLDocument htm = (mshtml.HTMLDocument)axWebBrowser1.Document; foreach (htm.getElementsByTagName("a") 中的 HtmlElement 链接) if (link.InnerText.Equals("Advanced search")) MessageBox.Show("yea!!"); 它的旧帖子仍然很老,我想知道为什么我总是将webBrowser.Document
作为null
以及如何处理DocumentCompleted
事件。【参考方案2】:
你需要一种方法来自动化浏览器。
一种方法是使用 Watin (https://sourceforge.net/projects/watin/)。它允许您编写一个通过方便的对象模型控制浏览器的 .Net 程序。主要用来写网页的自动化测试,也可以用来控制浏览器。
如果您不想以这种方式控制浏览器,那么您可以编写一个包含在页面上的 javascript 来执行点击,但我怀疑这就是您所追求的。
【讨论】:
感谢您的回复,符文。但是,我正在使用 axWebBrowser 自己编写自动化功能。但我面临点击链接的问题:( @DEN 如果这样一个简单的任务是一个问题,那么使用库是一个强有力的论据。 不确定这是否曾经是 watin 的域,但现在已经不是了。它现在只位于watin.sourceforge.net/index.html 这个答案中的链接导致一些人提供快速致富..当前链接sourceforge.net/projects/watin 这是一个六年前的答案,所以我不确定它是否相关,但无论如何我修复了链接。谢谢!以上是关于如何使用 HTMLElement 以编程方式单击链接元素?的主要内容,如果未能解决你的问题,请参考以下文章