Cómo evitar los CAPTCHA con Cypress

Descubra cómo gestionar los CAPTCHA en Cypress, incluidos métodos eficaces para evitarlos y qué hacer cuando los CAPTCHA persisten, garantizando una automatización fluida del navegador.
10 min de lectura
How to Bypass CAPTCHAs With Cypress blog image

En este artículo aprenderás:

  • Qué son los CAPTCHA y si se pueden eludir
  • La relación entre Cypress y los CAPTCHA
  • Cómo implementar la lógica de omisión de CAPTCHA de Cypress
  • Qué hacer en caso de que el CAPTCHA siga apareciendo

¡Empecemos!

¿Qué es un CAPTCHA y es posible automatizarlo?

Un CAPTCHA, que significa «pruebas de Turing públicas completamente automatizadas para distinguir entre ordenadores y humanos», es un método utilizado para diferenciar a los usuarios reales de los bots automatizados. Se trata de un reto diseñado para que sea fácil de resolver para los humanos, pero difícil para las máquinas. Por lo general, los CAPTCHAs se utilizan en partes específicas de una página web para mantener alejados a los bots.

Google reCAPTCHA, hCaptcha y BotDetect son los proveedores de CAPTCHA más populares. Estos admiten uno o más de los siguientes retos:

  • CAPTCHAs basados en texto: los usuarios deben escribir una secuencia de letras y/o números distorsionados.
  • CAPTCHAs basados en imágenes: los usuarios deben identificar objetos específicos en una cuadrícula de imágenes.
  • CAPTCHAs basados en audio: se pide a los usuarios que escriban las palabras que oyen.
  • CAPTCHAs tipo rompecabezas: los usuarios deben responder a una pregunta sencilla o resolver un minijuego sencillo, como hacer clic en la entidad correcta.
Puzzle CAPTCHA example

Los CAPTCHA se pueden integrar en flujos de usuarios específicos para evitar que los bots los completen, como al enviar un formulario:

captcha as a step of a form submission process example

En estos casos, el CAPTCHA siempre se muestra y no puede ser eludido fácilmente por la lógica automatizada. Puede integrar su software con bibliotecas de Resolución de CAPTCHA o utilizar servicios que dependen de operadores humanos para resolver estos retos en tiempo real. Sin embargo, los CAPTCHA codificados son poco comunes porque resultan molestos y degradan la experiencia del usuario.

Más comúnmente, los CAPTCHA forman parte de soluciones antibots más avanzadas, como los WAF (cortafuegos de aplicaciones web):

Example-of-a-Web-Application-Firewall

Estas soluciones muestran dinámicamente un CAPTCHA cuando sospechan que el usuario actual puede ser un bot. En tales casos, los CAPTCHA se pueden evitar haciendo que su bot se comporte como un humano y utilizando un navegador real. No obstante, se trata de una batalla continua que requiere actualizar constantemente su script automatizado para hacer frente a las medidas de detección de bots en constante evolución.

Una solución más eficaz para evadir los CAPTCHA es utilizar una herramienta basada en la emulación de usuarios que esté siempre actualizada, como el CAPTCHA Solver de Bright Data.

CAPTCHAs y Cypress: una mala relación

Cypress es una herramienta de pruebas front-end creada para la web moderna. Aunque se puede utilizar para tareas generales de automatización del navegador, como el Scraping web, su objetivo principal son las pruebas de extremo a extremo(E2E). Eso significa que está diseñada para interactuar principalmente con sitios y páginas web sobre los que tienes control.

Si utiliza Cypress para dirigirse a sitios externos o de terceros, empezarán a surgir problemas. Como se destaca en la documentación oficial, la mejor práctica es evitar interactuar con sitios de terceros en la medida de lo posible. Una de las principales razones que se destacan en la documentación es, concretamente, el riesgo de ser detectado como un bot y recibir un CAPTCHA.

¿Por qué es esto un problema? Porque los CAPTCHA están diseñados para detener los scripts automatizados. Por lo tanto, pueden obstaculizar el funcionamiento de la automatización del navegador Cypress. Al mismo tiempo, es importante señalar que eludir los CAPTCHA en Cypress es complicado, pero posible. ¡Descubre más en las siguientes secciones!

Cómo manejar los CAPTCHA en Cypress

Como acabas de aprender, los CAPTCHA son uno de los principales retos de Cypress, tal y como reconoce la propia herramienta en su documentación. Sin embargo, aún no es momento de tirar la toalla. Exploremos algunos enfoques potenciales para implementar la lógica de omisión de CAPTCHA en Cypress.

Enfoque n.º 1: desactivar los CAPTCHAs

Los proveedores de CAPTCHA suelen ofrecer una forma de desactivar u omitir los retos en un entorno de pruebas. Si tienes control sobre el sitio en el que necesitas realizar la automatización, debes desactivar por completo el mecanismo CAPTCHA o sustituirlo por una versión más sencilla.

Por ejemplo, con reCAPTCHA v3, puede crear una clave separada para entornos de prueba. Para reCAPTCHA v2, puede utilizar las siguientes claves de prueba:

  • Clave del sitio: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
  • Clave secreta: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

Al utilizar estas claves, siempre obtendrá un widget reCAPTCHA «Sin CAPTCHA» como el que se muestra a continuación:

Esto mostrará un mensaje de advertencia especial para garantizar que no se utilice en producción. Automatice el clic en esa casilla y la verificación anti-bot siempre se superará. Obtenga más información en la documentación de reCAPTCHA.

Tenga en cuenta que otros proveedores de CAPTCHA ofrecen mecanismos similares.

Enfoque n.º 2: automatizar la interacción con el CAPTCHA

Algunos CAPTCHAs solo requieren acciones sencillas, como hacer clic en una casilla de verificación, como en el widget «No CAPTCHA» de reCAPTCHA:

Simple clicking CAPTCHA example

Estos retos pueden parecer sencillos, pero en realidad pueden ser sofisticados, ya que analizan los movimientos del ratón para determinar si eres humano. Sin embargo, no todos los CAPTCHA son tan complejos. Algunos están diseñados para detener los bots básicos y son más fáciles de eludir. En tales casos, puedes intentar automatizarlos utilizando alguna lógica de Cypress.

Si inspecciona el elemento CAPTCHA del ejemplo anterior, verá que es un iframe:

Inspecting the CAPTCHA element

Este es un comportamiento común para la mayoría de los proveedores de CAPTCHA.

Ten en cuenta que Cypress no puede gestionar automáticamente los iframes entre dominios. Para superar esa limitación, establece la propiedad chromeWebSecurity en false en el archivo cypress.json:

{

"chromeWebSecurity": false

}

A continuación, puede seleccionar el elemento de casilla de verificación CAPTCHA y hacer clic en él. En el caso de un widget reCAPTCHA «Sin CAPTCHA», el código de automatización para hacerlo será:

cy.get('iframe[src*=recaptcha]')

.its('0.contentDocument')

.should(d => d.getElementById('recaptcha-token').click())

Recuerde que esto es solo una solución alternativa y no funcionará en la mayoría de los casos. Los CAPTCHA se han vuelto lo suficientemente sofisticados como para distinguir entre los clics de un robot y los de un humano. Al fin y al cabo, eso es precisamente de lo que se trata un CAPTCHA.

La automatización de los CAPTCHA es un juego del gato y el ratón, y lo que funciona hoy puede que no funcione mañana. Para conocer los enfoques más actualizados, consulta el gist de GitHub de donde proviene este enfoque.

Enfoque n.º 3: integrar un navegador antibot

Los dos enfoques anteriores para eludir los CAPTCHA de Cypress requieren demasiadas suposiciones para poder utilizarlos contra un objetivo real. Una solución más eficaz es configurar Cypress para controlar un navegador antidetección. Si no está familiarizado con esta herramienta, un navegador antidetección es un navegador especializado diseñado para evitar que los sitios web detecten comportamientos automatizados.

De forma predeterminada, Cypress proporciona acceso a uno de los navegadores instalados localmente de la siguiente lista:

  • Chrome
  • Chrome Beta
  • Chrome Canary
  • Chromium
  • Edge
  • Edge Beta
  • Edge Canary
  • Edge Dev
  • Electron
  • Firefox
  • Firefox Developer Edition
  • Firefox Nightly
  • WebKit (experimental)

Además de estos, es compatible con cualquier navegador basado en Chromium. Por lo tanto, elija un navegador basado en Chromium de la lista de los mejores navegadores antidetección del mercado, cómprelo, descárguelo e instálelo en su equipo.

A continuación, puede indicar a Cypress que ejecute un script con el navegador especificado como se indica a continuación:

cypress open --browser <path_to_your_browser>

Donde <ruta_a_tu_navegador> es la ruta absoluta a la carpeta que contiene el binario de tu navegador antidetección.

Del mismo modo, puede configurar la interfaz de usuario de Cypress para que muestre su navegador antidetección como una opción seleccionable añadiendo el siguiente código en cypress.config.js:

import { defineConfig } from 'cypress'

export default defineConfig({

e2e: {

setupNodeEvents(on, config) {

const antidetectBrowser = {

name: '<ANTIDETECT_BROWSER_NAME>',

channel: 'stable',

family: 'chromium',

displayName: '<ANTIDETECT_BROWSER_DISPLAY_NAME>',

version,

path: '<path_to_your_browser>',

majorVersion,

}

return {

browsers: config.browsers.concat(antidetectBrowser),

}

},

},

})

Ten en cuenta que indicar a Cypress que ejecute tu código automatizado en un navegador antidetección solo reducirá la probabilidad de que te detecten como bot. Si los sistemas antibot comprenden que estás ejecutando código automatizado, es posible que sigan aplicando algunos CAPTCHA para detenerte.

Las soluciones de Cypress para evitar CAPTCHAs mencionadas anteriormente no funcionan: ¿qué hacer ahora?

Los tres métodos presentados anteriormente tienen algunas desventajas importantes:

  • Enfoque n.º 1: Requiere tener acceso al código del sitio de destino, lo que no es el caso cuando se trata de sitios web externos.
  • Enfoque n.º 2: solo funciona con CAPTCHAs muy sencillos y no es una técnica fiable.
  • Enfoque n.º 3: requiere comprar un servicio externo, es posible que tenga que gastar dinero adicional para la integración del Proxy y solo ayuda a evitar los CAPTCHA, no a resolverlos.

Aunque vale la pena probarlos todos, ninguno de ellos le permite eludir los CAPTCHA mediante programación en su automatización de Cypress.

¿Busca un verdadero evasor de CAPTCHA para Cypress? Pruebe las soluciones de Scraping web de Bright Data.

Estas ofrecen capacidades de desbloqueo superiores gracias a una función dedicada a la Resolución de CAPTCHA que gestiona automáticamente reCAPTCHA, hCaptcha, px_captcha, SimpleCaptcha, GeeTest CAPTCHA, FunCaptcha, Cloudflare Turnstile, AWS WAF Captcha, KeyCAPTCHA y muchos otros.

Integrar el CAPTCHA Solver de Bright Data en su script es sencillo, ya que funciona con cualquier cliente HTTP o herramienta de automatización de navegadores, incluido Cypress.

Obtenga más información sobre cómo utilizar el Web Unlocker de Bright Data. Además, consulte la documentación para obtener todos los detalles de integración y configuración.

Conclusión

En este artículo, ha aprendido qué son los CAPTCHA y por qué suponen un reto importante para Cypress. También ha explorado tres métodos diferentes para eludirlos, pero cada uno de estos enfoques tiene serias limitaciones.

Por muy avanzada que sea la lógica de Cypress para eludir los CAPTCHA, los sofisticados sistemas de detección de bots pueden seguir identificando su script como automatizado. La mejor solución es conectarse al sitio de destino a través de una API de desbloqueo que pueda devolver el HTML sin CAPTCHA de cualquier página web.

Esa API existe y se llama Web Unlocker. Gira automáticamente la IP de salida con cada solicitud mediante la integración de un Proxy, gestiona las huellas digitales del navegador, realiza reintentos automáticos y resuelve los CAPTCHAs por usted. ¡Las medidas antibots ya no son un quebradero de cabeza!

Regístrese ahora y vea cuál de los productos de Bright Data se adapta mejor a sus necesidades. Empiece hoy mismo con una prueba gratuita.