单击 WebBrowser 控件内的 HTML 链接

Posted

技术标签:

【中文标题】单击 WebBrowser 控件内的 HTML 链接【英文标题】:Click an HTML link inside a WebBrowser Control 【发布时间】:2011-03-29 14:43:27 【问题描述】:

C# Visual Studio 2010

我正在将一个复杂的 html 页面加载到 webbrowser 控件中。但是,我没有修改网页的能力。我想从 Windows 窗体中自动单击页面上的链接。但是,ID 似乎是每次加载页面时随机生成的(所以我相信引用 ID 将不起作用)。

这是a href 链接的内容:

<a 

id="u_lp_id_58547" href="javascript:void(0)" class="SGLeftPanelText" onclick="setStoreParams('cases;212', 212); window.leftpanel.onClick('cases_ss_733');return false; ">

My Assigned</a>

是否无论如何都可以从 C# 中单击链接?

谢谢!


更新:

我觉得这很接近,但它只是不起作用:

HtmlElementCollection links = helpdeskWebBrowser.Document.Window.Frames["main_pending_events_frame"].Document.GetElementsByTagName("a");
MessageBox.Show(links.Count.ToString());

我尝试插入每个帧名称,并在 TagName 字段中尝试了“a”和“A”,但没有任何运气。我只是找不到任何链接;消息框始终为 0。我错过了什么?

【问题讨论】:

【参考方案1】:

这样的事情应该可以工作:

HtmlElement link = webBrowser.Document.GetElementByID("u_lp_id_58547")
link.InvokeMember("Click")

编辑:

由于 ID 是随机生成的,另一种选择可能是通过链接的InnerText 来识别链接;沿着这些思路。

HtmlElementCollection links = webBrowser.Document.GetElementsByTagName("A");

foreach (HtmlElement link in links)

    if (link.InnerText.Equals("My Assigned"))
        link.InvokeMember("Click");

更新:

您可以使用以下方法获取 IFrame 中的链接:

webBrowser.Document.Window.Frames["MyIFrame"].Document.GetElementsByTagName("A");

【讨论】:

但问题是“但是,ID 似乎是每次加载页面时随机生成的(所以我相信引用 ID 将不起作用)。” 约翰,你是对的——每次打开页面时,链接都会获得一个随机数。这种方法是我在搜索中不断遇到的方法,但如果不使用 ID,我想不出另一种方法来实现它。 “cases_ss_733”总是一样的,我只是不知道怎么用。 @约翰。是的,您是对的,但是在我最初的回复之后添加了随机生成的 id 部分。 @乔希。您能通过 InnerText 值识别链接吗? 我相信这让我非常接近 Garett!感谢您跟进。我对其进行了测试,但我没有工作,但我相信这是因为 My Assigned 链接隐藏在 iFrame 中。我尝试在 if 语句上方插入 MessageBox.Show(link.InnerText) 并没有出现任何结果。然后我在框架集页面上做了一个查看源代码并为 谢谢谢谢谢谢!我终于发现它被埋在了额外的框架之下。一旦我深入到第二级框架,我就找到了 My Assigned 链接。再次感谢加雷特!【参考方案2】:

也许您必须使用更多周围的 HTML 上下文作为“目标”来隔离链接 ID 值,然后提取新的随机 ID。

过去我曾使用“HtmlAgilityPack”轻松解析“屏幕抓取”HTML 以隔离页面内感兴趣的区域 - 这个库似乎易于使用且可靠。

【讨论】:

以上是关于单击 WebBrowser 控件内的 HTML 链接的主要内容,如果未能解决你的问题,请参考以下文章

VB模拟鼠标点击webbrowser控件网页

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

在新选项卡中打开链接(WebBrowser 控件)

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

如何单击 webbrowser 控件中的按钮?

锚标记上的 JQuery click() 未从 WebBrowser 控件内的注入脚本触发