2010-08-13 71 views
6

C#的Visual Studio 2010点击WebBrowser控件

我加载一个复杂的HTML页面内的HTML链接到一个WebBrowser控件。但是,我无法修改网页。我想从窗体中自动点击页面上的链接。但是,ID似乎是每次页面加载时随机生成的(所以我认为引用该ID将不起作用)。

这是在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#的链接呢?

谢谢!


UPDATE:

我觉得这是接近,但它只是不工作:

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

我试图在每一个帧的名字堵塞和尝试都“一”和TagName字段中的“A”,但没有任何运气。我找不到任何链接;消息框始终是0.我错过了什么?

回答

17

像这样的东西应该工作:

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"); 
} 

UPDATE:

可以使用得到一个iframe中的链接:

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

但问题说:“但是,ID似乎是每次页面加载时随机生成(所以我认为引用ID不会工作)。” – 2010-08-13 18:36:49

+0

John,你是对的 - 每次打开页面时,链接都会分配一个随机数。这种方法是我在我的搜索中不断遇到的,但我无法找到另一种方式来实现它,而不使用ID。 'cases_ss_733'总是相同的,我只是不知道如何使用。 – Josh 2010-08-13 18:54:06

+0

@John。是的你是对的,但随机生成的ID部分是在我最初的回应后添加的。 @Josh。你能通过InnerText值来识别链接吗? – Garett 2010-08-13 19:13:21

1

也许你会使用更多的周边HTML上下文来链接ID值隔离一个“目标”,然后提取新的随机ID。

在过去,我使用“HtmlAgilityPack”轻松解析“屏幕截图”HTML以隔离页面内的感兴趣区域 - 该库似乎易于使用且可靠。