【问题标题】:How to click a link element programmatially with HTMLElement?如何使用 HTMLElement 以编程方式单击链接元素?
【发布时间】:2011-07-15 15:00:27
【问题描述】:

我正在做一个自动化程序。我将网页加载到我的 Windows 窗体中并将其加载到 WebBrowser 控件中。然后,我需要以编程方式单击 WebBrowser 中的链接。我怎样才能做到这一点?例如:

  1. <a href="http://www.google.com">Google Me</a>

  2. <a href="http://www.facebook.com" id="fbLink">Facebook Me</a>

以上是两种不同的条件。第一个元素没有id 属性,而第二个元素有。关于如何以编程方式单击每个的任何想法?

【问题讨论】:

  • 以编程方式点击是什么意思?
  • 程序会自动点击链接。以编程方式点击意味着它被程序点击,但未被用户点击

标签: c# asp.net html webforms


【解决方案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
  • 这是一个六年前的答案,所以我不确定它是否相关,但无论如何我修复了链接。谢谢!
猜你喜欢
  • 2012-02-23
  • 1970-01-01
  • 2019-04-11
  • 2016-08-07
  • 2010-10-22
  • 2021-06-20
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多