单击 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 链接的主要内容,如果未能解决你的问题,请参考以下文章