En este artículo intentaré explicar la problemática de los Captchas.
Algunos clientes tienen que lidiar con este contratiempo, así que voy resumir muy por encima que acciones podemos tomar, tanto para resolver el temido reCaptcha como con los costes que pueden surgir si hay que atacarlos de forma masiva.
Intentaré no ser muy técnico. Para presentar lo que es un Captcha bastará con una simple imagen, he sombreado la foto para que no tengas la tentación de pulsar en «No soy un robot».
Voy a hacer uso de 2captcha.com, que a través de su servicio de reconocimiento de imágenes y resolución de Captchas nos permitirá resolver estos «puzzles para humanos».
A fecha de hoy, tal como anuncian en su web, el coste es de 2,99$ por cada 1000 resoluciones de Captcha.
Para entender como usar su API voy a crear un proyecto rápido con la herramienta HTTP Master.
Para empezar, introduciré la ruta de la web donde me ha aparecido el captcha.
En este caso estoy usando un formulario de pruebas de Google pero podría aparecer en cualquier otro sitio, como por ejemplo: www.estoesunawebinventada.net/recargar-mi-telefono-movil/
Al hacer la petición, en el RESPONSE BODY tendremos un IFRAME desde donde se está cargando el Captcha.
Puedes hacer una búsqueda desde tu navegador para inspeccionar el código.
Nos interesa capturar el valor de data-sitekey. Puede aparecer en el código o también en la propia ruta del recaptcha, dentro del propio IFRAME.
<iframe name="a-lzb575yu408u" width="304" height="78" role="presentation" src="https://www.google.com/recaptcha/api2/anchor?ar=1&k=6Lf_uw4TAAAAAKEDSSlJjEi6ZTctd7V9oMCnvtcc&co=aHR0cHM6Ly9hcmRpbGxhLmFpOjQ0Mw..&hl=es&v=RDiPdrU_gv1XhhWy6nqfMf9O&size=normal&cb=32h4gna7hq09" frameborder="0" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation" winautomationvisibilitylandmark="false"></iframe>
Lo más sencillo para esta prueba rápida es usar una expresión regular como puedes ver en el pantallazo de HTTP Master.
Almacenaré este resultado en la variable sitekey_chain y lo pasaré como parámetro en la siguiente petición.
Si estás mirando la sintaxis de la URL, el primer parámetro {key_parameter} será la clave que te habrán facilitado al hacer un ingreso en su plataforma.
Es decir, tendremos que darnos de alta y hacer una recarga. Desde nuestro panel veremos nuestro número de API KEY secreto. Será similar a esta pantalla.
Después de realizar esta segunda petición obtenemos un valor de texto (caso por defecto) o en formato JSON.
Ya tenemos el identificador del Captcha, este valor lo guardaré en la variable {in_chain}.
Una vez recuperamos este identificador hay esperar un tiempo prudencial para que 2captcha pueda resolver y enviarnos la cadena que utilizaremos para saltarnos el Captcha.
En su web indican que es recomendable esperar de 15 a 20 segundos pero no es raro tener que esperar incluso hasta 60 segundos o más.
Es decir, si nuestra intención es resolver muchos Captchas no solo vamos a tener que emplear algo de dinero en recargas, sino que también nos va a consumir tiempo. Es algo a tener en cuenta.
Si ejecutamos toda la secuencia de forma correcta pero sin la espera nos devolverá CAPTCHA_NOT_READY.
Aquí puedes ver como he vuelto a abrir un Request de forma manual para ejecutar la petición de nuevo. Al ejecutarlo ya obtengo la respuesta que necesitaba, nos devuelve el OK junto con la resolución.
Terminada esta parte ya podríamos introducir esa cadena en el captcha. Voy a hacerlo de forma manual para mostrar el proceso.
Abro el navegador y localizo el textfield oculto que hay en el recaptcha.
Para que sea algo visual y poder mostrarlo, he desactivado la propiedad display:none y he pegado la respuesta de la última petición a 2catpcha.
Ahora puedo pulsar el botón enviar y me puedo saltar la verificación sin mayor problema.
Llegados hasta aquí, quizá alguien esté pensando… ¿y por qué no has marcado la casilla y ya esta? Parece mucho más fácil.
A veces desde nuestro navegador nos da por válida la esa interacción, pero si encadenamos unos cuantos, este otro tipo de verificación va a ser la habitual:
Ahora ya no es tan fácil como marcar la casilla.
Una vez el proceso ha quedado claro vamos a ver como sería de forma esquemática con WinAutomation.
Resolver captchas con WinAutomation
Empezamos lanzando un navegador y accediendo a la web donde está el reCaptcha.
En la extracción, podemos sacar el iframe o simplemente todo el contenido.
Como recordarás, con esto sacamos el data-sitekey.
2captcha.com/in.php?key=AQUI_VA_TU_CLAVE_DE_2CAPTCHA&method=userrecaptcha&googlekey=6Lf_uw4TAAAAAKEDSSlJjEi6ZTctd7V9oMCnvtcc&pageurl=https://scraper.es/micaptcha/
Esta petición la podemos lanzar con la acción Download from web.
Como estamos haciendo la petición por defecto, nos devolverá el resultado en formato texto. Si te sientes más cómodo puedes hacerlo con JSON.
Sacamos el valor sin el parámetro de la respuesta con un Split Text usando la barra vertical como separador.
Y con este valor hacemos la segunda petición a 2captcha, recuerda que tendrás que esperar a que puedan servirte la solución del Captcha.
Una vez tengas la respuesta tendremos que rellenar el textarea oculto.
Lo resolvemos con la acción Execute Javascript Function On Web Page de esta forma:
Y ya puedes pulsar el botón de envío de formulario.
El captcha estará resuelto.
Las herramientas que necesitarás para seguir este tutorial son las siguientes: