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
sin imagen de perfil

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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
sin imagen de perfil

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
sin imagen de perfil

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:

1
2
3
4
5
6
7
8
9
10
11
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
1
2
3
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

1
2
3
4
5
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

RE:Rellenar formulario web automaticamente

Publicado por Omar (1 intervención) el 02/09/2017 21:36:03
No tiene nombre pero tiene valor, prueba con esto.

1
2
3
4
5
For Each elemento As HtmlElement In elementos
If elemento.GetAttribute("value") = " Buscar " Then
     elemento.InvokeMember("onclick")
End If
Next
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
sin imagen de perfil

RE:Rellenar formulario web automaticamente

Publicado por omar (166 intervenciones) el 02/09/2017 22:37:04
saludos

en tu web form debes programar en jalar datos de los que se envían desde una aplicación de escritorio.

la aplicación de escritorio manda los datos en una base de datos

la aplicación web lee los registros enviados desde la aplicación de escritorio

sencillo pero se debe elaborar las tablas bien

cual quier cosa envia un email y te gui en los problemas con anydesck para soporte remoto
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
sin imagen de perfil

RE:Rellenar formulario web automaticamente

Publicado por Victor Felipa (1 intervención) el 26/07/2017 01:26:51
Hola, yo tengo un inconveniente... no se si me puedan ayudar, el tema es que el campo que intento llenar no aparece la parte de ID... sólo sale el "name"
<input class="form-text" name="search1" size="11" maxlength="11">
como puedo hacer en ese caso? estuve revisando otras opciones y hay una que dice que puedo usar el GetElementByName, pero no me aparece esa opcion, espero me puedan dar una mano.
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