2010-08-13 17 views
6

C# Visual Studio 2010Haga clic en un enlace HTML dentro de un control WebBrowser

Estoy cargando una página html compleja en un control webbrowser. Pero no tengo la capacidad de modificar la página web. Quiero hacer clic en un enlace en la página automáticamente desde el formulario de Windows. Sin embargo, la ID parece generarse aleatoriamente cada vez que se carga la página (por lo que creo que la referencia a la ID no funcionará).

Este es el contenido del un enlace 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> 

Es la de todos modos para hacer clic en el enlace de C#?

Gracias!


ACTUALIZACIÓN:

Siento que esto está cerca, pero simplemente no está funcionando:

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

He tratado de conectar todos los nombres de un solo cuadro y trató tanto "a" y "A" en el campo TagName pero simplemente no han tenido suerte. No puedo encontrar ningún enlace; el cuadro de mensaje siempre es 0. ¿Qué me estoy perdiendo?

Respuesta

17

Algo como esto debería funcionar:

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

EDIT:

Dado que los identificadores son generados aleatoriamente, otra opción puede ser la identificación de los enlaces por su InnerText; a lo largo de estas líneas.

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

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

ACTUALIZACIÓN:

Usted puede obtener los enlaces en un marco flotante usando:

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

pero la pregunta dice "Pero parece que la ID se genera aleatoriamente cada vez que se carga la página (por lo que creo que la referencia al ID no funcionará)". –

+0

John, tiene razón: los enlaces reciben un número aleatorio asignado cada vez que abre la página. Este método es lo que sigo encontrando en mis búsquedas, pero no puedo encontrar otra manera de implementarlo sin usar el ID. El 'cases_ss_733' es siempre el mismo, simplemente no sé cómo se podría usar. – Josh

+0

@John. Sí, tiene razón, pero la porción de identificación generada aleatoriamente se agregó después de mi respuesta inicial. @Josh. ¿Podría identificar el enlace por el valor de InnerText? – Garett

1

Tal vez tendrá que aislar el valor de ID de enlace utilizando más del contexto HTML circundante un "objetivo" y luego extraer la nueva identificación aleatoria.

En el pasado he utilizado el "HtmlAgilityPack" para analizar fácilmente el HTML "screen-scraped" para aislar áreas de interés dentro de una página: esta biblioteca parece ser fácil de usar y confiable.

Cuestiones relacionadas