Cómo Evitar la Detección de Bots con Scrapling en OpenClaw

Ashley Innocent

Ashley Innocent

5 March 2026

Cómo Evitar la Detección de Bots con Scrapling en OpenClaw

Apidog para empresas

Despliegue local

SSO & RBAC

Conforme con SOC 2

Explorar Apidog Enterprise

En resumen

Scrapling ofrece potentes capacidades de bypass anti-bot a través de sus modos StealthyFetcher y DynamicFetcher. Utilice StealthyFetcher para sitios protegidos por Cloudflare (resolución automática de Turnstile, aleatorización de huellas dactilares de canvas, bloqueo de WebRTC) o DynamicFetcher para implementaciones anti-bot con mucho JavaScript. Intégrelo con OpenClaw para controlar todas las operaciones de scraping mediante comandos en lenguaje natural.

Introducción

Visitas un sitio web para recopilar datos. La página se carga. Entonces lo ves: "Acceso denegado" o un desafío CAPTCHA. El sitio detectó tu scraper y bloqueó el acceso. Este escenario se repite constantemente para desarrolladores, científicos de datos e investigadores que necesitan datos web para proyectos legítimos.

Esto ocurre porque los sitios web implementan cada vez más sistemas anti-bot sofisticados. Cloudflare, PerimeterX, Akamai y servicios similares analizan las huellas dactilares del navegador, los patrones de comportamiento y las características de las solicitudes para identificar el acceso automatizado. Los scrapers tradicionales fallan inmediatamente ante estas defensas. La industria de detección de bots ha crecido hasta convertirse en un mercado multimillonario. Las empresas invierten mucho en proteger sus activos digitales del acceso automatizado. Cloudflare, por sí solo, informa que bloquea miles de millones de solicitudes de bots diariamente. Esto crea desafíos significativos para la recopilación legítima de datos, ya sea para investigación de mercado, análisis competitivo, monitoreo de precios o investigación académica.

Scrapling resuelve este problema. La biblioteca incluye múltiples modos de anti-detección diseñados específicamente para eludir estas protecciones. Combinado con la interfaz de lenguaje natural de OpenClaw, puedes instruir a tu asistente de IA para que eluda las comprobaciones anti-bot sin escribir código complejo.

💡
Para los flujos de trabajo de desarrollo y prueba de API, Apidog proporciona herramientas completas que complementan las capacidades de web scraping, lo que le permite probar y validar los datos que recopila de sitios protegidos.
button

Entendiendo la Detección Anti-Bot

Antes de eludir la detección, debe comprender cómo funciona. Los sistemas anti-bot analizan varios factores:

Huellas dactilares del navegador: Los sitios recopilan información sobre su navegador, incluyendo la resolución de pantalla, las fuentes instaladas, el renderizador WebGL, la salida de canvas y cientos de otras señales. Las herramientas automatizadas a menudo se revelan a través de huellas dactilares consistentes que difieren de los navegadores reales.

Análisis de comportamiento: Los usuarios humanos mueven los ratones de forma impredecible, se desplazan a velocidades variables y escriben con un ritmo natural. Los bots a menudo exhiben patrones mecánicos: cargas de página instantáneas, velocidades de desplazamiento uniformes, sincronización perfecta entre acciones.

Análisis de solicitudes: Cada solicitud HTTP incluye encabezados, huellas dactilares TLS y patrones de conexión. Las bibliotecas HTTP estándar como requests realizan solicitudes que parecen claramente automatizadas en comparación con el tráfico real del navegador.

Desafíos JavaScript: Los sitios modernos ejecutan JavaScript para recopilar información del navegador. Turnstile de Cloudflare, por ejemplo, ejecuta pruebas invisibles que verifican la integridad del navegador antes de mostrar contenido.

Reputación de IP: Las direcciones IP son marcadas en función del proveedor de alojamiento, el historial de actividad sospechosa y la ubicación geográfica. Las IP de centros de datos provocan sospechas inmediatas.

Scrapling aborda cada uno de estos vectores de detección a través de sus fetchers especializados.

Capacidades Anti-Bot de Scrapling

Scrapling proporciona dos fetchers principales para eludir los sistemas anti-bot:

StealthyFetcher maneja la mayoría de las protecciones de Cloudflare y similares. Utiliza Chrome sin interfaz gráfica con técnicas de evasión integradas que parchean automáticamente los vectores de detección comunes.

DynamicFetcher proporciona automatización completa del navegador a través de Playwright. Úselo cuando StealthyFetcher falle o cuando el sitio utilice detección avanzada basada en JavaScript.

Así es como se elige:

Escenario Fetcher Recomendado
Protección de Cloudflare StealthyFetcher
CAPTCHA de Turnstile StealthyFetcher
Detección básica de bots StealthyFetcher
Desafíos JavaScript complejos DynamicFetcher
Desplazamiento infinito con anti-bot DynamicFetcher
Soluciones anti-bot personalizadas DynamicFetcher

Análisis detallado de StealthyFetcher

StealthyFetcher es la herramienta principal de Scrapling para eludir los sistemas anti-bot. Maneja la mayoría de los mecanismos de protección comunes automáticamente.

Uso Básico

from scrapling.fetchers import StealthyFetcher

fetcher = StealthyFetcher()
page = fetcher.get('https://protected-site.com')
print(page.text)

El fetcher intenta automáticamente eludir las protecciones de Cloudflare, PerimeterX y similares.

Bypass de Cloudflare Turnstile

Cloudflare Turnstile es uno de los desafíos anti-bot más comunes. StealthyFetcher lo resuelve automáticamente:

page = StealthyFetcher.fetch(
    'https://cloudflare-protected-site.com',
    solve_cloudflare=True
)

El parámetro solve_cloudflare=True activa la resolución automática del desafío. Esto funciona tanto para los desafíos intersticiales (la página "Comprobando su navegador antes de acceder") como para los widgets de Turnstile.

Aleatorización de la Huella Dactilar del Canvas

La huella dactilar del canvas crea identificadores únicos basados en cómo su navegador renderiza gráficos. StealthyFetcher añade ruido aleatorio a las operaciones del canvas:

page = StealthyFetcher.fetch(
    'https://site.com',
    hide_canvas=True
)

Cada solicitud genera una salida de canvas diferente, lo que hace que el seguimiento por huella dactilar sea ineficaz.

Prevención de Fugas de WebRTC

WebRTC puede exponer su dirección IP real incluso cuando se utilizan proxies. StealthyFetcher bloquea las solicitudes WebRTC:

page = StealthyFetcher.fetch(
    'https://site.com',
    block_webrtc=True
)

Esto evita fugas de IP local que podrían revelar su identidad o ubicación.

Suplantación del Referer de Búsqueda de Google

Muchos sitios permiten el acceso cuando creen que el tráfico proviene de una búsqueda de Google. StealthyFetcher suplanta este referer:

page = StealthyFetcher.fetch(
    'https://site.com',
    google_search=True
)

Esto hace que la solicitud parezca provenir de la página de resultados de búsqueda de Google.

Uso de Chrome Instalado

Para una máxima evasión, utilice su navegador Chrome instalado en lugar de Chromium de Playwright:

page = StealthyFetcher.fetch(
    'https://site.com',
    real_chrome=True
)

Esto utiliza su instalación real de Chrome, que tiene una huella dactilar de navegador legítima.

Suplantación Geográfica

Asocie su solicitud a una ubicación específica:

page = StealthyFetcher.fetch(
    'https://site.com',
    locale='en-US',
    timezone_id='America/New_York'
)

Esto configura la zona horaria y la configuración de idioma del navegador para que coincidan con la ubicación deseada.

DynamicFetcher para Protección Avanzada

Algunos sitios utilizan sistemas anti-bot sofisticados que StealthyFetcher no puede eludir. DynamicFetcher proporciona automatización completa del navegador con Playwright:

from scrapling.fetchers import DynamicFetcher

fetcher = DynamicFetcher()
page = fetcher.get('https://highly-protected-site.com')
print(page.text)

Manejo del Desplazamiento Infinito

Los sitios con desplazamiento infinito y protección anti-bot requieren automatización del navegador:

from scrapling.fetchers import DynamicFetcher
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    fetcher = DynamicFetcher(playwright=p)
    page = fetcher.get('https://site.com/infinite-scroll')

    # Wait for content to load
    page.wait_for_selector('.content-item')

    # Scroll to load more
    for _ in range(5):
        page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
        page.wait_for_timeout(1000)

Esperando la Ejecución de JavaScript

Algunos contenidos se cargan a través de JavaScript después de la carga inicial de la página:

page = DynamicFetcher.get('https://site.com')
page.wait_for_load_state('networkidle')
content = page.content()

Esto asegura que todo el JavaScript se haya ejecutado antes de extraer el contenido.

Manejo Manual de CAPTCHAs

Para CAPTCHAs que no se pueden resolver automáticamente:

page = DynamicFetcher.get('https://site.com')

# Check if CAPTCHA is present
if page.is_visible('.captcha-container'):
    # Take screenshot for manual solving
    page.screenshot(path='captcha.png')
    # After manual solve, continue
    page.click('.captcha-submit')

Puede pausar para una intervención manual, resolver el CAPTCHA usted mismo y reanudar el scraping.

Uso con OpenClaw

OpenClaw te permite controlar las capacidades anti-bot de Scrapling a través del lenguaje natural (si quieres saber cómo configurar Scrapling dentro de OpenClaw, consulta esta publicación):

Eludir Cloudflare en un sitio:

"Get the product data from https://shop.example.com, this site has Cloudflare protection"

OpenClaw utiliza automáticamente StealthyFetcher con solve_cloudflare habilitado.

Manejar un sitio con protección avanzada:

"Scrape the job listings from https://careers.example.com, use headless browser mode because they have strong anti-bot protection"

OpenClaw cambia a DynamicFetcher para una automatización completa del navegador.

Usar rotación de proxies:

"Extract data from these 100 URLs, rotate through these proxies: proxy1.com:8080, proxy2.com:8080, proxy3.com:8080"

OpenClaw distribuye las solicitudes a través de múltiples proxies.

Suplantar la ubicación geográfica:

"Get the price data from https://site.com, use US East Coast settings"

OpenClaw configura la zona horaria y la configuración regional para que coincidan.

Técnicas Anti-Bot Explicadas

Comprender las técnicas subyacentes le ayuda a elegir el enfoque correcto:

Suplantación de Huellas Dactilares TLS

Cuando su navegador se conecta a un sitio web, realiza un handshake TLS. El mensaje ClientHello incluye características que identifican su biblioteca cliente. Las solicitudes estándar de Python tienen huellas dactilares distintivas que los sistemas anti-bot reconocen.

Scrapling suplanta las huellas dactilares TLS para aparecer como navegadores legítimos. Esto sucede automáticamente con StealthyFetcher y DynamicFetcher.

Rotación de User-Agent

Enviar solicitudes con la misma cadena de User-Agent activa la detección. Scrapling rota los User-Agents automáticamente:

# User-Agent is automatically rotated
page = StealthyFetcher.get('https://site.com')

Cada solicitud parece provenir de una versión diferente del navegador.

Suplantación de Encabezados

Los navegadores reales envían encabezados específicos en órdenes específicas. Scrapling asegura que los encabezados coincidan con el comportamiento legítimo del navegador automáticamente.

Aleatorización del Canvas

Cuando un sitio web le pide a su navegador que dibuje algo, los píxeles exactos revelan su navegador y GPU. Scrapling añade ruido imperceptible a las operaciones de canvas, haciendo que cada huella dactilar sea única.

Resolución de Pantalla y Tamaño de Ventana

Los navegadores sin interfaz gráfica a menudo reportan tamaños de pantalla predeterminados. Scrapling aleatoriza las dimensiones del viewport para que coincidan con las pantallas de usuarios reales.

Simulación de Movimiento del Ratón

DynamicFetcher puede simular movimientos de ratón similares a los humanos:

page.mouse.move_to_element('.button')
page.mouse.move_by_offset(50, 20)
page.click('.submit')

Esto añade patrones de movimiento realistas que superan el análisis de comportamiento.

Integración de Proxies

El uso de proxies ayuda a evitar el bloqueo basado en IP y permite el scraping geográfico:

Uso Básico de Proxy

from scrapling.fetchers import StealthyFetcher

fetcher = StealthyFetcher()
page = fetcher.get(
    'https://site.com',
    proxy='http://username:password@proxy.example.com:8080'
)

Rotación de Proxies

Para scraping a gran escala, rote a través de múltiples proxies:

import random
from scrapling.fetchers import StealthyFetcher

proxies = [
    'http://proxy1.com:8080',
    'http://proxy2.com:8080',
    'http://proxy3.com:8080'
]

fetcher = StealthyFetcher()

for url in urls:
    proxy = random.choice(proxies)
    page = fetcher.get(url, proxy=proxy)
    # Process page

Proxies Residenciales

Los proxies residenciales utilizan direcciones IP de proveedores de servicios de Internet reales. Son más difíciles de detectar que las IP de centros de datos:

page = StealthyFetcher.get(
    'https://site.com',
    proxy='http://residential-proxy-provider:port'
)

Los proxies residenciales cuestan más, pero proporcionan tasas de éxito significativamente más altas en sitios protegidos.

Escenarios Anti-Bot Comunes

Protección de Cloudflare

Cloudflare es la solución anti-bot más común. La mayoría de los sitios funcionan con StealthyFetcher básico:

page = StealthyFetcher.fetch('https://cloudflare-site.com', solve_cloudflare=True)

Si Cloudflare muestra una página de desafío, el fetcher la resuelve automáticamente y reintenta.

PerimeterX (Ahora Ownl)

PerimeterX (ahora parte de Ownl) utiliza análisis de comportamiento:

# Use DynamicFetcher for PerimeterX
page = DynamicFetcher.get('https://perimeterx-site.com')

La automatización completa del navegador maneja mejor los desafíos de comportamiento.

Akamai

Akamai proporciona gestión de bots de nivel empresarial:

# Akamai often requires residential proxies
page = StealthyFetcher.get(
    'https://akamai-protected.com',
    proxy='http://residential-proxy:port',
    solve_cloudflare=True
)

Los sitios protegidos por Akamai a menudo requieren la combinación de múltiples técnicas de evasión.

Soluciones Anti-Bot Personalizadas

Algunos sitios desarrollan sus propios sistemas de detección:

# Use maximum stealth settings
page = StealthyFetcher.fetch(
    'https://custom-protected.com',
    solve_cloudflare=True,
    block_webrtc=True,
    hide_canvas=True,
    google_search=True,
    real_chrome=True
)

Si esto falla, cambie a DynamicFetcher con automatización completa del navegador.

Mejores Prácticas

Empiece de forma sencilla

Comience con StealthyFetcher básico. Solo añada complejidad si encuentra bloqueos:

# Try basic first
page = StealthyFetcher.get('https://site.com')

# Add evasion if needed
if 'blocked' in page.text.lower():
    page = StealthyFetcher.fetch('https://site.com', solve_cloudflare=True)

Respete los Límites de Velocidad

Incluso con capacidades anti-bot, enviar demasiadas solicitudes activa la protección:

import time

for url in urls:
    page = StealthyFetcher.get(url)
    time.sleep(2)  # Wait between requests

Utilice Proxies Residenciales para Producción

Los proxies gratuitos o baratos a menudo tienen mala reputación. Invierta en proxies residenciales de calidad para un scraping fiable:

# Quality residential proxy
page = StealthyFetcher.get(
    'https://site.com',
    proxy='http://premium-residential-proxy:port'
)

Revise robots.txt

Compruebe siempre si el sitio permite el scraping:

# Check robots.txt before scraping
from urllib.parse import urlparse

domain = urlparse('https://site.com').netloc
robots_url = f'https://{domain}/robots.txt'

Maneje los Errores con Elegancia

Incorpore el manejo de errores en su scraper:

from scrapling.fetchers import StealthyFetcher

fetcher = StealthyFetcher()

try:
    page = fetcher.get('https://site.com')
except Exception as e:
    print(f'Error: {e}')
    # Fall back to DynamicFetcher
    from scrapling.fetchers import DynamicFetcher
    fetcher = DynamicFetcher()
    page = fetcher.get('https://site.com')

Resolución de Problemas

Todavía me Bloquean

Si encuentra bloqueos a pesar de usar StealthyFetcher:

  1. Habilite todas las opciones de evasión:
page = StealthyFetcher.fetch(
    'https://site.com',
    solve_cloudflare=True,
    block_webrtc=True,
    hide_canvas=True,
    google_search=True,
    real_chrome=True
)
  1. Cambie a DynamicFetcher:
from scrapling.fetchers import DynamicFetcher
page = DynamicFetcher.get('https://site.com')
  1. Añada rotación de proxies:
page = StealthyFetcher.get(
    'https://site.com',
    proxy='http://residential-proxy:port'
)

Bucle de Desafío de Cloudflare

A veces StealthyFetcher se atasca en un bucle de desafío:

  1. Aumente el tiempo de espera:
page = StealthyFetcher.fetch(
    'https://site.com',
    solve_cloudflare=True,
    timeout=120
)
  1. Use real_chrome:
page = StealthyFetcher.fetch(
    'https://site.com',
    solve_cloudflare=True,
    real_chrome=True
)

CAPTCHAs No se Resuelven

Algunos CAPTCHAs requieren intervención manual:

page = DynamicFetcher.get('https://site.com')

if page.is_visible('[class*="captcha"]'):
    page.screenshot(path='manual_captcha.png')
    # Solve manually, then continue
    input('Press Enter after solving CAPTCHA...')
    page.click('.submit-button')

Rendimiento Lento

La evasión anti-bot añade una sobrecarga. Para un scraping más rápido:

  1. Utilice StealthyFetcher en lugar de DynamicFetcher cuando sea posible
  2. Añada agrupación de conexiones
  3. Utilice proxies más rápidos
  4. Reduzca las opciones de evasión innecesarias

Conclusión

Eludir las comprobaciones anti-bot requiere comprender cómo funciona la detección y utilizar las herramientas adecuadas para cada situación. Scrapling proporciona soluciones completas a través de StealthyFetcher para la mayoría de los sistemas de protección y DynamicFetcher para escenarios avanzados.

Los puntos clave:

Con la integración de OpenClaw, usted controla todas estas capacidades a través del lenguaje natural. Dígale a su asistente de IA lo que necesita, y seleccionará automáticamente el enfoque anti-bot apropiado. Una vez que haya recopilado sus datos, puede usar Apidog para probar y validar APIs, crear suites de pruebas automatizadas y generar documentación para los endpoints que descubra.

button

Preguntas Frecuentes

¿Cuál es la diferencia entre StealthyFetcher y DynamicFetcher?

StealthyFetcher utiliza Chrome sin interfaz gráfica modificado con parches de evasión incorporados. DynamicFetcher utiliza la automatización completa de Playwright. StealthyFetcher es más rápido, pero puede fallar contra la detección avanzada. DynamicFetcher es más fiable, pero más lento.

¿Scrapling funciona contra todos los sistemas anti-bot?

Ninguna solución anti-bot funciona el 100% del tiempo. Scrapling maneja la mayoría de los sistemas comunes (Cloudflare, PerimeterX, Akamai) de forma fiable. Las soluciones personalizadas o empresariales pueden requerir técnicas adicionales o intervención manual.

Las leyes varían según la jurisdicción y dependen de los términos de servicio del sitio. Generalmente, el scraping de datos públicos es aceptable. Eludir la autenticación o acceder a datos privados sin autorización traspasa los límites legales.

¿Por qué mi scraping sigue siendo bloqueado?

Revise estos problemas comunes: reputación de IP (use proxies residenciales), limitación de velocidad (añada retrasos), evasión insuficiente (habilite más opciones) o desafíos de JavaScript (use DynamicFetcher).

¿Cómo manejo los CAPTCHAs?

StealthyFetcher resuelve automáticamente Cloudflare Turnstile. Para otros CAPTCHAs, use DynamicFetcher y pause para la resolución manual, o integre servicios de resolución de CAPTCHA de terceros.

¿Puedo usar mi propio navegador Chrome?

Sí. Establezca real_chrome=True en StealthyFetcher para usar su Chrome instalado en lugar de Chromium de Playwright. Esto proporciona una huella dactilar de navegador más legítima.

¿Necesito proxies?

Para scraping a pequeña escala, no. Para operaciones de producción o gran escala, los proxies residenciales mejoran significativamente las tasas de éxito al evitar el bloqueo basado en IP.

¿Cómo roto los User-Agents?

StealthyFetcher rota los User-Agents automáticamente. Para un control manual:

fetcher = StealthyFetcher(headers={'User-Agent': 'Your-Custom-UA'})

¿Cuál es la tasa de éxito contra Cloudflare?

Con una configuración adecuada, las tasas de éxito superan el 90% para la mayoría de los sitios protegidos por Cloudflare. Los desafíos de Turnstile se resuelven automáticamente.

¿Puedo hacer scraping desde múltiples ubicaciones geográficas?

Sí. Use los parámetros timezone_id y locale:

page = StealthyFetcher.fetch(
    'https://site.com',
    timezone_id='Europe/London',
    locale='en-GB'
)

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs

Cómo Evitar la Detección de Bots con Scrapling en OpenClaw