2010-08-13 11 views
6

C# Visual Studio 2010Fare clic su un collegamento HTML all'interno di un controllo WebBrowser

sto caricamento di una pagina html complesso in un controllo browser web. Ma non ho la possibilità di modificare la pagina web. Voglio fare clic su un collegamento sulla pagina automaticamente dal modulo di Windows. Ma l'ID sembra essere generato casualmente ogni volta che viene caricata la pagina (quindi credo che il riferimento all'ID non funzionerà).

Questo è il contenuto del un link 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> 

è il comunque di fare clic sul collegamento da C#?

Grazie!


UPDATE:

Mi sento come se questo è vicino, ma non è solo funziona:

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

ho cercato di inserire in ogni singolo nome fotogramma e provato sia "a" e "A" nel campo TagName ma non hanno avuto fortuna. Non riesco a trovare alcun collegamento; la casella del messaggio è sempre 0. Cosa mi manca?

risposta

17

Qualcosa del genere dovrebbe funzionare:

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

EDIT:

Dal momento che gli ID sono generati casualmente, un'altra opzione potrebbe essere quella di individuare i legami con la loro InnerText; seguendo queste linee.

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

foreach (HtmlElement link in links) 
{ 
    if (link.InnerText.Equals("My Assigned")) 
     link.InvokeMember("Click"); 
} 

UPDATE:

È possibile ottenere i link all'interno di un iframe utilizzando:

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

ma la domanda dice "Ma l'ID sembra essere generato casualmente ogni volta che la pagina viene caricata (quindi credo che il riferimento all'ID non funzionerà)." –

+0

John, sei corretto: i link ricevono un numero casuale assegnato a loro ogni volta che apri la pagina. Questo metodo è ciò che continuo a riscontrare nelle mie ricerche, ma non riesco a capire un altro modo per implementarlo senza utilizzare l'ID. Il 'cases_ss_733' è sempre lo stesso, non so come possa essere usato. – Josh

+0

@ John. Sì, hai ragione, ma la porzione id generata a caso è stata aggiunta dopo la mia risposta iniziale. @Josh. Potresti identificare il collegamento tramite il valore di InnerText? – Garett

1

Forse si dovrà isolare il valore di collegamento ID usando più del contesto HTML circostante un "target" e quindi estrarre il nuovo ID casuale.

In passato ho utilizzato lo "HtmlAgilityPack" per analizzare facilmente l'HTML "screen-scraped" per isolare le aree di interesse all'interno di una pagina: questa libreria sembra essere facile da usare e affidabile.

Problemi correlati