Volver al blog

¿Cómo configurar UnChromeDriver no detectado en Scrapeless?

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

17-Mar-2025

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 Copy
mkdir undetected-chromedriver-scraper
cd undetected-chromedriver-scraper
python -m venv env

Activa el entorno virtual:

language Copy
# 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 Copy
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 Copy
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 Copy
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

Copy
        # 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()

Copy
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 Copy
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 Copy
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.

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 Copy
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:

  1. 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.

  2. Rotación de IP incorporada: Scrapeless ofrece rotación automática de IP, eliminando el problema de bloqueo de IP de ChromeDriver No Detectado.

  3. Configuración optimizada: Los navegadores de Scrapeless ya están optimizados para evitar la detección, lo que simplifica en gran medida el proceso.

  4. Solución automática de CAPTCHAs: Scrapeless puede resolver automáticamente los CAPTCHAs que puedas encontrar.

  5. 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

Consigue la clave API de Scrapeless

Paso 3: Puedes integrar el siguiente código en tu proyecto

language Copy
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:

  1. Huellas del navegador: Recopilan docenas de propiedades del navegador (fuentes, canvas, WebGL, etc.) para crear una firma única.

  2. Detección de WebDriver: Busca la presencia de la API WebDriver o sus artefactos.

  3. Análisis de comportamiento: Analiza movimientos del ratón, clics, velocidad de escritura que difieren entre humanos y bots.

  4. 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:

  1. Eliminación de indicadores de WebDriver: Elimina la propiedad navigator.webdriver y otros rastros de WebDriver.

  2. Parcheo de Cdc_: Modifica las variables del Controlador de Chrome que son firmas conocidas de ChromeDriver.

  3. Uso de User-Agents realistas: Reemplaza los User-Agents predeterminados con cadenas actualizadas.

  4. 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 Copy
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:

  1. Entorno preconfigurado: Utilizando navegadores ya optimizados para imitar a los usuarios humanos.

  2. Infraestructura en la nube: Ejecutando navegadores en la nube con un adecuado fingerprinting.

  3. Rotación inteligente de proxies: Rotando automáticamente las IPs según el sitio objetivo.

  4. Gestión avanzada de huellas digitales: Manteniendo huellas digitales consistentes del navegador durante toda la sesión.

  5. 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.

Artículos más populares

Catalogar