¿Cómo configurar UnChromeDriver no detectado en Scrapeless?
Advanced Data Extraction Specialist
Descubre cómo Undetected ChromeDriver ayuda a eludir sistemas anti-bot para la extracción de datos web, junto con una guía paso a paso, métodos avanzados y limitaciones clave. Además, conoce Scrapeless, una alternativa más robusta para necesidades de extracción profesional.
En esta guía, aprenderás:
- Qué es Undetected ChromeDriver y cómo puede ser útil
- Cómo minimiza la detección de bots
- Cómo utilizarlo con Python para la extracción de datos web
- Uso y métodos avanzados
- Sus limitaciones y desventajas clave
- Alternativa recomendada: Scrapeless
- Análisis técnico de los mecanismos de detección anti-bot
¡Vamos a profundizar!
¿Qué es Undetected ChromeDriver?
Undetected ChromeDriver es una biblioteca de Python que proporciona una versión optimizada de ChromeDriver de Selenium. Esta ha sido corregida para limitar la detección por servicios anti-bot como:
- Imperva
- DataDome
- Distil Networks
- y más ...
También puede ayudar a eludir ciertas protecciones de Cloudflare, aunque eso puede ser más desafiante.
Si alguna vez has utilizado herramientas de automatización de navegadores como Selenium, sabes que te permiten controlar navegadores programáticamente. Para hacer eso posible, configuran los navegadores de manera diferente a las configuraciones de usuarios normales.
Los sistemas anti-bot buscan esas diferencias, o "filtraciones", para identificar bots de navegador automatizados. Undetected ChromeDriver corrige los controladores de Chrome para minimizar estas señales reveladoras, reduciendo la detección de bots. ¡Esto lo hace ideal para extraer datos de sitios protegidos por medidas anti-extracción!
¿Cómo funciona Undetected ChromeDriver?
Undetected ChromeDriver reduce la detección de Cloudflare, Imperva, DataDome y soluciones similares empleando las siguientes técnicas:
- Renombrar variables de Selenium para imitar las utilizadas por navegadores reales
- Utilizar cadenas de User-Agent legítimas y reales para evitar la detección
- Permitir al usuario simular interacciones humanas naturales
- Gestionar adecuadamente las cookies y sesiones mientras navega por sitios web
- Permitir el uso de proxies para eludir bloqueos de IP y prevenir limitaciones de tasa
Estos métodos ayudan al navegador controlado por la biblioteca a eludir diversas defensas anti-extracción de datos de manera efectiva.
Uso de Undetected ChromeDriver para la extracción de datos web: Guía paso a paso
Paso #1: Requisitos previos y configuración del proyecto
Undetected ChromeDriver tiene los siguientes requisitos previos:
- Última versión de Chrome
- Python 3.6+: Si Python 3.6 o posterior no está instalado en tu máquina, descárgalo desde el sitio oficial y sigue las instrucciones de instalación.
Nota: La biblioteca descarga y parches automáticamente el binario del controlador por ti, por lo que no es necesario descargar ChromeDriver manualmente.
Crea un directorio para tu proyecto:
language
mkdir undetected-chromedriver-scraper
cd undetected-chromedriver-scraper
python -m venv env
Activa el entorno virtual:
language
# En Linux o macOS
source env/bin/activate
# En Windows
env\Scripts\activate
Paso #2: Instalar Undetected ChromeDriver
Instala Undetected ChromeDriver a través del paquete pip:
language
pip install undetected_chromedriver
Esta biblioteca instalará automáticamente Selenium, ya que es una de sus dependencias.
Paso #3: Configuración inicial
Crea un archivo scraper.py e importa undetected_chromedriver:
language
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import json
# Inicializa una instancia de Chrome
driver = uc.Chrome()
# Conéctate a la página de destino
driver.get("https://scrapeless.com")
# Lógica de extracción...
# Cierra el navegador
driver.quit()
Paso #4: Implementar la lógica de extracción
Ahora añadamos la lógica para extraer datos de la página de Apple:
language
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import json
import time
# Crea una instancia del controlador web Chrome
driver = uc.Chrome()
# Conéctate al sitio web de Apple
driver.get("https://www.apple.com/fr/")
# Dale al página algo de tiempo para cargarse completamente
time.sleep(3)
# Diccionario para almacenar la información del producto
apple_products = {}
try:
# Encuentra las secciones de productos (usando las clases del HTML proporcionado)
product_sections = driver.find_elements(By.CSS_SELECTOR, ".homepage-section.collection-module .unit-wrapper")
for i, section in enumerate(product_sections):
try:
# Extrae el nombre del producto (título)
headline = section.find_element(By.CSS_SELECTOR, ".headline, .logo-image").get_attribute("textContent").strip()
# Extrae la descripción (subtítulo)
subhead_element = section.find_element(By.CSS_SELECTOR, ".subhead")
subhead = subhead_element.text
# Obtener el enlace si está disponible
link = ""
try:
link_element = section.find_element(By.CSS_SELECTOR, ".unit-link")
link = link_element.get_attribute("href")
except:
pass
apple_products[f"producto_{i+1}"] = {
"nombre": headline,
"descripción": subhead,
"enlace": link
}
except Exception as e:
print(f"Error al procesar la sección {i+1}: {e}")
# Exportar los datos raspados a JSON
with open("apple_products.json", "w", encoding="utf-8") as json_file:
json.dump(apple_products, json_file, indent=4, ensure_ascii=False)
print(f"Se rasparon exitosamente {len(apple_products)} productos de Apple")
except Exception as e:
print(f"Error durante el raspado: {e}")
finally:
# Cerrar el navegador y liberar sus recursos
driver.quit()
Ejecuta con:
```language
python scraper.py
ChromeDriver No Detectado: Uso Avanzado
Ahora que sabes cómo funciona la biblioteca, estás listo para explorar algunos escenarios más avanzados.
Elegir una Versión Específica de Chrome
Puedes especificar una versión particular de Chrome para que la biblioteca use configurando el argumento version_main:
language
import undetected_chromedriver as uc
# Especificar la versión de destino de Chrome
driver = uc.Chrome(version_main=105)
Con Sintaxis
Para evitar llamar manualmente al método quit() cuando ya no necesites el controlador, puedes usar la sintaxis with:
language
import undetected_chromedriver as uc
with uc.Chrome() as driver:
driver.get("https://example.com")
# Resto de tu código...
Limitaciones de ChromeDriver No Detectado
Si bien undetected_chromedriver es una poderosa biblioteca de Python, tiene algunas limitaciones conocidas:
Bloqueos de IP
La biblioteca no oculta tu dirección IP. Si ejecutas un script desde un centro de datos, hay altas probabilidades de que se produzca la detección. De igual manera, si tu IP doméstica tiene una mala reputación, también puedes ser bloqueado.
Para ocultar tu IP, necesitas integrar el navegador controlado con un servidor proxy, como se demostró anteriormente.
Sin Soporte para Navegación GUI
Debido al funcionamiento interno del módulo, debes navegar programáticamente usando el método get(). Evita usar la GUI del navegador para la navegación manual; interactuar con la página usando tu teclado o ratón aumenta el riesgo de detección.
Soporte Limitado para Modo Sin Cabeza
Oficialmente, el modo sin cabeza no es completamente compatible con la biblioteca undetected_chromedriver. Sin embargo, puedes experimentar con él usando:
language
driver = uc.Chrome(headless=True)
Problemas de Estabilidad
Los resultados pueden variar debido a numerosos factores. No se proporcionan garantías, aparte de los esfuerzos continuos para entender y contrarrestar los algoritmos de detección. Un script que hoy consigue eludir los sistemas anti-bot podría fallar mañana si los métodos de protección reciben actualizaciones.
Alternativa Recomendada: Scrapeless
Dadas las limitaciones de ChromeDriver No Detectado, Scrapeless ofrece una alternativa más robusta y confiable para el raspado web sin ser bloqueado.
Protegemos firmemente la privacidad del sitio web. Todos los datos en este blog son públicos y se utilizan solo como una demostración del proceso de rastreo. No guardamos ninguna información ni datos.
Por Qué Scrapeless es Superior
Scrapeless es un servicio de navegador remoto que aborda los problemas inherentes con el enfoque de ChromeDriver No Detectado:
-
Actualizaciones constantes: A diferencia de ChromeDriver No Detectado, que puede dejar de funcionar después de actualizar los sistemas anti-bot, Scrapeless se actualiza continuamente por su equipo.
-
Rotación de IP incorporada: Scrapeless ofrece rotación automática de IP, eliminando el problema de bloqueo de IP de ChromeDriver No Detectado.
-
Configuración optimizada: Los navegadores de Scrapeless ya están optimizados para evitar la detección, lo que simplifica en gran medida el proceso.
-
Solución automática de CAPTCHAs: Scrapeless puede resolver automáticamente los CAPTCHAs que puedas encontrar.
-
Compatible con múltiples frameworks: Funciona con Playwright, Puppeteer y otras herramientas de automatización.
Iniciar sesión en Scrapeless para una prueba gratuita.
Lectura recomendada: Cómo eludir Cloudflare con Puppeteer
Cómo utilizar Scrapeless para raspar la web (sin ser bloqueado)
Aquí tienes cómo implementar una solución similar con Scrapeless utilizando Playwright:
Paso 1: Regístrate y inicia sesión en Scrapeless
Paso 2: Consigue la clave API de Scrapeless

Paso 3: Puedes integrar el siguiente código en tu proyecto
language
const {chromium} = require('playwright-core');
// URL de conexión de Scrapeless con tu token
const connectionURL = 'wss://browser.scrapeless.com/browser?token=YOUR_TOKEN_HERE&session_ttl=180&proxy_country=ANY';
(async () => {
// Conéctate al navegador remoto de Scrapeless
const browser = await chromium.connectOverCDP(connectionURL);
try {
// Crea una nueva página
const page = await browser.newPage();
// Navega al sitio web de Apple
console.log('Navegando al sitio web de Apple...');
await page.goto('https://www.apple.com/fr/', {
waitUntil: 'domcontentloaded',
timeout: 60000
});
console.log('Página cargada correctamente');
// Espera a que las secciones de productos estén disponibles
await page.waitForSelector('.homepage-section.collection-module', { timeout: 10000 });
// Obtén productos destacados de la página de inicio
const products = await page.evaluate(() => {
const results = [];
// Obtén todas las secciones de productos
const productSections = document.querySelectorAll('.homepage-section.collection-module .unit-wrapper');
productSections.forEach((section, index) => {
try {
// Obtén el nombre del producto - podría estar en .headline o .logo-image
const headlineEl = section.querySelector('.headline') || section.querySelector('.logo-image');
const headline = headlineEl ? headlineEl.textContent.trim() : 'Producto Desconocido';
// Obtén la descripción del producto
const subheadEl = section.querySelector('.subhead');
const subhead = subheadEl ? subheadEl.textContent.trim() : '';
// Obtén el enlace del producto
const linkEl = section.querySelector('.unit-link');
const link = linkEl ? linkEl.getAttribute('href') : '';
results.push({
name: headline,
description: subhead,
link: link
});
} catch (err) {
console.error(`Error procesando la sección ${index}: ${err.message}`);
}
});
return results;
});
// Muestra los resultados
console.log('Productos de Apple encontrados:');
console.log(JSON.stringify(products, null, 2));
console.log(`Total de productos encontrados: ${products.length}`);
} catch (error) {
console.error('Ocurrió un error:', error);
} finally {
// Cierra el navegador
await browser.close();
console.log('Navegador cerrado');
}
})();
También puedes unirte al Discord de Scrapeless para participar en el programa de soporte para desarrolladores y recibir hasta 500k créditos de uso de la API SERP gratis.
Análisis Técnico Mejorado
Detección de Bots: Cómo Funciona
Los sistemas anti-bot utilizan varias técnicas para detectar automatización:
-
Huellas del navegador: Recopilan docenas de propiedades del navegador (fuentes, canvas, WebGL, etc.) para crear una firma única.
-
Detección de WebDriver: Busca la presencia de la API WebDriver o sus artefactos.
-
Análisis de comportamiento: Analiza movimientos del ratón, clics, velocidad de escritura que difieren entre humanos y bots.
-
Detección de anomalías en la navegación: Identifica patrones sospechosos como solicitudes demasiado rápidas o falta de carga de imágenes/CSS.
Lectura recomendada: Cómo eludir Anti Bot
Cómo Undetected ChromeDriver elude la detección
Undetected ChromeDriver esquiva estas detecciones mediante:
-
Eliminación de indicadores de WebDriver: Elimina la propiedad
navigator.webdrivery otros rastros de WebDriver. -
Parcheo de Cdc_: Modifica las variables del Controlador de Chrome que son firmas conocidas de ChromeDriver.
-
Uso de User-Agents realistas: Reemplaza los User-Agents predeterminados con cadenas actualizadas.
-
Minimización de cambios de configuración: Reduce los cambios en el comportamiento predeterminado del navegador Chrome.
Código técnico que muestra cómo Undetected ChromeDriver parchea el controlador:
language
Extracto simplificado del código fuente de Undetected ChromeDriver
def _patch_driver_executable():
"""
Parchea el binario de ChromeDriver para eliminar signos evidentes de automatización
"""
linect = 0
replacement = os.urandom(32).hex()
with io.open(self.executable_path, "r+b") as fh:
for line in iter(lambda: fh.readline(), b""):
if b"cdc_" in line.lower():
fh.seek(-len(line), 1)
newline = re.sub(
b"cdc_.{22}", b"cdc_" + replacement.encode(), line
)
fh.write(newline)
linect += 1
return linect
Por qué Scrapeless es más efectivo
Scrapeless adopta un enfoque diferente al:
-
Entorno preconfigurado: Utilizando navegadores ya optimizados para imitar a los usuarios humanos.
-
Infraestructura en la nube: Ejecutando navegadores en la nube con un adecuado fingerprinting.
-
Rotación inteligente de proxies: Rotando automáticamente las IPs según el sitio objetivo.
-
Gestión avanzada de huellas digitales: Manteniendo huellas digitales consistentes del navegador durante toda la sesión.
-
Supresión de WebRTC, Canvas y Plugins: Bloqueando las técnicas de fingerprinting comunes.
Inicia sesión en Scrapeless para una prueba gratuita.
Conclusión
En este artículo, has aprendido a lidiar con la detección de bots en Selenium utilizando Undetected ChromeDriver. Esta biblioteca proporciona una versión parcheada de ChromeDriver para la recolección de datos web sin ser bloqueado.
El desafío es que tecnologías avanzadas anti-bot como Cloudflare aún podrán detectar y bloquear tus scripts. Bibliotecas como undetected_chromedriver son inestables; aunque pueden funcionar hoy, pueden no funcionar mañana.
Para necesidades profesionales de scraping, soluciones basadas en la nube como Scrapeless ofrecen una alternativa más robusta. Proporcionan navegadores remotos preconfigurados, diseñados específicamente para eludir medidas anti-bot, con características adicionales como rotación de IP y resolución de CAPTCHA.
La elección entre Undetected ChromeDriver y Scrapeless depende de tus necesidades específicas:
- Undetected ChromeDriver: Bueno para proyectos más pequeños, gratuito y de código abierto, pero requiere más mantenimiento y puede ser menos confiable.
- Scrapeless: Mejor para necesidades profesionales de scraping, más confiable, constantemente actualizado, pero tiene un costo de suscripción.
Al entender cómo funcionan estas tecnologías de elusión de bots, puedes elegir la herramienta adecuada para tus proyectos de recolección de datos web y evitar los errores comunes de la recopilación automatizada de datos.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.



