Visual Basic.NET - Rellenar formulario web automaticamente

   
Vista:

Rellenar formulario web automaticamente

Publicado por Marta (49 intervenciones) el 06/06/2009 22:38:40
Hola, ¿alguien me puede ayudar a como desde una aplicacion cliente en .net puedo rellenar automaticamente un formulario de una aplicación web a la cual no puedo acceder a su código fuente? Lo que hacen programas como el Roboform, InFormEnter, ...

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Rellenar formulario web automaticamente

Publicado por Joan F (129 intervenciones) el 06/06/2009 23:24:20
Hola,

El objeto WebBrowser contiene la propiedad Document que te permite acceder al contenido DOM(controles, formularios,...) de una pagina web. Por ejemplo para realizar el registro en una pagina:

Private Sub NavegaADestino()

'Se crea un navegador
Dim navegador As New WebBrowser

'añadimos un controlador de evento que se dispare cuando el documento finalice la carga
AddHandler navegador.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf RealizaRegistro)

'navegamos a la web de destino
navegador.Navigate("http://[servidorpruebas]/test/login.aspx")

End Sub

Private Sub RealizaRegistro(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs)

'capturamos los controles donde introduciremos datos
Dim nombreUsuario As HtmlElement = Me.WebBrowser1.Document.GetElementById("username")
Dim claveUsuario As HtmlElement = Me.WebBrowser1.Document.GetElementById("password")

'establecemos los valores de los controles
nombreUsuario.InnerText = "usuario"
claveUsuario.InnerText = "clave"

'antes de realizar el "submit" del formulario desconectamos el controlador del evento, ya que sino al
'terminar de cargar la nueva pagina después del "submit" el método volverá a ser llamado
RemoveHandler CType(sender, WebBrowser).DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf RealizaRegistro)

'realizamos el "submit" del formulario
Me.WebBrowser1.Document.Forms("formlogin").InvokeMember("submit")

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rellenar formulario web automaticamente

Publicado por Marta (49 intervenciones) el 08/06/2009 09:28:05
Muchas gracias. Pero esto lo que hace es abrir una página web dentro de mi aplicación windows.... (me he creado un control webBrowser y en la propiedad url he puesto la diección de la pagina web, no sé si lo he hecho bien

no se puede hacer en dos ventanas independientes? por un lado, la página web y por otro mi aplicación windows que tengo que desarrollar donde acceda a esa página web.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rellenar formulario web automaticamente

Publicado por Joan F (129 intervenciones) el 09/06/2009 00:20:16
Hola,

Se puede realizar en dos ventanas independientes. Es técnicamente más complicado y, por mi experiencia, mas ineficiente pero es posible.

Para eso en el proyecto has de añadir una referencia a Microsoft Internet Controls (es un objeto COM). Esto te permite crear instancias del navegador internet explorer.

Entonces, el código seria:

Dim explorador As SHDocVw.InternetExplorer

'creamos un nuevo internet explorer
explorador = New SHDocVw.InternetExplorer

explorador.Visible = True
explorador.Navigate(""http://[servidorpruebas]/test/login.aspx"")

'loop para esperar la carga del documento
Do
'esperamos que el documento este cargado: explorador.ReadyState = SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE
'y que se haya terminado de ejecutar todo el javascript: explorador.Busy
Loop While explorador.ReadyState <> SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE And explorador.Busy = True

Dim nombreUsuario As HtmlElement = explorador.Document.GetElementById("username")

'...

explorador.Quit()

Esto te creara una nueva ventana del internet explorer, te navegara a la URL que le hayas pasado como parámetro al método explorador.Navigate i despues de esperar la carga del documento te permitira manipular el DOM de la pagina web mediante la propiedad explorador.Document

Personalmente he usado este método en aplicaciones con VB6 y VBA y funciona bien pero te da muchos quebraderos de cabeza en lo que de por si es un tema bastante complicado. Mi recomendación personal es que si puedes intentes usar el WebBrowser.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rellenar formulario web automaticamente

Publicado por Marta (49 intervenciones) el 09/06/2009 11:46:08
A lo mejor no me he explicado bien. La idea es que el usuario tenga abiertas dos aplicaciones a la vez, la página web a la cual accede normalmente abriendo un navegador y poniendo la url (previamente se ha logeado) y otra aplicación cliente donde yo programo lo necesario para que se vayan rellenando los campos de la web y se vayan activando los botones según las necesidades.

¿¿Es esto posible??

Muchas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rellenar formulario web automaticamente

Publicado por Joan F (129 intervenciones) el 10/06/2009 05:26:30
En la misma referencia de Microsoft Internet Controls existe el objeto ShellWindows que es una colección a las ventanas del navegador (solo Internet Explorer y navegador de documentos de Windows) abiertas en el sistema. Una forma de acceder a la ventana en la que el usuario esta navegando es recorrer esta colección y encontrar la ventana con la URL que interesa. El código seria:

Dim ventanasExplorador As SHDocVw.ShellWindows
Dim explorador As SHDocVw.InternetExplorer

ventanasExplorador = New SHDocVw.ShellWindows

For ventanas As Integer = 0 To ventanasExplorador.Count - 1
If ventanasExplorador(ventanas).LocationURL = "http://[servidorpruebas]/test/login.aspx" Then
explorador = ventanasExplorador(ventanas)
Exit For
End If
Next

Este sistema tiene dos fallos: 1-si el usuario tiene abiertos dos exploradores web a la misma URL no hay forma de diferenciar uno de otro y 2-solo funciona para el navegador Internet Explorer.

Este es el sistema que conozco, no se si hay otra método más eficiente o que sirva para otros navegadores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rellenar formulario web automaticamente

Publicado por Daniel (1 intervención) el 17/01/2015 16:54:53
Que tal amigo Joan F. estoy intentando acceder a esta pagina http://www.sunat.gob.pe/cl-ti-itmrconsruc/FrameCriterioBusquedaCelular.jsp e intentando llenar los inputs y ejecutar el boton para buscar pero este boton no tiene nombre estoy intentando con esto
Me.WebBrowser1.Document.Forms("mainForm").InvokeMember("submit")
Creo que si lo ejecuta pero no muestra nada la pagina se queda en blanco. alguna solucion tengo este pequeño codigo
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
WebBrowser1.Navigate("http://www.sunat.gob.pe/cl-ti-itmrconsruc/FrameCriterioBusquedaCelular.jsp")
End Sub
y

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
WebBrowser1.Document.GetElementById("search1").InnerText = (TextBox1.Text)
WebBrowser1.Document.GetElementById("codigo").InnerText = (TextBox2.Text)
Me.WebBrowser1.Document.Forms("mainForm").InvokeMember("submit")
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar