verificacion de captcha automatizada

Robots la parte programada en el ordenador, cibernetica, autoguiado del pc, algoritmos, recursividad
Responder
iamchavo
Hacker del Foro
Mensajes: 134
Registrado: 26 Mar 2009, 22:46

verificacion de captcha automatizada

Mensaje por iamchavo »

hola gente de autoit, arme este nuevo tema para ver si podian ayudarme con un problema.
estoy trabajando en blogger.com y tengo el programa de crear fondos para el facebook.
ya funciona perfecto , pero cuando subo 30 fondos ( osea 30 nuevos post) al blog me aparece la verificacion de captcha en el internet explorer ,pero en modo oculto.
como puedo hacer que si llegara a aparecer el captcha ,lo muestre en un cuadro que abajo de la imagen tenga una seccion para poder escribirlo y un boton de continuar.

el codigo fuente del captcha es el siguiente:

Código: Seleccionar todo

<input id="f-captchaKey" name="captchaKey" value="1f97po0dnv20" type="hidden">
<br>
<label for="f-captchaAnswer"><strong>Verificación de la palabra:</strong></label>
<br>
<img src="/captcha?type=IMAGE&captchaKey=1f97po0dnv20" alt="Verificación visual" height="70" width="200">
<br>
<input id="f-captchaAnswer" dir="ltr" tabindex="9" class="text" name="captchaAnswer">
<script type="text/javascript">
        function playCaptcha() {
          var wavURL = "/captcha?type\x3dAUDIO\x26captchaKey\x3d1f97po0dnv20";
          var embedCode = '<EMBED SRC=' + wavURL +
              ' HIDDEN="true" AUTOSTART="true" />';

          var audioContainer = document.getElementById("playAudio");
          audioContainer.innerHTML = "";
          audioContainer.innerHTML = embedCode;

          var answerField = document.getElementById("f-captchaAnswer");
          answerField.value = "";
          answerField.focus();
        }
      </script>

<a href="/captcha?type=AUDIO&captchaKey=1f97po0dnv20" onclick="playCaptcha();return false;" tabindex="10"><img src="/img/accessibility.png" style="display: inline; vertical-align: top;" alt="Anota los números que oigas." border="0" height="19" width="16"></a>
<span id="playAudio"></span>
<br>

muchas grax por su tiempo :)
iamchavo
Hacker del Foro
Mensajes: 134
Registrado: 26 Mar 2009, 22:46

Re: verificacion de captcha automatizada

Mensaje por iamchavo »

aloha :) , si los estube viendo pero no logro entender como hacerlo :( , vi un codigo que le pusieron a uno en uno de esos post y intente pero no entendia que hacer :/ , si me ayudaras con esto te super agredeseria.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: verificacion de captcha automatizada

Mensaje por Chefito »

Te recomiendo que te leas bien este post: http://www.emesn.com/autoitforum/viewto ... it=CAPTCHA

Ahí seguramente encontrarás la solución al problema.

Cito una parte de estos posts:
emma93 escribió:
Ahora, como hágo para poder mostrar la imagen de ImageBuilder.php ???

Bueno....para mostrarlo ya te dije que tenías que utilizar (_IECreateEmbedded). Buscala en la ayuda y mira su ejemplo. Adaptalo a tu programa y ya está.
Intenta tú algo, y si tienes algún problema dinoslo....pero intenta algo.
Intenta hacer algo de código y si te atascas en algo dinoslo.

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 ;).
iamchavo
Hacker del Foro
Mensajes: 134
Registrado: 26 Mar 2009, 22:46

Re: verificacion de captcha automatizada

Mensaje por iamchavo »

bueno dale , intentare ver si puedo hacer algo :)
nos vemos gente :D
iamchavo
Hacker del Foro
Mensajes: 134
Registrado: 26 Mar 2009, 22:46

Re: verificacion de captcha automatizada

Mensaje por iamchavo »

hola ,mira ya logre avanzar :)

Imagen

movi el $GUIActiveX hasta que me quedara solo la parte donde sale el captcha.
ahora mi duda es, como logro hacer que esta ventana solo aparesca cuando aparece el captcha en la pagina original.
estaba pensando en algo que lea el codigo fuente de la pagina y si encuentra alguna linea de las que puse al principio haga aparecer este cuadro.

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

_IEErrorHandlerRegister ()

$oIE = _IECreateEmbedded ()
GUICreate("Verificacion de  palabra:", 440, 280, _
		(@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2)
$GUIActiveX = GUICtrlCreateObj($oIE, -10, -550, 800, 730)
$GUI_Button_Aceptar = GUICtrlCreateButton("Aceptar", 160, 220, 100, 40)

GUISetState()       ;Show GUI

_IENavigate ($oIE, "http://www.blogger.com/post-create.g?blogID=4071206637957914261")

; Waiting for user to close the window
While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			ExitLoop
		Case $msg = $GUI_Button_Aceptar
			exitloop
	EndSelect
WEnd

GUIDelete()

Exit

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

Re: verificacion de captcha automatizada

Mensaje por Chefito »

Muy bien, me alegra que hayas avanzado :smt023 .

Si hiciese yo esto, seguramente lo enfocaria de otra forma.
Yo lo que haría es buscar el objeto captcha. Seguramente es un objeto IMG (imagen). Si es flash sería más complicado.
Intenta ver si esta imagen se identifica con la propiedad id o name. Si es así, ya lo tienes hecho. Solo tienes que mirar si ese objeto se encuentra en la página con las función _IEGetObjById o _IEGetObjByName respectivamente.

También estas imagenes suelen tener definida muchas veces la propiedad src la cual te indica la url donde carga la imagen. Si te aparece así, no hace falta que carges la página entera para ver el captcha, simplemente puedes cargar la página entera en modo oculto y en modo visible solamente la imagen del captcha. Es facil.

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 ;).
chavo toledo

Re: verificacion de captcha automatizada

Mensaje por chavo toledo »

alooha chefito , mira estaba viendo el ejemplo de _IEGetObjById en la ayuda de autoit , pero como lo aplico a mi problema.
mira el codigo fuente de la pagina es este.

Código: Seleccionar todo

<input id="f-captchaKey" name="captchaKey" value="1f97po0dnv20" type="hidden">
<br>
<label for="f-captchaAnswer"><strong>Verificación de la palabra:</strong></label>
<br>
<img src="/captcha?type=IMAGE&captchaKey=1f97po0dnv20" alt="Verificación visual" height="70" width="200">
<br>
<input id="f-captchaAnswer" dir="ltr" tabindex="9" class="text" name="captchaAnswer">
<script type="text/javascript">
        function playCaptcha() {
          var wavURL = "/captcha?type\x3dAUDIO\x26captchaKey\x3d1f97po0dnv20";
          var embedCode = '<EMBED SRC=' + wavURL +
              ' HIDDEN="true" AUTOSTART="true" />';

          var audioContainer = document.getElementById("playAudio");
          audioContainer.innerHTML = "";
          audioContainer.innerHTML = embedCode;

          var answerField = document.getElementById("f-captchaAnswer");
          answerField.value = "";
          answerField.focus();
        }
      </script>

<a href="/captcha?type=AUDIO&captchaKey=1f97po0dnv20" onclick="playCaptcha();return false;" tabindex="10"><img src="/img/accessibility.png" style="display: inline; vertical-align: top;" alt="Anota los números que oigas." border="0" height="19" width="16"></a>
<span id="playAudio"></span>
<br>
Entonces ,por ejemplo si uso el de _IEGetObjById me quedaria:

_IEGetObjById ($oIE, "f-captchaKey")

lo pongo con if ? cosa que quede:


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

if _IEGetObjById ($oIE, "f-captchaKey") = 1 then

_IEErrorHandlerRegister ()

$oIE = _IECreateEmbedded ()
GUICreate("Verificacion de palabra:", 440, 280, _
(@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2)
$GUIActiveX = GUICtrlCreateObj($oIE, -10, -550, 800, 730)
$GUI_Button_Aceptar = GUICtrlCreateButton("Aceptar", 160, 220, 100, 40)

GUISetState() ;Show GUI

_IENavigate ($oIE, "http://www.blogger.com/post-create.g?bl ... 7957914261")

EndIf


While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $GUI_Button_Aceptar
exitloop
EndSelect
WEnd

GUIDelete()

Exit
iamchavo
Hacker del Foro
Mensajes: 134
Registrado: 26 Mar 2009, 22:46

Re: verificacion de captcha automatizada

Mensaje por iamchavo »

buuu segui probando con lo de if ,pero es obvio que algo mal tengo jajaja, ayudeme señor chefito :( pliz
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: verificacion de captcha automatizada

Mensaje por Chefito »

Puedes probar así:

Código: Seleccionar todo

if _IEGetObjById ($oIE, "f-captchaKey")<>0 then
Lo que te devuelve es el objeto si está (no 1 como has puesto tú) o 0 si no lo encuentra. Le he puesto que si es distinto de 0 (o sea que lo ha encontrado) que entre en el if.

También puedes tratarlo con @error:

Código: Seleccionar todo

_IEGetObjById ($oIE, "f-captchaKey")
if @error=0 then
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 ;).
iamchavo
Hacker del Foro
Mensajes: 134
Registrado: 26 Mar 2009, 22:46

Re: verificacion de captcha automatizada

Mensaje por iamchavo »

muchas grax chefito , use el primer ejemplo que me dijsites y me funciono perfecto :) , ahora vienen los peros xD jajaja
quize usar la misma forma de codigo para leer otra parte de la pagina. pero se me creo un msgbox infinito, cuando apreto en el msgbox el boton de aceptar , me vuelve aparecer el msgbox y no me deja intentar poner el captcha devuelta . este codigo es para cuando ponen mal el captcha. , mira .

Código: Seleccionar todo

While 1
if _IEGetObjById ($IeObj, "statusmsg")<>0 then
	
   MsgBox(0,"Atencion", "Verificacion incorrecta") 
   
 

	   GUISetState(@SW_SHOW)
	
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
		Case $msg = $GUI_Button_Aceptar
			GUISetState(@SW_HIDE)
			$edicion=_IEGetObjById($IeObj,"publishButton")
            $edicion.click
			_IeLoadWait($IeObj)
			exitloop
		EndSelect
		
		  
EndIf
WEnd
intente de varias maneras pero no me dejo ,poniendo el endif despues del wend o cosas asi.
lo que necesito es que cuando pongan mal el codigo le aparesca el msgbox de "Verificacion incorrecta"
y deje intentar ponerlo devuelta , y cuando se aprete el boton aceptar. vuelva arriba y se fije si sigue todavia apareciendo ( if _IEGetObjById ($IeObj, "statusmsg")<>0 then ) statusmsg en el codigo fuente, cosa que si aparece es porque puso devuelta mal el captcha.

otra duda que tengo, como cierro todos los ie ? porque ahi veces que en el admnistrador de tareas me quedan abiertos como 4 o 5. porque cuando cierro el programa los ie ,siguen corriendo y se acumulan :( , queria poner algo en el

Código: Seleccionar todo

Case $msg = $GUI_EVENT_CLOSE
para que cuando apreten la X de cerrar ,cierre el programa y todos los ie.


saludos , espero su respuesta señor , creo que este es el ultimo problema del programa :P .pero a la larga siempre aparecen mas lamentablemente u.u
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: verificacion de captcha automatizada

Mensaje por Ximorro »

Venga iamchavo que tú te pegas mucho con AutoIt y ya no eres tan principiante, tienes que fijarte en las estructuras de control. Yo como para web no programo no he seguido el hilo pero mira tu estructura:

Código: Seleccionar todo

While 1
  If condición Then
     MsgBox(0,"Atencion", "Verificacion incorrecta")
     El SELECT del GUI
  EndIf
WEnd
Simplemente tienes que leerla, ahí pone:
Mientras CIERTO (pues 1=TRUE), o sea, REPETIR INDEFINIDAMENTE:
Si se cumple cierta condición sacar un msgbox y comprobar eventos del GUI. Si no se cumple HACER NADA.

Primera, si la condición no se cumpliera entrarías en un bucle infinito, pues el if sería como si no estuviera y se quedaría ejecutando:
While 1
Wend
¡Y no habría manera de salir de ahí, pues ni siquiera mira los eventos del GUI!

Al cumplirse la condición, cada vuelta que pega al While, sacas el MsgBox, con lo que eso lo hará indefinidamente hasta que salgas en el GUI, pero como estás cerrando el MsgBox no te da tiempo a darle a cerrar al GUI y antes de darle a salir ya te ha vuelto a salir el MsgBox... y vuelta a empezar.

¿Ves el problema? Tienes que fijarte más en estas cosas, y analizar con lógica cómo se comporta el programa, haz una especie de seguimiento como si tú fueras el ordenador y lo ejecutas mentalmente, que es lo que he hecho para hacerte esta explicación.

No sé cómo solucionarlo para que te haga exactamente lo que quieres hacer, porque como digo no he hecho el seguimiento del hilo, pero para arreglar lo del while infinito una opción QUIZÁS sea sacar el MsgBox una vez, y después quedarse mirando el GUI:

Código: Seleccionar todo

If condición Then
   MsgBox(0,"Atencion", "Verificacion incorrecta")
EndIf
While 1
   El SELECT del GUI
WEnd
Eso arregla el problema del bucle infinito porque ahora el mensaje sale sólo una vez y puedes salir del bucle usando el GUI. Lo que no sé si corresponde con el objetivo del programa, repito que eso no lo he mirado. Otra opción es meter el While dentro del IF, en ese caso sólo haría lo del GUI si sale el error, y no siempre, esa solución también soluciona el problema del bucle infinito, pero es diferente, como ves la solución adoptada ya depende de cómo quieres manejar ese error.

Ale, espero haberte enseñado algo más, aprende a manejar las estructuras de control y controlarás AutoIT muchísismo más.
Saludosss
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
iamchavo
Hacker del Foro
Mensajes: 134
Registrado: 26 Mar 2009, 22:46

Re: verificacion de captcha automatizada

Mensaje por iamchavo »

aloha ximorro , grax por la ayuda , fue un descuido mio jajaja , empezare a ver desde otra perspectiva los comandos asi veo como funcionarian.

mira hice como dijistes de poner el while dentro del if y funciono lo del infinito.

Código: Seleccionar todo

	if _IEGetObjById ($IeObj, "statusmsg")<>0 then 
		

While 1
	
	
	   GUISetState(@SW_SHOW)
	
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
		Case $msg = $GUI_Button_Aceptar
			GUISetState(@SW_HIDE)
			$edicion=_IEGetObjById($IeObj,"publishButton")
            $edicion.click
			_IeLoadWait($IeObj)
			
		EndSelect
		
	

WEnd


 EndIf
pero se me habia metido otro problema :P jajaja , es que cuando ponia bien el captcha me queda abierto el GUI, algo parecido a lo que pasaba con el MSGBOX, intente agregando una funcion que mire la URL y la compare , si es distinta ,es porque el captcha esta bien puesto y cambio de pagina. y me funciono :).

Código: Seleccionar todo

	if _IEGetObjById ($IeObj, "statusmsg")<>0 then 
		

While 1
	
	
	   GUISetState(@SW_SHOW)
	
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
		Case $msg = $GUI_Button_Aceptar
			GUISetState(@SW_HIDE)
			$edicion=_IEGetObjById($IeObj,"publishButton")
            $edicion.click
			_IeLoadWait($IeObj)
			
			$s_Dir2 = _IEPropertyGet($IeObj,"locationurl")
      ConsoleWrite($s_Dir2 & @CRLF)
	  
			$urlX2 = "http://www.blogger.com/post-create.do"

   If $urlX2<>$s_Dir2 Then 

   exitloop
  EndIf
		EndSelect
		
	

WEnd


 EndIf

Y esto la verdad que me puso demasiado feliz y me dio un empujon a seguir con todo este ambiente de programacion. estube desde ayer a la noche probando y probando y siempre ponia algo mal y hace 10 minutos iba a tirarme abajo y dejar de intentar , pero dije no , voy a intentar un poco mas . y porfin logre hacer andarlo como debe. muchas grax por su ayuda de siempre :) , grax por la pasiencia y bancar todos mis errores :P , jajaja.

un saludos a todos y nos veremos en la proxima individuos :)
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: verificacion de captcha automatizada

Mensaje por Ximorro »

Bueno si quieres que salga el mensaje también tienes que ponerlo dentro del IF, pero fuera del WHILE, a eso me refería.

Me alegro de que lo hayas solucionado solo. ¿A que es gratificante? Mucho mejor que pedir que te lo arreglen y hacer copy-paste a ciegas, sin saber cómo se ha hecho. De esa manera no se aprende nada. Hay que fijarse en qué hacen lo que te pasan para ver cómo se ha solucionado por si te sirve para el futuro. Y cuando te falla el programa hay que hacer esa especie de seguimiento para ver qué está haciendo, que igual no es lo que quieres, aunque se lo has dicho tú.

Una frase que leí hace mucho tiempo sobre manejar ordenadores, lo que incluye a la programación.
"Los ordenadores no hacen lo que quieres que hagan, sino lo que les dices que hagan."

Creo que me la pondré en la firma ;-)
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2083
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: verificacion de captcha automatizada

Mensaje por BasicOs »

Aquí va un programa que sirve para reconocer texto en la pantalla con OCR con Tesseract ((Screen OCR) UDF Recognise the text in windows, controls and the desktop )
http://www.autoitscript.com/forum/index ... opic=89542
Salu22:)
Responder