Ayuda para desloguearme de un foro

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Mithrandir
Mensajes: 27
Registrado: 01 Jun 2009, 02:41

Ayuda para desloguearme de un foro

Mensaje por Mithrandir »

Buenas, estoy haciendo un script para desloguearme de un foro. He probado muchas formas he aquí una:

Código: Seleccionar todo

#include <IE.au3>

$oIE = _IECreate ("http://forums.linkbucks.com/")

$oForm = _IEFormGetCollection ($oIE, 0)

$oQuery = _IEFormElementGetCollection ($oForm, 0)

$oQuery2 = _IEFormElementGetCollection ($oForm, 2)

_IEFormElementSetValue ($oQuery, "usuario")

_IEFormElementSetValue ($oQuery2, "contraseña")

_IEFormSubmit ($oForm)

Sleep(10000);preferíria no tener que depender de esto :P

_IELinkClickByText ($oIE, "Log Out")

Sleep(10000);preferíria no tener que depender de esto :P

Send("{ENTER}")
El tema es que luego de que me aparece la ventana donde me pregunta si me quiero desloguear el script se queda sin hacer nada...no me da errores simplemente se queda inactivo por más que después le doy enter y me deslogueo :S . Decidí usar controles de ventana porque con el autoitwindow vi que no tenía un control llamado "Internet Explorer_Server" así que como sugiere en la ayuda:

Código: Seleccionar todo


Remarks

_IEAttach provides the "dialogbox" parameter to attach to modal and modeless dialogs created by the browser. It is important to note that not all dialogs created through browser interaction can be attached to and controlled in this way. Many of these dialogs are actually standard windows and can be controlled through the traditional AutoIt window functions. A reliable way to tell the difference between these types of windows is to use the "AutoIt Window Info" tool to examine it -- if the window contains a control called "Internet Explorer_Server" then you can attach to it with this function, if it does not it is a standard window and traditional AutoIt windows functions must be used to control it.
Me decidí a tratarlo como una ventana. Desde ya gracias por su ayuda. Edito:Agregué capturas de la ventana que me aparece al desloguearme (logout.jpg), y su información (logoutwindowinfo.jpg) asi como de la información del botón de "aceptar" de la ventana (aceptarinfo.jpg)

PD: Probé con otro código usando funciones de _IE Management (por más que no creo que me sirvan porque me parece que es una ventana de windows lo que me aparece y no una interna del explorador) y me dio estos errores:

Código: Seleccionar todo

#include <IE.au3>

$oIE = _IECreate ("http://forums.linkbucks.com/")

$oForm = _IEFormGetCollection ($oIE, 0)

$oQuery = _IEFormElementGetCollection ($oForm, 0)

$oQuery2 = _IEFormElementGetCollection ($oForm, 2)

_IEFormElementSetValue ($oQuery, "usuario")

_IEFormElementSetValue ($oQuery2, "contraseña")

_IEFormSubmit ($oForm)

Sleep(10000)

_IELinkClickByText ($oIE, "Log Out")

$oIE2 = _IEAttach ("Windows Internet Explorer", "dialogbox")

_IEAction ($oIE2, "focus")

ControlSend("Windows Internet Explorer", "Aceptar", 1, "{ENTER}")

Código: Seleccionar todo

>"C:\Archivos de programa\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Documents and Settings\Pablo\Escritorio\TEST PARA DESLOGUEARME 2.au3" /autoit3dir "C:\Archivos de programa\AutoIt3" /UserParams    

+>13:16:09 Starting AutoIt3Wrapper v.2.0.0.1    Environment(Language:0C0A  Keyboard:0000040A  OS:WIN_XP/Service Pack 3  CPU:X86 OS:X86)

>Running AU3Check (1.54.14.0)  from:C:\Archivos de programa\AutoIt3

+>13:16:09 AU3Check ended.rc:0

>Running:(3.3.0.0):C:\Archivos de programa\AutoIt3\autoit3.exe "C:\Documents and Settings\Pablo\Escritorio\TEST PARA DESLOGUEARME 2.au3"    

--> IE.au3 V2.4-0 Error from function _IEAction, $_IEStatus_InvalidObjectType

+>13:17:04 AutoIT3.exe ended.rc:0

+>13:17:05 AutoIt3Wrapper Finished

>Exit code: 0    Time: 57.401
Adjuntos
aceptarinfo.JPG
aceptarinfo.JPG (63.8 KiB) Visto 2272 veces
logoutwindowinfo.JPG
logoutwindowinfo.JPG (60.15 KiB) Visto 2272 veces
logout.JPG
logout.JPG (13.21 KiB) Visto 2272 veces
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Ayuda para desloguearme de un foro

Mensaje por Chefito »

Prueba con este código para pulsar el botón Aceptar a ver si hay suerte :smt003 :

Código: Seleccionar todo

$WHnd=WinGetHandle("Windows Internet Explorer","Are you sure you want to log out?")

ControlClick($WHnd,"","[CLASS:Button; INSTANCE:1]","left",2)
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 ;).
Mithrandir
Mensajes: 27
Registrado: 01 Jun 2009, 02:41

Re: Ayuda para desloguearme de un foro

Mensaje por Mithrandir »

No me funcionó :/ sigue sin cliquear en Aceptar...Además tengo unas dudas de una parte del código que me mandaste:

Código: Seleccionar todo

ControlClick($WHnd,"","[CLASS:Button; INSTANCE:1]","left",2)
En $WHnd ¿no tiene que ir el nombre de la ventana a la que queremos mandarle el click? ¿o se puede poner una variable?

En [CLASS:Button; INSTANCE:1] alcanza con poner 1 en su lugar que es el ID del botón aceptar no?

¿Al final pusiste 2 clicks no? Pero alcanza con uno

Ojo, no estoy criticando :) estoy preguntando y viendo de paso a ver si entendí los parámetros de ControlClick. Acá yo hice otro pero tampoco me dio resultado:

Código: Seleccionar todo

ControlClick("Windows Internet Explorer", "Are you sure you want to log out?", "1")
Avatar de Usuario
XPyro
Profesional del Autoit
Mensajes: 542
Registrado: 04 Mar 2007, 10:12
Ubicación: México
Contactar:

Re: Ayuda para desloguearme de un foro

Mensaje por XPyro »

Prueba borrando todas las cookies :smt023
Imagen
Mithrandir
Mensajes: 27
Registrado: 01 Jun 2009, 02:41

Re: Ayuda para desloguearme de un foro

Mensaje por Mithrandir »

XPyro escribió:Prueba borrando todas las cookies :smt023
¡Gracias XPyro! Es una idea muy ingeniosa :smt002 Es este el código no? :

Código: Seleccionar todo

FileDelete(@UserProfileDir & "\Cookies\*.txt")


¿Todos los foros te mantienen logueado por una cookie?
Igualmente me gustaría intentar con los handle para la ventana esa un poco más. Intenté otras cosas pero no me reportaron errores me sigue pasando lo mismo que se queda sin clickear el aceptar. Si quieren más información diganme nomás que la pongo :smt020
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Ayuda para desloguearme de un foro

Mensaje por Chefito »

La forma que te comenta Xpyro para mi que es la más facil, rápida y correcta :smt023 .
Pero no deberías borrar solo las cookies que te genera esa página???? Para que borrarlas todas, no? :smt001 .

Como veo que te gustaría hacerlo también de la otra forma, te cuento. He visto que el controlclick con esa ventana si funciona....una vez que está cargada independientemente. Por lo visto si lo cargar cliqueando el link desde el script, el script se detiene y no continua hasta que le das a Aceptar o Cancelar. Por eso nunca funciona :smt017 .

Supongo que se podría hacer de alguna forma complicada, pero para que complicarse habiendo formas más faciles y más correctas como la idea de Xpyro???

Otra forma que se me ha ocurrido es capturando del código html de la página web la dirección de deslogeo y ejecutándola en el IE. Pero es menos correcta. Dejo un ejemplo:

Código: Seleccionar todo

#include <IE.au3>

$oIE = _IECreate ("http://forums.linkbucks.com/")

$oForm = _IEFormGetCollection ($oIE, 0)

$oQuery = _IEFormElementGetCollection ($oForm, 0)

$oQuery2 = _IEFormElementGetCollection ($oForm, 2)

_IEFormElementSetValue ($oQuery, "prueba0")

_IEFormElementSetValue ($oQuery2, "prueba")

_IEFormSubmit ($oForm)

While 1

    Sleep(250)

    $textHtml=_IEDocReadHTML($oIE)

    If StringInStr($textHtml,"login.php?do=logout&logouthash=") Then ExitLoop

WEnd

$deslogear=StringRegExp($textHtml,'do=logout&logouthash=(.*?)"',1)

_IENavigate($oIE,"http://forums.linkbucks.com/login.php?do=logout&logouthash=" & $deslogear[0])
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
XPyro
Profesional del Autoit
Mensajes: 542
Registrado: 04 Mar 2007, 10:12
Ubicación: México
Contactar:

Re: Ayuda para desloguearme de un foro

Mensaje por XPyro »

Es correcto la función para eliminar las Cookies

Prueba para el botón:

Código: Seleccionar todo

ControlClick("Windows Internet Explorer", "Are you sure you want to log out?", "Button1")
Imagen
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Ayuda para desloguearme de un foro

Mensaje por Chefito »

Como ya dije en el anterior post, esto no funciona en el mismo script al utilizar la función anterior para cliquear un link ( _IELinkClickByText ($oIE, "Log Out") ) u otra similar para cliquear el link. Por lo visto llama a una función ( onclick="return log_out('Are you sure you want to log out?')" ) que hace saltar un confirm. Este confirm es modal, y no se la causa, pero parece ser que el script lo trata como un msgbox de AutoIt, el cual también es modal y para el script hasta que no se de aceptar.
Lo que pasa, que si cliqueas por tu cuenta Log Out haciendo salir esta caja confirm y en un script aparte poner el controlclick, si te va a funcionar, al no ser el propio script el que ha cliqueado.
No se si se podría saltar esto con un Adlin o una función timer antes de cliquear el link, para llamar a una función que contenga el controlclick y lo pueda ejecutar de forma asíncrona. Supongo que sí.

Otro apunte, a mi no me sale de título "Windows Internet Explorer", me sale "Mensaje de página web". Viendo que puede cambiar esto, es mejor dejar este parámetro en blanco.
Y por que puse 2 click con el boton izquierdo en vez de uno? Pues porque a mi el primer click parece ser que solo me marcaba el botón, y con un segundo click lo terminaba de pulsar. Dejo como creo que debería ser la función:

Código: Seleccionar todo

ControlClick("", "Are you sure you want to log out?", "[CLASS:Button; INSTANCE:1]","left",2)
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 ;).
Responder