Página 1 de 1

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

Publicado: 29 Sep 2011, 05:20
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

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

Publicado: 29 Sep 2011, 08:46
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

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

Publicado: 29 Sep 2011, 15:50
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

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

Publicado: 30 Sep 2011, 03:08
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.

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

Publicado: 01 Oct 2011, 03:44
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 :(

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

Publicado: 01 Oct 2011, 18:34
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.

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

Publicado: 03 Oct 2011, 17:42
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

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

Publicado: 04 Oct 2011, 02:51
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:)

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

Publicado: 04 Oct 2011, 08:44
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?

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

Publicado: 06 Oct 2011, 01:15
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

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

Publicado: 06 Oct 2011, 08:01
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.

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

Publicado: 07 Oct 2011, 01:30
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

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

Publicado: 07 Oct 2011, 09:46
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.