2010-08-13 69 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以隔離頁面內的感興趣區域 - 該庫似乎易於使用且可靠。