En este tutorial sobre cómo evitar el CAPTCHA de Selenium, aprenderás:
- Qué son los CAPTCHA y si se pueden evitar
- Cómo evitar un CAPTCHA en Selenium
- Qué hacer si sigue apareciendo un CAPTCHA
¡Empecemos!
¿Qué son los CAPTCHA y es posible evitarlos?
Un CAPTCHA, abreviatura de «Completely Automated Public Turing test to tell Computers and Humans Apart» (prueba pública de Turing completamente automatizada para distinguir entre ordenadores y humanos), es un mecanismo diseñado para diferenciar entre usuarios humanos y bots. Presenta retos que son fáciles de resolver para los humanos, pero difíciles para las máquinas. Entre los proveedores de CAPTCHA más conocidos se encuentran Google reCAPTCHA, hCaptcha y BotDetect.
Entre los tipos de CAPTCHA más populares se incluyen:
- Desafíos basados en texto: los usuarios deben escribir una secuencia de letras y números distorsionados.
- Desafíos basados en imágenes: los usuarios deben identificar objetos específicos en una cuadrícula de imágenes.
- Desafíos basados en audio: los usuarios deben escribir las palabras que escuchan.
- Desafíos tipo rompecabezas: los usuarios deben resolver rompecabezas sencillos, como navegar por un laberinto.

Los CAPTCHA suelen formar parte de flujos de usuarios específicos, como el paso final de un proceso de envío de formularios:

En estos casos, los CAPTCHA sirven para garantizar que los bots no completen el flujo de usuarios. Para automatizar estos retos, puede utilizar bibliotecas o servicios de Resolución de CAPTCHA que dependen de operadores humanos para resolver los retos en tiempo real. Sin embargo, los CAPTCHA codificados son poco comunes debido a su impacto negativo en la experiencia del usuario.
Con mayor frecuencia, los CAPTCHA forman parte de soluciones integrales contra los bots, como un WAF ( cortafuegos de aplicacionesweb):

Estos sistemas muestran CAPTCHAs de forma dinámica cuando sospechan de actividad de bots. En tales casos, los CAPTCHAs se pueden eludir haciendo que su bot imite el comportamiento humano en un navegador real. Aun así, esto requiere actualizar constantemente sus scripts para adelantarse a los nuevos métodos de detección de bots.
Una solución más eficaz para evitar los CAPTCHA es utilizar una herramienta de última generación como la función de Resolución de CAPTCHA de Bright Data. Esta herramienta en la nube está siempre actualizada y puede gestionar una amplia gama de tipos de CAPTCHA por usted.
Manejo de CAPTCHAs con Selenium: tutorial paso a paso
Como acaba de aprender, una forma eficaz de evitar los CAPTCHA es hacer que su script automatizado imite el comportamiento humano mientras controla un navegador con una huella digital real. Una de las mejores herramientas para ese fin es Selenium, una popular biblioteca de automatización de navegadores.
En esta sección del tutorial, aprenderá a evitar los CAPTCHA en Selenium utilizando un script de Python. ¡Empecemos!
Paso n.º 1: crear un nuevo proyecto Python
Antes de empezar, asegúrate de tener Python 3 y Chrome instalados localmente.
Si ya tienes un script de prueba o de Scraping web de Selenium, puedes saltarte los tres primeros pasos. De lo contrario, crea una carpeta para tu proyecto de demostración de omisión de CAPTCHA de Selenium y navega hasta ella en la terminal:
mkdir selenium_demo
cd selenium_demo
A continuación, añada un nuevo entorno virtual Python dentro de ella:
python -m venv venv
Abre la carpeta del proyecto en tu IDE de Python favorito y crea un nuevo archivo llamado script.py.
¡Fantástico! La carpeta de tu proyecto ahora contiene una aplicación Python.
Paso n.º 2: Instalar Selenium
Activa el entorno virtual Python con el siguiente comando:
venvScriptsactivate
O, de forma equivalente, si es usuario de Linux o macOS:
source venv/bin/activate
A continuación, instale Selenium a través del paquete pip a selenium utilizando este comando:
pip install selenium
El proceso de instalación puede tardar un poco, así que ten paciencia.
¡Genial! Ya estás listo para inicializar tu script de Selenium.
Paso n.º 3: configura tu script de Selenium
Importe Selenium añadiendo la siguiente línea a script.py:
from selenium import webdriver
Ahora, cree un objeto ChromeOptions para configurar Chrome para que se inicie en modo sin interfaz gráfica:
options = webdriver.ChromeOptions()
options.add_argument("--headless")
Si no está familiarizado con esta opción, obtenga más información en nuestra guía sobre navegadores sin interfaz gráfica.
Inicialice una instancia de Chrome WebDriver con estas opciones y, finalmente, ciérrela con quit(). Así es como debería verse actualmente su archivo script.py:
from selenium import webdriver
# configura Chrome para que se inicie en modo sin interfaz gráfica
options = webdriver.ChromeOptions()
options.add_argument("--headless")
# inicia una instancia de Chrome
driver = webdriver.Chrome(options=options)
# lógica de automatización del navegador...
# cierra el navegador y libera sus recursos
driver.quit()
El script anterior inicia una nueva instancia de Chrome en modo sin interfaz gráfica antes de cerrar el navegador. ¡Genial! Es hora de implementar la lógica de automatización del navegador.
Paso n.º 4: añadir la lógica de automatización del navegador
Para evaluar la lógica de omisión de CAPTCHA de Selenium, el script automatizado se conectará a bot.sannysoft.com y tomará una captura de pantalla. Esta página web especial ejecuta varias pruebas en el navegador para determinar si el usuario es un humano o un bot. Si visita la página en su navegador favorito, verá que se superan todas las pruebas.
Indique a la instancia de Chrome que visite la página de destino utilizando el método get():
driver.get("https://bot.sannysoft.com/")
A continuación, debe realizar una captura de pantalla de toda la página. Lamentablemente, Selenium no ofrece una función para hacerlo directamente. Como solución alternativa, puede configurar la ventana del navegador con el ancho y el alto del nodo <body> y, a continuación, realizar una captura de pantalla:
# obtener el ancho y el alto del cuerpo
full_width = driver.execute_script("return document.body.parentNode.scrollWidth")
full_height = driver.execute_script("return document.body.parentNode.scrollHeight")
# configurar la ventana del navegador con el ancho y el alto del cuerpo
driver.set_window_size(full_width, full_height)
# hacer una captura de pantalla de toda la página
driver.save_screenshot("screenshot.png")
# restaurar el tamaño original de la ventana
driver.set_window_size(original_size["width"], original_size["height"])
El truco anterior funcionará, y screenshot.png contendrá la captura de pantalla de toda la página.
Si lo juntamos todo, obtendremos la siguiente lógica:
from selenium import webdriver
# configurar Chrome para que se inicie en modo sin interfaz gráfica
options = webdriver.ChromeOptions()
options.add_argument("--headless")
# iniciar una instancia de Chrome
driver = webdriver.Chrome(options=options)
# conectarse a la página de destino
driver.get("https://bot.sannysoft.com/")
# obtener el tamaño actual de la ventana
original_size = driver.get_window_size()
# obtener el ancho y el alto del cuerpo
full_width = driver.execute_script("return document.body.parentNode.scrollWidth")
full_height = driver.execute_script("return document.body.parentNode.scrollHeight")
# establecer la ventana del navegador al ancho y alto del cuerpo
driver.set_window_size(full_width, full_height)
# tomar una captura de pantalla de toda la página
driver.save_screenshot("screenshot.png")
# restaurar el tamaño original de la ventana
driver.set_window_size(original_size["width"], original_size["height"])
# cerrar el navegador y liberar sus recursos
driver.quit()
Ejecuta el archivo script.py anterior con este comando:
python script.py
El script iniciará una instancia de Chromium en modo sin interfaz gráfica, se conectará a la página deseada, tomará una captura de pantalla y cerrará el navegador. Al final de la ejecución del script, aparecerá un archivo screenshot.png en la carpeta raíz del proyecto. Ábralo y verá lo siguiente:

Como se puede ver en los recuadros rojos, Chrome en modo sin interfaz gráfica controlado a través de Selenium vanilla no supera varias pruebas. Eso significa que es probable que su script sea detectado como un bot. La consecuencia es que un sitio protegido con tecnología anti-bot puede mostrar un CAPTCHA cuando interactúe con él. ¿La solución para evitar un CAPTCHA en Selenium? ¡El plugin Stealth!
Paso n.º 5: Instalar el complemento Selenium Stealth
Selenium Stealth es un paquete de Python diseñado para que la instancia de Chrome/Chromium controlada por Selenium sea menos detectable como bot. El objetivo de este proyecto es configurar el navegador para eludir casi todas las estrategias de detección de bots conocidas.
Concretamente, Selenium Stealth modifica las propiedades del navegador para evitar cualquier fuga que exponga al navegador como automatizado. Si estás familiarizado con las soluciones de elusión antibots, este paquete puede considerarse una reimplementación de Puppeteer Stealth.
Instala Selenium Stealth a través del paquete pip selenium-stealth:
pip install selenium-stealth
A continuación, importe la biblioteca añadiendo esta línea al archivo script.py:
from selenium_stealth import stealth
¡Ya está! Solo queda configurar los ajustes de Stealth.
Paso n.º 6: Configure los ajustes de Stealth para evitar los CAPTCHA
Para registrar Selenium Stealth y configurar Chrome WebDriver para evitar CAPTCHAs, llama a la función stealth() de la siguiente manera:
stealth(
driver,
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
languages=["en-US", "en"],
vendor="Google Inc.",
platform="Win32",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
)
Configure los argumentos de la función como prefiera, pero tenga en cuenta que los valores anteriores son suficientes para eludir la mayoría de las medidas antibots.
¡Bien hecho! El navegador controlado por Selenium aparecerá ahora como un navegador real utilizado por un usuario humano.
Paso n.º 7: Repita la prueba de detección de bots
A continuación se muestra el archivo script.js final:
from selenium import webdriver
from selenium_stealth import stealth
# configurar Chrome para que se inicie en modo sin interfaz gráfica
options = webdriver.ChromeOptions()
options.add_argument("--headless")
# iniciar una instancia de Chrome
driver = webdriver.Chrome(options=options)
# configurar WebDriver para evitar la detección de bots
# con Selenium Stealth
stealth(
driver,
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
languages=["en-US", "en"],
vendor="Google Inc.",
platform="Win32",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
)
# conectarse a la página de destino
driver.get("https://bot.sannysoft.com/")
# obtener el tamaño actual de la ventana
original_size = driver.get_window_size()
# obtener el ancho y alto del cuerpo
full_width = driver.execute_script("return document.body.parentNode.scrollWidth")
full_height = driver.execute_script("return document.body.parentNode.scrollHeight")
# establecer la ventana del navegador al ancho y alto del cuerpo
driver.set_window_size(full_width, full_height)
# tomar una captura de pantalla de toda la página
driver.save_screenshot("screenshot.png")
# restaurar el tamaño original de la ventana
driver.set_window_size(original_size["width"], original_size["height"])
# cerrar el navegador y liberar sus recursos
driver.quit()
Vuelve a ejecutar el script de Python de Selenium para omitir el CAPTCHA:
python script.py
Echa un vistazo a screenshot.png y verás que se han superado todas las pruebas de detección de bots:

¡Et voilà! Ahora ya sabes el truco para evitar los CAPTCHA antibots en Selenium.
Qué hacer si la solución anterior para eludir el CAPTCHA de Selenium no funciona
Desafortunadamente, la configuración del navegador no es el único aspecto en el que se centran las soluciones antibots. La reputación de la IP es otro aspecto clave, y no puedes simplemente cambiar tu IP por una más fiable utilizando una biblioteca gratuita. ¡Eso requiere la integración de un Proxy Selenium!
En otras palabras, incluso si configura su navegador de forma óptima, es posible que sigan apareciendo CAPTCHAs. Para CAPTCHAs sencillos que solo requieren un clic, puede intentar utilizar paquetes como selenium-recaptcha-solver o selenium-recptcha. Sin embargo, estas bibliotecas solo funcionan con reCAPTCHA v2 y ya no se mantienen.
El principal problema del enfoque del capítulo anterior y de esos paquetes es que solo funcionan con CAPTCHAs básicos. Cuando se trata de sistemas antibots más complejos, como Cloudflare, se necesita una solución mucho más potente.
¿Busca una solución CAPTCHA real para Selenium? Pruebe las soluciones de Scraping web de Bright Data.
Estas soluciones cuentan con capacidades de desbloqueo superiores y una función dedicada a la Resolución de CAPTCHA para gestionar 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 fácil, ya que funciona con cualquier cliente HTTP o herramienta de automatización de navegadores, incluido Selenium.
Descubra más sobre cómo utilizar el CAPTCHA Solver de Bright Data y consulte la documentación para obtener todos los detalles de configuración.
Conclusión
En este artículo, ha visto por qué los CAPTCHA son un reto para el software automatizado y cómo abordarlos en Selenium. Gracias a la biblioteca Selenium Stealth, puede anular las configuraciones predeterminadas de Chrome para limitar la detección de bots. Sin embargo, este enfoque no es una solución definitiva.
Independientemente de lo sofisticada que sea tu lógica de omisión de CAPTCHA de Selenium, las herramientas avanzadas de detección de bots seguirán pudiendo bloquearte. La verdadera 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 no es un sueño. Existe y se llama Web Unlocker, una API de scraping que rota automáticamente su IP de salida con cada solicitud a través de la integración de un Proxy y se encarga de la huella digital del navegador, los reintentos automáticos y la resolución de CAPTCHA por usted. ¡Lidiar con los CAPTCHA nunca ha sido tan fácil!
Regístrate ahora y comienza tu prueba gratuita.