Capturar contenido del type text al pulsar un type submit.

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Capturar contenido del type text al pulsar un type submit.

Mensaje por Chefito »

Siguiendo con la dinámica de los post anteriores, los que resolví en otro foro para exaltar el lenguaje, darnos un poquito más a conocer y mostrar nuestro nivel en AutoIt :smt002 , me vuelven a preguntar otra duda. Mi ayuda en este foro se acabó (por lo menos por ahora). Si quieren ayuda sobre AutoIt ya saben donde encontrarnos :smt002 .
Pero vamos a aprovechar esa duda para ver si aquí somos capaces de resolverla.
Dice que lo que quiere es que en la página de google (http://www.google.es), al darle al botón "Buscar con google", almacene el contenido del text (donde se escribe lo que quieres buscar) en una variable y la muestre en un msgbox.
Se me ocurren varias soluciones.
Y a vosotros??? Que se os ocurre???
Espero vuestras respuestas :smt003 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
markus
Mensajes: 28
Registrado: 02 Abr 2010, 21:28

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por markus »

Hola buenas tardes a todos..
Voy a exponer las dudas que tengo sobre esto.
A continuación les muestro un script suministrado por Chefito en un post donde precisamente yo publique esa duda.

Código: Seleccionar todo

#include <IE.au3>
$oIE = _IECreate ("www.google.es") ;cargo la página web de google.
$obtnBuscar = _IEGetObjById ($oIE, "btnG") ;obtengo el objeto button (botón) que pone Buscar en google.
_IEHeadInsertEventScript ($oIE, "btnG", "onclick", "alert('Has pulsado el botón ""Buscar con google""!!!');") ;inserto en el evento onclick del botón una alerta
si prestamos un poco de atención se puede apreciar el _IEHeadInsertEventScript ($oIE, "btnG", "onclick", "alert('Has pulsado el botón ""Buscar con google""!!!');")

Mi pregunta es la siguiente: Según esto lo que hace es editar en caliente por asi decirlo el contenido HTML de google, especificamente el Boton de buscar cuyo nombre es "btnG". Esto dará como resultado que al escribir en el Query de Google por ejemplo "Autoit.es" y le des click en el boton BUSCAR me salte un Alert diciendome 'Has pulsado el botón' . Hasta aqui se entiende todo muy bien, pero mi duda es la siguiente. Yo quisiera que en vez de saltarme un alert más bien me fuera auna funcion que se encargara de obtener el dato introducido en el query de google. por ejemplo se me ocurre algo asi:

Código: Seleccionar todo

#include <IE.au3>
$oIE = _IECreate ("www.google.es") ;cargo la página web de google.
$obtnBuscar = _IEGetObjById ($oIE, "btnG") ;obtengo el objeto button (botón) que pone Buscar en google.
_IEHeadInsertEventScript ($oIE, "btnG", "onclick", captura()) 
Func captura ()
;Aqui iria el codigo para capturar el contenido del Query
Wend
Claro que a mi no me funciona pero quisiera sus opiniones al respecto...
Saludos amigos...
markus
Mensajes: 28
Registrado: 02 Abr 2010, 21:28

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por markus »

Haber otra posible solución que se me viene es la de chequear con el script a que la web del señor Google este abierta con el comando Winwait o winactive y luego capturar los datos introducidos en el Query de google cuando se envien a través de la captura de las cabeceras HTTP filtrando por el método /POST. Desconozco que tan laborioso es trabajar con las cabeceras. De verdad no tengo idea. Pero es una posible solución.

Haber muchachos ahi se las dejo haber que opinan...
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por Chefito »

Una pregunta.....pero exactamente que es lo que quieres? detectar lo que quieres buscar cuando has pulsado el botón de búsqueda, o siempre que hagas una búsqueda?? Es que puedes realizar una búsqueda sin pulsar el botón, simplemente pulsando la tecla enter en el objeto text.
Según una u otra cosa se puede tratar de un modo u otro.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
markus
Mensajes: 28
Registrado: 02 Abr 2010, 21:28

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por markus »

Hola buen día.
Haber te explico lo que quiero. Yo necesito que cuando haga click en el boton "Buscar con Google" el script me capture en una variable la palabra a buscar y me la guarde en un txt. Ese procedimiento yo lo se hacer pero lo que no hayo es como capturar la palabra introducida en el textbox de google. A decir verdad, el foco del problema se me presenta en la manera como le digo al script que este pendiente que pulsen el boton "Buscar con Google" para que me capture el dato del Query y me lo almacene en una variable y luego esa variable la guardo en un txt con el comando FileWritline.
No se si me explique más claramente lo que deseo hacer pero si no te queda muy claro pues preguntame las veces que sea necesario amigo porque necesito hacer eso.
Saludosss.......
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por Chefito »

Otras preguntas.....cuando tiene que capturar el click del botón y capturar el contenido del textbox??? solamente una vez (la primera vez que le pulse)??? más veces???? Donde vas a mostrar el google??? En un IE creado por ti con _IECreate o en otro abierto por el usuario? En una sola y única ventana con el google, o en cualquiera que tenga abierto el google???
Siempre que carge la página de google, en cualquier Internet Explorer y en cualquier momento???
O una vez que deje de darle al botón y cambie de página, aunque luego vuelva al google y le de al botón de búsqueda.....quedrías que siguiese capturando??
Solo te interesa capturar el contenido del text al hacer las búsquedas de webs, o también las de imagenes, videos y demás???

Es que según una cosa u otra es más o menos complicado.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
markus
Mensajes: 28
Registrado: 02 Abr 2010, 21:28

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por markus »

OK, como lo que quiero hacer es a manera experimental pues solo me interesa que el script me capture el dato del textbox cada vez que se pulse el boton "Buscar con Google". De hecho, tu me distes una idea muy buena con el comando _IEHeadInsertEventScript pero quisiera hacerlo por otra vía. Yo quisiera ver si existe la posibilidad de insertar código html para poder lograr que cuando pulse el boton "Buscar con Google" me salte una pequeña ventana como especie de un popup o me abra una ventana flotante del Iexplorer con un titulo que yo elija, esto pienso que se podria lograr creando yo mismo la pagina web con el script al iniciar el script en c:\ . Por ejemplo, yo adapte el script que tu indicastes y le agregue las funciones que a continuación explico brevemente:
1.- Con _IEattach busco la ventana de google por el TITTLE ejemplo: _IEAttach ("Google")
2.- Luego busco el boton "btng" y le inserto el Alert.
3.- Luego pongo al script en PAUSE con el comando Winwait ("Windows Internet Explorer") que es el nombre o titulo que trae por defecto los Alerts lanzados por Javascript.
4.- Cuando el boton "Buscar con google" sea pulsado me salta el Alert y el Winwait se activa y pues simplemente lo que vendria despues del winwait seria capturar lo que este en el textbox o Query con el objeto _IEGetObjById o el objeto _IEGetObjByName .

Esto seria a manera general como funciona el script y de hecho me funciona pero no quiero hacerlo por Alert sino por un metodo que me permita la propiedad "Onclick" de javascript. ¿Cuales son esas propiedades? R= No lo se y en verdad no domino mucho javascript.
Quisiera que por favor me ayudaras a utilizar otra manera o metodo de captura. En cuanto a que utilizo, pues vamos a centraros en Internet Explorer solamente.

Espero me puedan ayudar, saludos.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por Chefito »

Aquí te dejo un ejemplo de como se haría directamente capturando desde AutoIt el evento onClick del botón "Buscar en google".
He utilizado esta forma porque la veo más directa para hacer lo que quieres.
Se pueden hacer de más formas, pero las veo algo peor.
Lo he hecho solo para que funcione en el IE que _IECreate carga, ya que dices que tu ya sabes atacar todos los IE que contengan el google. Sería adaptar un poco el código a lo que tengas hecho

No comento nada ya que el código está bien comentado.

Código: Seleccionar todo

#include <IE.au3>

HotKeySet("{esc}","salir")	;si pulso la tecla Esc salgo del programa.
Global $oIE = _IECreate ("www.google.es") ;cargo la página web de google.
ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")	;obtengo los eventos del objeto $oIE (DWebBrowserEvents)
Global $obtnBuscar = _IEGetObjById ($oIE, "btnG") ;obtengo el objeto button (botón) que pone Buscar en google.
ObjEvent($obtnBuscar, "_Evt_")	;obtengo los eventos del botón que pone "Buscar en google".
while 1
	Sleep(10)
WEnd

Func _Evt_onClick()	;Cuando se genera el evento onClick del botón "Buscar en google" (click en el botón), entra en esta función.
	$txtBusqueda = _IEGetObjByName ($oIE, "q") ;obtengo el objeto button (botón) que pone Buscar en google.
	ConsoleWrite($txtBusqueda.value & @CRLF)
EndFunc

Func IEEvent_NavigateComplete($URL)  ;evento. Se ejecuta cuando la página web del $oIE está cargada por completo.
;   Note: the declaration is different from the one on MSDN.
    If StringInStr($URL,"http://www.google.") Then	;si al cargar la nueva página su dirección url contiene ese string entra en la condición.
		$obtnBuscar = _IEGetObjById ($oIE, "btnG")
		ObjEvent($obtnBuscar, "_Evt_")
	EndIf
EndFunc

Func Salir()
	Exit
EndFunc
Prueba el código en varios ordenadores, y si puede ser en varias versiones del IE, ya que en mi ordenador hacía cosas raras con el IE v. 8 (se iba incrementando el resultado de la función _Evt_onClick() y cuando le daba a f1 se cargaba como otro script de AutoIt :smt017 :smt017 :smt017 . Un bug???).
Pero lo he probado en el del trabajo con IE v. 6 y va perfecto. No se no se.
Si no va del todo bien con este método siempre se puede hacer de otras formas :smt002 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
markus
Mensajes: 28
Registrado: 02 Abr 2010, 21:28

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por markus »

Buenas tardes.
Te comento que me sirvio de mucho el script pero me esta presentando un pequeño problema.
La version de IE que tengo es la 7 y el problema se me presenta cuando estoy introduciendo el dato en el textbox de Google ya que en ciertas ocaciones si escribo muy rapido la palabra o a una velocidad mas o menos rapida resulta ser que no se escribe la letra en determinados momentos, por ejemplo, si quiero buscar la palabra AUTOIT aveces me escribe AUTT sin la "I". este problema lo mejore un poquito aumentando mas el sleep(10) y lo coloque en "30000" o 30 seg. No se para que se hace esta espera...
Tengo otro problema, resulta ser que en la ultima parte del codigo que a continuacion te presento:

Código: Seleccionar todo

Func IEEvent_NavigateComplete($URL)  ;evento. Se ejecuta cuando la página web del $oIE está cargada por completo.
;   Note: the declaration is different from the one on MSDN.
    If StringInStr($URL,"http://www.google.") Then   ;si al cargar la nueva página su dirección url contiene ese string entra en la condición.
      $obtnBuscar = _IEGetObjById ($oIE, "btnG")
      ObjEvent($obtnBuscar, "_Evt_")
   EndIf
EndFunc
Con esta funcion tu puedes se gun entiendo verificar la nueva url y si ésta cumple con el string haces determinada accion. Como podria hacer yo para ponerme a la espera o estar chequeando la nueva url en busca de una palabra o un objeto y si lo encuentra pues que me lance un Msgbox(0,"titulo", "Objeto encontrado...!!"). Este tipo de problema se presenta comunmente en las paginas webs que contienen Frames ya que como sabras los frames se cargan en la web pero no cambia la URL y tambien en las paginas web que contienen Form que es mi caso. Mi pregunta hecha de otra manera sería: ¿Como se hace para buscar dentro de un form llamado "formulario" un determinado boton pero que si no lo encuentra pues que siga buscando hasta que se cargue.

Yo hice esto:

$oFrame = _IEFrameGetObjByName ($oIE, "Frame_principal")
$oForm = _IEFormGetObjByName ($oFrame, "formulario")
$obtnBuscar = _IEGetObjById ($oForm, "Enviar")

El problema se me presenta porque el boton enviar aparece como en la tercer recarga ya que como veras "Enviar" quiere decir que se han llenado todos los datos y por ende es el ultimo en aparecer. Te explico rapido. Tan pronto se carga el Frame_principal aparece el formulario que dice ingrese su nombre, luego debajo un boton que dice "Siguiente" fijate que no es el boton que quiero capturar ya que no es "Enviar", luego cuando le doy click al boton "Siguiente" me carga el mismo form pero ahora pidiendome el apellido y debajo un boton que dice "Enviar" pues ahora si necesito capturar el evento de ese boton que ya me explicastes como se hace pero no se como resolver el problema de la misma URL. ¿Como pongo el script a la espera de que aparezca el boton "ENVIAR"?

No se si me explique bien.

Muchas gracias por la atencion y espero me puedan ayudar.....
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por Chefito »

Eso es muy facil. Hay muchas soluciones para que entre en el if cuando tu quieras. Yo utilizé la url porque para la página de google y lo que me estuviste comentando valía perfectamente.

En tu caso, por ejemplo, una forma sería mirando si existe ese botón.
Cambia la condición por esto y ya está:

Código: Seleccionar todo

$obtnBuscar = _IEGetObjById ($oForm, "Enviar")
If $obtnBuscar<>0 Then............................endif
Si no existe ese objeto (el botón enviar) la función te devuelve 0. Con esto le decimos que si es distinto de 0 entre en la condición (existe el botón).

También te devuelve un error al fallar. Sería así:

Código: Seleccionar todo

$obtnBuscar = _IEGetObjById ($oForm, "Enviar")
If @error=0 Then............................endif
Hay muchas formas de condicionar esto. También lo puedes condicionar mirando algún texto del código html de la página, el texto de la página, etc etc etc.
markus escribió:La version de IE que tengo es la 7 y el problema se me presenta cuando estoy introduciendo el dato en el textbox de Google ya que en ciertas ocaciones si escribo muy rapido la palabra o a una velocidad mas o menos rapida resulta ser que no se escribe la letra en determinados momentos, por ejemplo, si quiero buscar la palabra AUTOIT aveces me escribe AUTT sin la "I". este problema lo mejore un poquito aumentando mas el sleep(10) y lo coloque en "30000" o 30 seg. No se para que se hace esta espera...
Sí, la verdad es que luego noté eso yo también. No se por qué lo hará :smt017 . Puede que esta no sea la mejor solución para esto ya que veo que hace cosas raras al tirar de los eventos. Esto también se puede hacer sin eventos con un adlib que vaya revisando cada cierto tiempo las páginas. No es tan elegante pero igualmente de efectivo y no creo que haga cosas raras :smt023 .

A ver que me hacer con esto, que según dices me huele a registros automáticos y eso no me gusta nada :smt011 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
markus
Mensajes: 28
Registrado: 02 Abr 2010, 21:28

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por markus »

Tengo una duda, estuve buscando informacion sobre la posibilidad de capturar las cabeceras pero no encuentro mucho del tema.... alguien podria iluminarme por favor? Por ejemplo quiero buscar una palabra en google y quisiera capturar el evento POST. ME explico, quiero hacer algo asi como TamperData pero para IE o algo asi como el LiveHttpHeaders. Alguien podria ayudarme?
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por Chefito »

Estas dos librerías puede que te ayuden para trabajar con las cabeceras: http://www.emesn.com/autoitforum/viewto ... 2079#p7975
Mira como trata las cabeceras las funciones. Observa lo que manda y recibe con las funciones TCPSend y TCPRecv.
Eso es mirar el protocolo tcp y sus cabeceras.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por BasicOs »

Chefito escribió: Eso es mirar el protocolo tcp y sus cabeceras.
Tambien hay info de trabajar con cabeceras y encode o unencode la información que mandas en el WEbAutoit dentro aha.au3 y las otras librerias genericas de autoit creadas para internet cgi, ya que codifican y decodican y usan EL TCP a más bajo nivel, pero al reves no desde el punto de vista del navegador, sino desde le punto de vista del servidor (por eso es tan parecido): http://www.emesn.com/autoitforum/viewforum.php?f=6 :smt020 :smt020
Estas librerias funcionan tambien con funciones de proxy con los protocolos.
SAlu22:)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por Chefito »

Mmmmm.....pero el aha no es para hacer webs utilizando autoit???
Pienso que es más facil utilizar estas funciones :smt001 . Aunque también te digo que nunca utilicé aha ni ninguna otra adaptación al lenguaje autoit para realizar webs.
Para gustos los colores. Que mire y lo que más le guste que lo utilice.
Chefito escribió:Eso es mirar el protocolo tcp y sus cabeceras.
Jajajaja. Me quivoqué al poner esto. Quería decir que mirase el protocolo http y sus cabeceras. Sin querer me fui más abajo :smt005 . Anda que si se pone a manejar cabeceras tcp!! :smt005 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Capturar contenido del type text al pulsar un type submit.

Mensaje por BasicOs »

Al final un servidor web, o lo q hace parte del aha.au3, au3cgi y el servidor hecho en autoit, es:
1.-manejar cabeceras
2.-Recibir los datos y entenderlos de las peticiones
3.-Devolver cabeceras y datos

Es tcp, aplicando un protocolo de cabeceras, cuerpos, mensajes etc, que a la postre es GENERALIZANDO mucho, tan simple como mandar variables en donde en los primero (digamos 20) caracteres te explica que es, y en el resto de la variable te envia los datos a los que se refiere la cabecera....
Eso es explicado quitando tanto susto y cosas raras que explican...

Según está explicado antes con el Tcp de Rcv y Send envias y recibes los caracteres que provienen de trocitos de variables y se meteran en variables (digamos datos o bits)

Salu22:)
Responder