如何使用 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 以编程方式单击链接元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将带有证书链的 pfx 导入证书存储区?

如何通过单击事件以编程方式显示/隐藏操作栏项目

如何以编程方式单击 JavaScript 中的元素?

如何以编程方式单击剑道树视图节点[关闭]

如何以编程方式单击 WPF 中的按钮?

如何使用javascript以编程方式(单击按钮)为django-select2字段设置值?