ReCaptcha (es el popular
"captcha" ) es una de las cosas más dolorosas que un autómata de pruebas puede encontrar en su camino. Miles de videos grabados por inmigrantes de la soleada India están caminando en la Web sobre lo que baila con una pandereta, es posible engañar a esta bestia. De hecho, es bastante difícil tratar de interactuar con los scripts programados con algo cuyo propósito principal es asegurarse de que "usted no sea un robot".
Un descargo de responsabilidad muy importante:
es imposible engañar a un captcha.Si ya ha encontrado este problema y está leyendo este artículo tratando de buscar en Google una receta para una panacea, sepa que no existe. Además, en su cabeza es muy probable que surjan ideas innovadoras sobre la simulación de un comportamiento realista del usuario utilizando WebDriver, mediante el desplazamiento aleatorio de elementos por parte del mouse, clics en las entradas y Thread.sleep () cuidadosamente colocado. Es absolutamente conocido que este enfoque no funcionará, no pierdas tu tiempo en vano.
Resulta que no hay salida?No todo es tan pesimista. A veces es suficiente intentar dar la respuesta más precisa a la pregunta "¿Cuál es el desafío que enfrento?" y mira la situación más amplia. En la mayoría de los casos, comprenderá que su objetivo no es engañar al captcha, sino evitarlo para probar la funcionalidad oculta detrás de él. En el ejemplo de mi caso, compartiré con ustedes las opciones que he encontrado para resolver la tarea.
Contexto: integramos parte de nuestro producto en un servicio de terceros y queríamos monitorear si todo está bien de su parte, porque no cubren partes de terceros de su plataforma. Para obtener acceso a nuestra funcionalidad, primero tenía que iniciar sesión. Fue entonces cuando me encontré con el captcha cara a cara. A continuación, doy todas las opciones que he tratado de sortear este problema.
No trabajo
Inicie sesión a través de Google o Facebook
Además de la autenticación clásica, hubo un inicio de sesión canónico con Google / Facebook. Por supuesto, su "captcha" también estaba presente allí, por lo que esta opción no ayudó a resolver el problema.
Simula el comportamiento del usuario
Sí, lo probé también. Fue divertido, pero demasiado ingenuo.
Trabajadores
Perfiles de Chrome / Firefox
Hablemos de la primera opción "en vivo". Los controladores para estos navegadores (chromedriver / geckodriver) tienen la capacidad de arrancar bajo un perfil de usuario predefinido. Almacena todas las contraseñas almacenadas, cookies, sesiones e incluso el historial del navegador y los marcadores. Es decir por lo tanto, simplemente nos perdimos el paso de inicio de sesión que no es absolutamente importante para nuestra tarea, y así llegamos directamente a la página con el objeto de prueba. Se implementa de la siguiente manera:
- Crear un perfil de navegador "limpio"
- Ingrese manualmente el captcha e inicie sesión en el recurso deseado
- Copie el perfil requerido a nuestro proyecto (COMO para Firefox y Chrome )
Después de eso, debemos decirle al controlador que debe cargarse desde el perfil especificado:
Firefox
Cromo:
Este enfoque demostró ser bueno cuando se probó en una máquina local con un navegador instalado y los controladores gecko / cromed habituales, pero hubo problemas al ejecutar en Jenkins. Estamos elevando el concentrador y los nodos de Selenium dentro del clúster de Kubernetes, por lo que tuvimos problemas en forma de un directorio que era demasiado largo para montar el directorio dentro del contenedor (un perfil limpio en promedio pesa unos 25 MB, que es bastante), así como algunos problemas con los permisos CRUD del navegador, que no se pudieron realizar cambios en el perfil en tiempo de ejecución y se produjo una ejecución de "error desconocido: no se pudo escribir el archivo de preferencias". Además, actualizar el perfil después de que las cookies y las sesiones hayan alcanzado sus Fechas de caducidad es bastante inconveniente, y no quería mantener una carpeta enorme con los elementos internos del perfil en el proyecto, por lo que finalmente se eligió la siguiente opción.
Cookies
"Y la caja se abrió": así es como fue posible describir la situación, después de que agregamos las cookies recibidas manualmente al controlador. El algoritmo de acciones es lo más simple posible y no depende del navegador seleccionado:
- Inicie sesión manualmente
- A través de la red buscamos encabezados de solicitud -> Cookies que envía nuestro navegador
Agréguelos a nuestras pruebas de la siguiente manera:
La desventaja obvia de este enfoque es la necesidad de cambiar manualmente las cookies después de que su período de validez haya expirado. Pero, dado que este período es de 3 meses en la plataforma probada, elegimos esta solución.
¿Y si no necesito iniciar sesión?
Pero, ¿qué pasa con la situación cuando no se trata de autorizaciones y sesiones, sino de la comisión de una acción única (por ejemplo, hacer un pedido de la canasta, registrar un nuevo usuario, etc.)? Aquí la situación es aún peor. Dos opciones que pude encontrar son:
- Acuerde con sus desarrolladores proporcionarle algún tipo de solución alternativa. Google brinda esa oportunidad , pero recuerda que conscientemente haces un pequeño agujero en la seguridad.
- Aproveche los servicios pagos de terceros que toman una captura de pantalla de captcha de su parte, intente decodificarla y enviarle un valor descifrado. Yo mismo no he probado este método y no puedo recomendarlo por completo.
Para resumir
Como puede ver, no hay situaciones desesperadas. Sin embargo, sería una tontería negar que absolutamente todas las opciones anteriores tienen sus propias desventajas, bastante significativas, por lo que la elección es suya.
Gracias por su atencion
PD: si conoce otras soluciones que funcionan en la vida real, descríbalas en los comentarios, será muy interesante leerlas.