[How To][Windows Forms] Acceder a elementos de una página web

Hola, desde hace ya bastante tiempo había prometido una entrada a manera de tutorial de cómo realizar operaciones sobre una página Web con el control Web Browser.

En este tutorial vamos a insertar texto en los textbox de credenciales de facebook y hacer click en el botón “Entrar”, para esto creamos una nueva aplicación de Windows Forms y agregamos un control de Web Browser, en su propiedad Url asignamos http://www.facebook.com/, agregamos un botón y en el evento click de este empezamos a trabajar.

Nuestro formulario luciría así:

Luego de esto con ayuda con algún inspector de HTML como las Herramientas de desarrollo de IE9, inspeccionamos los elementos necesarios para cumplir nuestro objetivo. *Para desplegar esta herramienta basta con pulsar F12 cuando este abierto.

Se vería de la siguiente forma:

Cuando ya conocemos los Id’s de los elementos HTML que usaremos, podemos trabajar nuestro código:

 HtmlElement txtUsuario = webBrowser1.Document.GetElementById("email");
 HtmlElement txtPassword = webBrowser1.Document.GetElementById("pass");
 HtmlElement boton = webBrowser1.Document.GetElementById("loginbutton");
 txtUsuario.SetAttribute("value", "NombreDelUsuario");
 txtPassword.SetAttribute("value", "clave");
 boton.InvokeMember("click");

Cosas a notar en este código, el uso de la propiedad Document que se encarga de obtener un objeto del tipo HtmlDocument. El uso del método GetElementById(string) que nos retorna un objeto del tipo HtmlElement
a partir del ID que pasemos como parámetro, si existen dos elementos con el mismo ID el método retorna el primero que encuentre. El uso de los métodos SetAttribute(string, string) que nos permite asignar un valor a una propiedad, y el uso de InvokeMember() que
nos permite ejecutar un método no expuesto en el elemento DOM.

Consideraciones:

Una consideración a tener en cuenta es el uso de frames de algunas páginas, nunca me había sucedido hasta que me hicieron una pregunta de este control y donde al ver la estructura HTML de la pagina, pues debía cambiar el código un poco, el objetivo era el mismo, localizar un textbox, un botón y hacer click sobre el mismo, solo que en esta ocasión la pagina usaba frames, mi solución fue la siguiente:

HtmlWindow htmlWindow = webBrowser1.Document.Window; 
HtmlElement txt = null; 
HtmlElement boton = null; 
foreach (HtmlWindow frameWindow in htmlWindow.Frames) 
{ 
      control = frameWindow.Document.GetElementById("textBox"); 
      boton = frameWindow.Document.GetElementById("boton"); 
      if (txt != null && boton != null) 
          break; 
} 
control.SetAttribute("value""valor"); 
boton.InvokeMember("click"); 

Bien, espero les sea de utilidad.

Hasta el próximo post.

Anuncios
[How To][Windows Forms] Acceder a elementos de una página web

7 comentarios en “[How To][Windows Forms] Acceder a elementos de una página web

  1. Hola buen dia una pregunta antes del codigo propuesto debe llevar esto
    WebBrowser webBrowser1= new WebBrowser();
    webBrowser1= null;
    webBrowser1.Url = new Uri(“http://www.pagina.com/”);
    Disculpen y gracias

  2. Anónimo dijo:

    Gracias,
    Tengo una duda, como seria el codigo para un linkbutton y para un dropdownlist?

    InvokeMember(“click”);
    SetAttribute(“value”, “valor”);

    Seria con esto o es de otra manera

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s