Autonavegador, porq se sale?porq no se completan los campos?

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
cloferba
Mensajes: 15
Registrado: 10 Oct 2009, 16:21

Autonavegador, porq se sale?porq no se completan los campos?

Mensaje por cloferba »

porque mucha gente tiene chrome, otros tienen IE y otros firefox como navegador predeterminado, tuve la idea de hacer una aplicacion para cargar una web, luego que se carga, abre otra pagina, y luego presiona teclas hasta llegar a un campo de texto e inserta el texto luego que la pagina cargue
Al presionar las teclas (tab) si el navegador tiene complementos o demas, estos pueden interferir y ser tomados por el tab (me pasa con el seoquake para chrome) el cual se "integra" como si fuera parte de la pagina afectando los tabs

en primer lugar no se porque el programa se sale automaticamente (tendria que hacerlo solamente al presionar escape)
segundo, no se porque los campos nombres y email no se completan con los valores que le setee a Send

es mas que obvio que la web que coloque es a modo de ejemplo (un formulario de contacto de demo), la finalidad no sera spamear o usar el scrip para pavadas:

Código: Seleccionar todo

#include <GUIConstants.au3>
#include <IE.au3>
#include <WindowsConstants.au3>
#include <ProgressConstants.au3>
HotKeySet("{ESC}", "ExitApp")
Func ExitApp()
    Exit
EndFunc
; http://www.rsforums.org/forums/programming/10337-autoit-simple-web-browser.html
$GUI = GUICreate("Browser", 1024, 700, -1, -1, $WS_MAXIMIZE)
$object = ObjCreate("Shell.Explorer.2")
$object_ctrl = GUICtrlCreateObj($object, 1, 1, 1024, 700)
$back_button = GUICtrlCreateButton("Atras", 16, 710, 50, 25, 0) ; Creats Back GUI
$forward_button = GUICtrlCreateButton("Adelante", 66, 710, 50, 25, 0) ; Creates Forward GUI
$refresh_button = GUICtrlCreateButton("Refresh", 116, 710, 50, 25, 0) ; Creates Refresh GUI
GUISetState()
;$oIE = _IECreate ("http://www.puntk.com")
_IENavigate ($Object, "http://wprocks.com/demo/")
_IENavigate ($Object, "http://wprocks.com/demo/contact")
_IELoadWait($Object)  
Send("{TAB 9}")
Send("This is my name")
Send("{TAB}")
Send("This is my email")
como base utilize el navegador que esta aqui:
http://www.rsforums.org/forums/programm ... owser.html

cualquier consejo es bienvenido, ando hace 2 dias dando vueltas con esto :smt033
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por Ximorro »

No sé por qué definís las funciones en medio del programa... partir el código principal no ayuda a entenderlo.
Yo de la parte web no te puedo decir porque como no lo trabajo no lo controlo mucho, pero lo de acabar el programa es simplemente porque cuando se acaban las instrucciones para ejecutar pues finaliza, así que después de ese Send("This is my email") como no hay más que ejecutar el programa finaliza, lógico.

Tienes que ponerlo tú en espera con un bucle con un Sleep (con lo que sólo saldrá con el Hotkey) pero en este caso tienes un GUI que no estás manejando, lo correcto en este caso es crear un bucle de gestión de eventos para ese GUI. Así el programa finalizará cuando cierres la ventana o cuando pulses ESC.
Puedes ver un sencillo bucle de gestión de eventos en este tutorial.
http://www.emesn.com/autoitforum/viewto ... f=2&t=2246
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
cloferba
Mensajes: 15
Registrado: 10 Oct 2009, 16:21

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por cloferba »

gracias, le di un sleep (crei que si no tenia la orden de salir directamente no tenia que salirse)

ahora bien, estuve intentando lidiar con los formularios, pero el problema que encuentro es que recibo errores de InvalidDataType (pese a que lei la ayuda y utilize los ejemplos de referencia)

Código: Seleccionar todo

GUISetState()
$oIE = _IENavigate ($Object, "http://www.puntk.com/suggest-link.php?id=320")
_IELoadWait($Object)
$oForm = _IEFormGetObjByName ($oIE, "suggest_link")
$oText = _IEFormElementGetObjByName ($oForm, "title")
_IEFormElementSetValue ($oText, "Nombre")
$oText = _IEFormElementGetObjByName ($oForm, "url")
Send("This is my email")
los errores que recibo son:
--> IE.au3 V2.4-0 Error from function _IEFormGetObjByName, $_IEStatus_InvalidDataType
--> IE.au3 V2.4-0 Error from function _IEFormElementGetObjByName, $_IEStatus_InvalidDataType
--> IE.au3 V2.4-0 Error from function _IEFormElementSetValue, $_IEStatus_InvalidDataType
--> IE.au3 V2.4-0 Error from function _IEFormElementGetObjByName, $_IEStatus_InvalidDataType
porque el InvalidDataType si corresponde a los valores que estan en el codigo fuente? :smt013

el codigo original del navegador es este

Código: Seleccionar todo

#include <GUIConstants.au3>
#include <IE.au3>
$GUI = GUICreate("Simple Web Browser", 800, 450)
$object = ObjCreate("Shell.Explorer.2")
$object_ctrl = GUICtrlCreateObj($object, 16, 10, 780, 400)
$url_button = GUICtrlCreateButton("URL", 166, 410, 400, 25, 0)

$back_button = GUICtrlCreateButton("Back", 16, 410, 50, 25, 0) ; Creats Back GUI
$forward_button = GUICtrlCreateButton("Forward", 66, 410, 50, 25, 0) ; Creates Forward GUI
$refresh_button = GUICtrlCreateButton("Refresh", 116, 410, 50, 25, 0) ; Creates Refresh GUI
$progressbar1 = GUICtrlCreateProgress ( 570, 415, 200, 20, 0) ; Creates Progress bar
_IENavigate($object, "www.google.com")
GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $url_button
        $URL = Inputbox("Web Browser", "Enter the URL you want to visit.")
        _IENavigate($Object, $URL)
        Set_progress() ; Function
    Case $msg = $back_button ; Send browser to previous page
        $Object.GoBack
        Set_progress() ; Function
    Case $msg = $forward_button ; Send browser forward
        $Object.GoForward
        Set_progress() ; Function
    Case $msg = $refresh_button ; Refreshes browser page
        $Object.Refresh
        Set_progress() ; Function
    Case $msg = $GUI_EVENT_CLOSE
        Exit
    EndSelect
WEnd

Func Set_progress() ; Creates Progress bar
    For $pg = 0 To 100 Step 5
        GUICtrlSetData($progressbar1, $pg)
        Sleep(2)
    Next
EndFunc
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por Chefito »

No se lo que habrás hecho en el código anterior, pero eso no te debería dar ningún fallo.

Consejos: Es innecesario _iewait después de _ienavigate. Por defecto ya espera a que se carge la página. Mirala en la ayuda. Ten cuidado al asignar los valores de objetos diferentes de una página. Si miras tu código, has asignado a $oText dos objetos diferentes.

Código: Seleccionar todo

#include <GUIConstants.au3>
#include <IE.au3>
$GUI = GUICreate("Simple Web Browser", 800, 450)
$object = ObjCreate("Shell.Explorer.2")
$object_ctrl = GUICtrlCreateObj($object, 16, 10, 780, 400)
$url_button = GUICtrlCreateButton("URL", 166, 410, 400, 25, 0)

$back_button = GUICtrlCreateButton("Back", 16, 410, 50, 25, 0) ; Creats Back GUI
$forward_button = GUICtrlCreateButton("Forward", 66, 410, 50, 25, 0) ; Creates Forward GUI
$refresh_button = GUICtrlCreateButton("Refresh", 116, 410, 50, 25, 0) ; Creates Refresh GUI
$progressbar1 = GUICtrlCreateProgress ( 570, 415, 200, 20, 0) ; Creates Progress bar

GUISetState()
_IENavigate($object, "http://www.puntk.com/suggest-link.php?id=320")
$oForm = _IEFormGetObjByName ($object, "suggest_link")
$oText = _IEFormElementGetObjByName ($oForm, "title")
_IEFormElementSetValue ($oText, "Nombre")
$oText2 = _IEFormElementGetObjByName ($oForm, "url")
_IEFormElementSetValue ($oText2, "Dirección")

While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $url_button
        $URL = Inputbox("Web Browser", "Enter the URL you want to visit.")
        _IENavigate($Object, $URL)
        Set_progress() ; Function
    Case $msg = $back_button ; Send browser to previous page
        $Object.GoBack
        Set_progress() ; Function
    Case $msg = $forward_button ; Send browser forward
        $Object.GoForward
        Set_progress() ; Function
    Case $msg = $refresh_button ; Refreshes browser page
        $Object.Refresh
        Set_progress() ; Function
    Case $msg = $GUI_EVENT_CLOSE
        Exit
    EndSelect
WEnd

Func Set_progress() ; Creates Progress bar
    For $pg = 0 To 100 Step 5
        GUICtrlSetData($progressbar1, $pg)
        Sleep(2)
    Next
EndFunc
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 ;).
cloferba
Mensajes: 15
Registrado: 10 Oct 2009, 16:21

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por cloferba »

te agradezco, tienes razon, se me paso por alto el iewait (todo novato comete errores :p )

aunque he cambiado la variable otext, sigo recibiendo los mismos errores, pese a que el codigo de la pagina efectivamente tiene los campos de textos con los id "title" y "url"

por eso es que ando un poco perdido, he mirado los ejemplos de autoit y tendria que andar todo bien pero sin embargo no :(
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por Chefito »

Mmmmm....pero te va el código que te deje en mi post anterior? Si te va y el tuyo no, pues tiene que haber algún fallo en tu código (logicamente). Tendrías que colgarlo, o por lo menos colgar la parte que no te funciona....pero de modo funcional. Que significa de modo funcional? Adaptarlo para que cualquiera que ejecute tu código pueda hacerlo sin tener que empezar a variarlo. Eso hará que mucha más gente te ayude.

Si no te va mi ejemplo, entonces debe ser algo del ordenador (windows, IE, etc). Pruebalo en otro para ver si te va.

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 ;).
cloferba
Mensajes: 15
Registrado: 10 Oct 2009, 16:21

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por cloferba »

te agradezco y disculpa las vueltas que he tenido, al final no se de donde vino el problema, pero probe la aplicacion en otro ordenador y funciono a la perfeccion, pudo enviar bien los datos a los cambios de nombre y url

lo que no comprendo es que si bien llama a la shell del navegador para ejecutarse en la pantalla, esta no esta "activa"

es decir, si hago un send no me toma, necesito si o si hacer click en la pagina que se esta navegando para volverla activa y que el send funcione.

en cuanto a esto, no encuentro en la ayuda algo referido para que pase a estar activa la pantalla del navegador invocando el shell, tienes alguna idea para tirarme y buscarle una solucion?

exactamente es porque la pagina pide un codigo de verificacion, y con un send (tab) planeo dejar el cursor en ese campo de texto para que el usuario ingrese el texto manualmente
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por BasicOs »

Normalmente sería una opción de la orden shell o de otras si lo permitieran (vienen como parametros opcionales en la ayuda),

Aparte, puedes usar las ordenes Win... activate o Win Wait .. Activate para activar las ventanas y asegurar que estén activas antes de hacer el send, con el macrogenerador y el otro generador de macros del Scite-tools, lo ves como se generan automáticamente, ya que copia lo que haces con el ratón y teclado, te valen para hacer algo rápido, tener todo el código, y luego manualmente puedes adaptar más cosas,
Salu22:)
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por Ximorro »

Con Send tendrás que hacerlo como dice BasicOS, con las funciones para manejar ventanas.

O quizás haya alternativas a Send, aquí ControlSend no funciona porque no es un control Windows (los controles de páginas web son diferentes) pero seguro que hay alguna función _IE... que te escribe en un edit web.
Por ejemplo con _IEFormElementSetValue, porque estará en un formulario ¿no?
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
cloferba
Mensajes: 15
Registrado: 10 Oct 2009, 16:21

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por cloferba »

gracias gente, he utilizado WinActivate("[CLASS:Internet Explorer_Server]", "") y luego aplicado el send con varios intentos fallidos

al pasar el window info sobre el navegador (no la ventana con los botones, sino la pagina) obtengo en Basic Control Info, el class Internet Explorer_Server
por lo cual le indique al winactivate que tome ese class

la ayuda del winactivate solo especifica titulos de ventana y controlIDs, por lo cual no se como continuar

edit: probe con WinActivate("TITLE:Simple Web Browser; CLASS:Internet Explorer_Server; INSTANCE:1]", "") pero tampoco funciona
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por Ximorro »

Internet Explorer_Server es el control que contiene la página web, no se va a él con WinActivate.
En principio WinActivate es para ventanas, no para controles. Puedes activar la ventana del navegador, pero eso no te pone en el Edit.

Con Send puedes hacerlo haciendo TAB hasta que llegue al control, entonces mandas las teclas que quieres escribir.
O usa las funciones _IE..., no las conozco mucho porque no lo uso, pero seguro que se puede hacer.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
cloferba
Mensajes: 15
Registrado: 10 Oct 2009, 16:21

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por cloferba »

ya lo he intentado con tab y el area del navegador no queda activa como para poder utilizarla luego, si o si debo hacerle un click a la pagina para que quede activa, cuantos dolores de cabeza! :smt010
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Autonavegador, porq se sale?porq no se completan los cam

Mensaje por Ximorro »

Puedes activar la ventana con WinActivate, ¡pero la ventana, no el control!
En mi Explorer8 sería:
WinActivate("[Class:IEFrame]")

Después puedes pinchar en el control:
ControlClick("[Class:IEFrame]", "", "Internet Explorer_Server1", "main", 1, 0,0)

Los dos últimos números son las coordenadas, asegúrate de no pinchar en un enlace ;-)

Si la ventana está visible, es decir, no minimizada, puedes ahorrarte el WinActivate, pero es más seguro ponerlo. Y antes de ponerte a enviar Send no es mala idea asegurarse de que ya está activa con un WinWaitActive.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder