CAPSOLVER
Blog
Cómo resolver captchas al realizar scraping web con Scrapling y CapSolver

Cómo resolver captchas al realizar scraping web con Scrapling y CapSolver

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

05-Dec-2025

Puntos clave

  • Scrapling es una biblioteca de raspado web de Python poderosa con funciones anti-bot integradas y seguimiento de elementos adaptativo
  • CapSolver proporciona resolución automática de captchas para ReCaptcha v2, v3 y Cloudflare Turnstile con tiempos de resolución rápidos (1-20 segundos)
  • Combinar Scrapling con CapSolver crea una solución de raspado robusta que maneja la mayoría de los sitios web protegidos por captchas
  • StealthyFetcher agrega anti-detección a nivel de navegador cuando las solicitudes HTTP básicas no son suficientes
  • Todos los tres tipos de captchas usan el mismo flujo de trabajo de CapSolver: crear tarea → consultar resultados → inyectar token
  • El código de producción debe incluir manejo de errores, limitación de velocidad y respetar los términos de servicio del sitio web

Introducción

El raspado web se ha convertido en una herramienta esencial para la recolección de datos, investigación de mercado y análisis competitivo. Sin embargo, a medida que las técnicas de raspado han evolucionado, también lo han hecho las defensas que utilizan los sitios web para proteger sus datos. Entre los obstáculos más comunes que enfrentan los raspadores están los captchas — esos desafíos molestos diseñados para distinguir entre humanos y bots.

Si alguna vez intentó raspar un sitio web y se encontró con un mensaje "Por favor, verifique que es humano", sabe la frustración. ¡La buena noticia? Existe una combinación poderosa que puede ayudar: Scrapling para el raspado inteligente de web y CapSolver para la resolución automática de captchas.

En esta guía, le explicaremos todo lo que necesita saber para integrar estas herramientas y raspear con éxito sitios web protegidos por captchas. Ya sea que esté lidiando con ReCaptcha v2 de Google, ReCaptcha v3 invisible o Turnstile de Cloudflare, lo tenemos cubierto.


¿Qué es Scrapling?

Scrapling es una biblioteca moderna de raspado web de Python que se describe como "la primera biblioteca de raspado adaptativa que aprende de los cambios en los sitios web y evoluciona con ellos". Está diseñada para facilitar la extracción de datos, mientras proporciona capacidades poderosas anti-bot.

Características clave

  • Seguimiento de elementos adaptativo: Scrapling puede localizar contenido incluso después de rediseños de sitio web usando algoritmos de similitud inteligentes
  • Múltiples métodos de obtención: Solicitud HTTP con impersonación de huella dactilar TLS, automatización de navegadores y modo stealth
  • Bypass anti-bot: Soporte integrado para evitar Cloudflare y otros sistemas anti-bot usando Firefox modificado y suplantación de huella dactilar
  • Alto rendimiento: Las pruebas de extracción de texto muestran ~2ms para 5000 elementos anidados, significativamente más rápido que muchas alternativas
  • Selección flexible: Selectores CSS, XPath, operaciones de búsqueda estilo BeautifulSoup y búsqueda basada en texto
  • Soporte asíncrono: Soporte completo para async/await para operaciones de raspado concurrentes

Instalación

Para capacidades de análisis básicas:

bash Copy
pip install scrapling

Para funciones completas incluyendo automatización de navegadores:

bash Copy
pip install "scrapling[fetchers]"
scrapling install

Para todo incluyendo funciones de inteligencia artificial:

bash Copy
pip install "scrapling[all]"
scrapling install

Uso básico

Scrapling utiliza métodos de clase para solicitudes HTTP:

python Copy
from scrapling import Fetcher

# Solicitud GET
response = Fetcher.get("https://example.com")

# Solicitud POST con datos
response = Fetcher.post("https://example.com/api", data={"key": "value"})

# Acceder a la respuesta
print(response.status)       # Código de estado HTTP
print(response.body)         # Bytes sin procesar
print(response.body.decode()) # Texto decodificado

¿Qué es CapSolver?

CapSolver es un servicio de resolución de captchas que utiliza inteligencia artificial avanzada para resolver automáticamente diversos tipos de captchas. Proporciona una API simple que se integra sin problemas con cualquier lenguaje de programación o marco de raspado.

¡Aumente su presupuesto de automatización de inmediato!
Use el código de bonificación SCRAPLING al recargar su cuenta de CapSolver para obtener un 6% adicional en cada recarga — especialmente para usuarios de integración con Scrapling.
Recójalo ahora en su Tablero de CapSolver

Tipos de captcha soportados

  • ReCaptcha v2 (casilla y invisible)
  • ReCaptcha v3 (basado en puntuación)
  • ReCaptcha Enterprise (v2 y v3)
  • Cloudflare Turnstile
  • AWS WAF Captcha
  • Y muchos más...

Obtener su clave de API

  1. Regístrese en CapSolver
  2. Navegue hasta su tablero de control
  3. Copie su clave de API desde la configuración de la cuenta
  4. Añada fondos a su cuenta (precio por resolución)

Puntos finales de API

CapSolver utiliza dos puntos finales principales:

  • Crear tarea: POST https://api.capsolver.com/createTask
  • Obtener resultados: POST https://api.capsolver.com/getTaskResult

Configuración de la función auxiliar de CapSolver

Antes de adentrarnos en tipos específicos de captchas, creemos una función auxiliar reutilizable que maneje el flujo de trabajo de la API de CapSolver:

python Copy
import requests
import time

CAPSOLVER_API_KEY = "SU_CLAVE_DE_API"

def solve_captcha(task_type, website_url, website_key, **kwargs):
    """
    Solucionador de captchas genérico usando la API de CapSolver.

    Args:
        task_type: El tipo de tarea de captcha (por ejemplo, "ReCaptchaV2TaskProxyLess")
        website_url: La URL de la página con el captcha
        website_key: La clave del sitio para el captcha
        **kwargs: Parámetros adicionales específicos del tipo de captcha

    Returns:
        dict: La solución que contiene el token y otros datos
    """
    payload = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": {
            "type": task_type,
            "websiteURL": website_url,
            "websiteKey": website_key,
            **kwargs
        }
    }

    # Crear la tarea
    response = requests.post(
        "https://api.capsolver.com/createTask",
        json=payload
    )
    result = response.json()

    if result.get("errorId") != 0:
        raise Exception(f"Falló la creación de la tarea: {result.get('errorDescription')}")

    task_id = result.get("taskId")
    print(f"Tarea creada: {task_id}")

    # Consultar resultados
    max_attempts = 60  # Máximo 2 minutos de consulta
    for attempt in range(max_attempts):
        time.sleep(2)

        response = requests.post(
            "https://api.capsolver.com/getTaskResult",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "taskId": task_id
            }
        )
        result = response.json()

        if result.get("status") == "ready":
            print(f"Captcha resuelto en {(attempt + 1) * 2} segundos")
            return result.get("solution")

        if result.get("errorId") != 0:
            raise Exception(f"Error: {result.get('errorDescription')}")

        print(f"Esperando... (intentos {attempt + 1})")

    raise Exception("Tiempo de espera agotado: La resolución del captcha tomó demasiado tiempo")

Esta función maneja todo el flujo de trabajo: crear una tarea, consultar resultados y devolver la solución. La usaremos a lo largo de esta guía.


Resolviendo ReCaptcha v2 con Scrapling + CapSolver

ReCaptcha v2 es el clásico captcha de casilla "No soy un robot". Cuando se activa, puede pedir a los usuarios que identifiquen objetos en imágenes (semáforos, cruces de peatones, etc.). Para los raspadores, necesitamos resolverlo de forma programática.

Cómo funciona ReCaptcha v2

  1. El sitio web carga un script de ReCaptcha con una clave del sitio única
  2. Al enviar, el script genera un token g-recaptcha-response
  3. El sitio web envía este token a Google para verificación
  4. Google confirma si el captcha fue resuelto correctamente

Encontrar la clave del sitio

La clave del sitio normalmente se encuentra en el HTML de la página:

html Copy
<div class="g-recaptcha" data-sitekey="6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"></div>

O en una etiqueta script:

html Copy
<script src="https://www.google.com/recaptcha/api.js?render=6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"></script>

Implementación

python Copy
from scrapling import Fetcher

def scrape_with_recaptcha_v2(target_url, site_key, form_url=None):
    """
    Rascar una página protegida por ReCaptcha v2.

    Args:
        target_url: La URL de la página con el captcha
        site_key: La clave del sitio de ReCaptcha
        form_url: La URL para enviar el formulario (por defecto target_url)

    Returns:
        La respuesta de la página protegida
    """
    # Resolver el captcha usando CapSolver
    print("Resolviendo ReCaptcha v2...")
    solution = solve_captcha(
        task_type="ReCaptchaV2TaskProxyLess",
        website_url=target_url,
        website_key=site_key
    )

    captcha_token = solution["gRecaptchaResponse"]
    print(f"Token obtenido: {captcha_token[:50]}...")

    # Enviar el formulario con el token de captcha usando Scrapling
    # Nota: Usar Fetcher.post() como método de clase (no como método de instancia)
    submit_url = form_url or target_url
    response = Fetcher.post(
        submit_url,
        data={
            "g-recaptcha-response": captcha_token,
            # Añadir cualquier otro campo del formulario requerido por el sitio web
        }
    )

    return response

# Ejemplo de uso
if __name__ == "__main__":
    url = "https://example.com/página-protegida"
    site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"

    result = scrape_with_recaptcha_v2(url, site_key)
    print(f"Estado: {result.status}")
    print(f"Longitud del contenido: {len(result.body)}")  # Usar .body para los bytes sin procesar

ReCaptcha v2 Invisible

Para ReCaptcha v2 Invisible (sin casilla, activado al enviar el formulario), añada el parámetro isInvisible:

python Copy
solution = solve_captcha(
    task_type="ReCaptchaV2TaskProxyLess",
    website_url=target_url,
    website_key=site_key,
    isInvisible=True
)

Versión Enterprise

Para ReCaptcha v2 Enterprise, use un tipo de tarea diferente:

python Copy
solution = solve_captcha(
    task_type="ReCaptchaV2EnterpriseTaskProxyLess",
    website_url=target_url,
    website_key=site_key,
    enterprisePayload={
        "s": "valor_s_del_payload_si es necesario"
    }
)

Resolviendo ReCaptcha v3 con Scrapling + CapSolver

ReCaptcha v3 es diferente del v2 — funciona en segundo plano y asigna una puntuación (0.0 a 1.0) basada en la actividad del usuario. Una puntuación más cercana a 1.0 indica actividad probablemente humana.

Diferencias clave con el v2

Aspecto ReCaptcha v2 ReCaptcha v3
Interacción del usuario Casilla/retos de imágenes Ninguna (invisible)
Salida Aprobado/rechazado Puntuación (0.0-1.0)
Parámetro de acción No es necesario Es necesario
Cuándo usarlo Formularios, inicios de sesión Todos los cargamientos de página

Encontrar el parámetro de acción

La acción se especifica en el JavaScript del sitio web:

javascript Copy
grecaptcha.execute('6LcxxxxxxxxxxxxxxxxABCD', {action: 'submit'})

Acciones comunes incluyen: submit, login, register, homepage, contact.

Implementación

python Copy
from scrapling import Fetcher

def scrape_with_recaptcha_v3(target_url, site_key, page_action="submit", min_score=0.7):
    """
    Rascar una página protegida por ReCaptcha v3.

    Args:
        target_url: La URL de la página con el captcha
        site_key: La clave del sitio de ReCaptcha
        page_action: El parámetro de acción (encontrado en grecaptcha.execute)
        min_score: Puntuación mínima solicitada (0.1-0.9)

    Returns:
        La respuesta de la página protegida
    """
    print(f"Resolviendo ReCaptcha v3 (acción: {page_action})...")

    solution = solve_captcha(
        task_type="ReCaptchaV3TaskProxyLess",
        website_url=target_url,
        website_key=site_key,
        pageAction=page_action
    )

    captcha_token = solution["gRecaptchaResponse"]
    print(f"Token obtenido con puntuación: {solution.get('score', 'N/A')}")

    # Enviar la solicitud con el token usando el método de clase de Scrapling
    response = Fetcher.post(
        target_url,
        data={
            "g-recaptcha-response": captcha_token,
        },
        headers={
            "User-Agent": solution.get("userAgent", "Mozilla/5.0")
        }
    )

    return response

# Ejemplo de uso
if __name__ == "__main__":
    url = "https://example.com/api/datos"
    site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"

    result = scrape_with_recaptcha_v3(url, site_key, page_action="obtenerDatos")
    print(f"Respuesta: {result.body.decode()[:200]}")  # Usar .body para el contenido

ReCaptcha v3 Enterprise

python Copy
solution = solve_captcha(
    task_type="ReCaptchaV3EnterpriseTaskProxyLess",
    website_url=target_url,
    website_key=site_key,
    pageAction=page_action,
    enterprisePayload={
        "s": "parámetro_s opcional"
    }
)

Resolviendo Cloudflare Turnstile con Scrapling + CapSolver

Cloudflare Turnstile es una alternativa más reciente de captcha diseñada como reemplazo "amigable para el usuario y de preservación de privacidad" de los captchas tradicionales. Está cada vez más presente en sitios web que utilizan Cloudflare.

Entendiendo Turnstile

Turnstile tiene tres modos:

  • Gestionado: Muestra un widget solo cuando es necesario
  • No interactivo: Se ejecuta sin interacción del usuario
  • Invisible: Completamente invisible para los usuarios

La buena noticia es que CapSolver maneja los tres automáticamente.

Encontrar la clave del sitio

Busque Turnstile en el HTML de la página:

html Copy
<div class="cf-turnstile" data-sitekey="0x4xxxxxxxxxxxxxxxxxxxxxxxxxx"></div>

O en JavaScript:

javascript Copy
turnstile.render('#container', {
    sitekey: '0x4xxxxxxxxxxxxxxxxxxxxxxxxxx',
    callback: function(token) { ... }
});

Implementación

python Copy
from scrapling import Fetcher

def scrape_with_turnstile(target_url, site_key, action=None, cdata=None):
    """
    Rascar una página protegida por Cloudflare Turnstile.

    Args:
        target_url: La URL de la página con el captcha
        site_key: La clave del sitio de Turnstile (comienza con 0x4...)
        action: Parámetro de acción opcional
        cdata: Parámetro cdata opcional

    Returns:
        La respuesta de la página protegida
    """
    print("Resolviendo Cloudflare Turnstile...")

    # Construir metadatos si se proporcionan
    metadata = {}
    if action:
        metadata["action"] = action
    if cdata:
        metadata["cdata"] = cdata

    task_params = {
        "task_type": "AntiTurnstileTaskProxyLess",
        "website_url": target_url,
        "website_key": site_key,
    }

    if metadata:
        task_params["metadata"] = metadata

    solution = solve_captcha(**task_params)

    turnstile_token = solution["token"]
    user_agent = solution.get("userAgent", "")

    print(f"Token de Turnstile obtenido: {turnstile_token[:50]}...")

    # Enviar con el token usando el método de clase de Scrapling
    headers = {}
    if user_agent:
        headers["User-Agent"] = user_agent

    response = Fetcher.post(
        target_url,
        data={
            "cf-turnstile-response": turnstile_token,
        },
headers=headers
    )

    return response

# Ejemplo de uso
if __name__ == "__main__":
    url = "https://example.com/protected"
    site_key = "0x4AAAAAAAxxxxxxxxxxxxxx"

    result = scrape_with_turnstile(url, site_key)
    print(f"¡Éxito! Obtuve {len(result.body)} bytes")  # Usa .body para el contenido

Turnstile con acción y CData

Algunas implementaciones requieren parámetros adicionales:

python Copy
solution = solve_captcha(
    task_type="AntiTurnstileTaskProxyLess",
    website_url=target_url,
    website_key=site_key,
    metadata={
        "action": "login",
        "cdata": "session_id_or_custom_data"
    }
)

Uso de StealthyFetcher para protección mejorada contra bots

A veces las solicitudes HTTP básicas no son suficientes. Los sitios web pueden usar detección de bots sofisticada que verifica:

  • Huellas dactilares del navegador
  • Ejecución de JavaScript
  • Movimientos del mouse y timing
  • Huellas dactilares TLS
  • Encabezados de solicitud

Scrapling's StealthyFetcher proporciona protección contra detección de bots a nivel de navegador utilizando un motor de navegador real con modificaciones de stealth.

¿Qué es StealthyFetcher?

StealthyFetcher utiliza un navegador Firefox modificado con:

  • Huellas dactilares del navegador reales
  • Capacidad para ejecutar JavaScript
  • Manejo automático de desafíos de Cloudflare
  • Suplantación de huellas dactilares TLS
  • Gestión de cookies y sesiones

Cuándo usar StealthyFetcher

Escenario Usar Fetcher Usar StealthyFetcher
Formularios simples con CAPTCHA No
Páginas con mucho JavaScript No
Múltiples capas de protección contra bots No
La velocidad es crítica No
Modo "Under Attack" de Cloudflare No

Combinar StealthyFetcher con CapSolver

Así es como se usa ambos juntos para mayor efectividad:

python Copy
from scrapling import StealthyFetcher
import asyncio

async def scrape_with_stealth_and_recaptcha(target_url, site_key, captcha_type="v2"):
    """
    Combina las funciones anti-detección de StealthyFetcher con CapSolver para ReCaptcha.

    Args:
        target_url: La URL a raspar
        site_key: La clave del CAPTCHA
        captcha_type: "v2" o "v3"

    Returns:
        El contenido de la página después de resolver el CAPTCHA
    """

    # Primero, resolver el CAPTCHA usando CapSolver
    print(f"Resolviendo ReCaptcha {captcha_type}...")

    if captcha_type == "v2":
        solution = solve_captcha(
            task_type="ReCaptchaV2TaskProxyLess",
            website_url=target_url,
            website_key=site_key
        )
        token = solution["gRecaptchaResponse"]

    elif captcha_type == "v3":
        solution = solve_captcha(
            task_type="ReCaptchaV3TaskProxyLess",
            website_url=target_url,
            website_key=site_key,
            pageAction="submit"
        )
        token = solution["gRecaptchaResponse"]

    else:
        raise ValueError(f"Tipo de CAPTCHA desconocido: {captcha_type}")

    print(f"Obtuve token: {token[:50]}...")

    # Usar StealthyFetcher para comportamiento de navegador
    fetcher = StealthyFetcher()

    # Navegar a la página
    page = await fetcher.async_fetch(target_url)

    # Inyectar la solución de ReCaptcha usando JavaScript
    await page.page.evaluate(f'''() => {{
        // Encontrar el campo g-recaptcha-response y establecer su valor
        let field = document.querySelector('textarea[name="g-recaptcha-response"]');
        if (!field) {{
            field = document.createElement('textarea');
            field.name = "g-recaptcha-response";
            field.style.display = "none";
            document.body.appendChild(field);
        }}
        field.value = "{token}";
    }}''')

    # Encontrar y hacer clic en el botón de envío
    submit_button = page.css('button[type="submit"], input[type="submit"]')
    if submit_button:
        await submit_button[0].click()
        # Esperar a que se cargue
        await page.page.wait_for_load_state('networkidle')

    # Obtener el contenido final de la página
    content = await page.page.content()

    return content

# Envoltura sincrónica para un uso más fácil
def scrape_stealth(target_url, site_key, captcha_type="v2"):
    """Envoltura sincrónica para el raspador asincrónico."""
    return asyncio.run(
        scrape_with_stealth_and_recaptcha(target_url, site_key, captcha_type)
    )

# Ejemplo de uso
if __name__ == "__main__":
    url = "https://example.com/página-altamente-protegida"
    site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"

    content = scrape_stealth(url, site_key, captcha_type="v2")
    print(f"Obtuve {len(content)} bytes de contenido")

Ejemplo completo: Raspado de múltiples páginas con sesión

python Copy
from scrapling import StealthyFetcher
import asyncio

class StealthScraper:
    """Un raspador que mantiene la sesión entre múltiples páginas."""

    def __init__(self, api_key):
        self.api_key = api_key
        self.fetcher = None

    async def __aenter__(self):
        self.fetcher = StealthyFetcher()
        return self

    async def __aexit__(self, *args):
        if self.fetcher:
            await self.fetcher.close()

    async def solve_and_access(self, url, site_key, captcha_type="v2"):
        """Resolver CAPTCHA y acceder a la página."""
        global CAPSOLVER_API_KEY
        CAPSOLVER_API_KEY = self.api_key

        # Resolver el CAPTCHA
        task_type = f"ReCaptcha{captcha_type.upper()}TaskProxyLess"
        solution = solve_captcha(
            task_type=task_type,
            website_url=url,
            website_key=site_key
        )
        token = solution["gRecaptchaResponse"]

        # Navegar e inyectar token
        page = await self.fetcher.async_fetch(url)
        # ... continuar con la interacción en la página

        return page

# Uso
async def main():
    async with StealthScraper("su_api_key") as scraper:
        page1 = await scraper.solve_and_access(
            "https://example.com/iniciar-sesión",
            "site_key_aquí",
            "v2"
        )
        # La sesión se mantiene para solicitudes posteriores
        page2 = await scraper.solve_and_access(
            "https://example.com/tablero",
            "otra_site_key",
            "v3"
        )

asyncio.run(main())

Mejores prácticas y consejos

1. Límites de velocidad

No golpees los sitios web con solicitudes. Implementa retrasos entre solicitudes:

python Copy
import time
import random

def raspado-respetuoso(urls, min_delay=2, max_delay=5):
    """Raspar con retrasos aleatorios para parecer más humano."""
    results = []
    for url in urls:
        result = scrape_page(url)
        results.append(result)

        # Retraso aleatorio entre solicitudes
        delay = random.uniform(min_delay, max_delay)
        time.sleep(delay)

    return results

2. Manejo de errores

Siempre maneja las fallas de manera elegante:

python Copy
def resolver_captcha-de-forma-robusta(task_type, website_url, website_key, max_retries=3, **kwargs):
    """Resolver CAPTCHA con reintentos automáticos."""
    for attempt in range(max_retries):
        try:
            return solve_captcha(task_type, website_url, website_key, **kwargs)
        except Exception as e:
            print(f"Intento {attempt + 1} falló: {e}")
            if attempt < max_retries - 1:
                time.sleep(5)  # Esperar antes del reintent
            else:
                raise

3. Respetar robots.txt

Verifica el robots.txt del sitio antes de raspar:

python Copy
from urllib.robotparser import RobotFileParser

def permitir_raspar(url):
    """Verificar si el raspo es permitido por robots.txt."""
    rp = RobotFileParser()
    rp.set_url(f"{url}/robots.txt")
    rp.read()
    return rp.can_fetch("*", url)

4. Usar proxies para escalar

Al raspar a gran escala, rota los proxies para evitar bloqueos de IP:

python Copy
# CapSolver soporta tareas con proxies
solution = solve_captcha(
    task_type="ReCaptchaV2Task",  # Nota: sin "ProxyLess"
    website_url=target_url,
    website_key=site_key,
    proxy="http://user:pass@proxy.example.com:8080"
)

5. Almacenar en caché las soluciones cuando sea posible

Los tokens de CAPTCHA suelen ser válidos por 1-2 minutos. Si necesitas hacer múltiples solicitudes, reutiliza el token:

python Copy
import time

class Caché-de-CAPTCHAs:
    def __init__(self, ttl=120):  # TTL predeterminado de 2 minutos
        self.cache = {}
        self.ttl = ttl

    def get_or_solve(self, key, solve_func):
        """Obtener token en caché o resolver uno nuevo."""
        if key in self.cache:
            token, timestamp = self.cache[key]
            if time.time() - timestamp < self.ttl:
                return token

        token = solve_func()
        self.cache[key] = (token, time.time())
        return token


Tabla de comparación de tipos de CAPTCHA

Característica ReCaptcha v2 ReCaptcha v3 Turnstile de Cloudflare
Interacción del usuario Casilla + posible desafío Ninguna Mínima o ninguna
Formato de clave del sitio 6L... 6L... 0x4...
Campo de respuesta g-recaptcha-response g-recaptcha-response cf-turnstile-response
Parámetro de acción No Sí (requerido) Opcional
Tiempo de resolución 1-10 segundos 1-10 segundos 1-20 segundos
Tarea de CapSolver ReCaptchaV2TaskProxyLess ReCaptchaV3TaskProxyLess AntiTurnstileTaskProxyLess

Tabla de comparación de Fetchers de Scrapling

Característica Fetcher StealthyFetcher
Velocidad Muy rápida Más lenta
Soporte de JavaScript No
Huella dactilar del navegador Ninguna Firefox real
Uso de memoria Bajo Alto
Bypass de Cloudflare No
Ideal para Solicitudes simples Anti-bot complejo

Preguntas frecuentes

P: ¿Cuánto cuesta CapSolver?

Consulta la página de precios de CapSolver para las tarifas actuales.

P: ¿Cómo encuentro la clave del sitio en una página web?

Busca en el código fuente de la página (Ctrl+U) por:

  • Atributo data-sitekey
  • Llamadas JavaScript grecaptcha.execute
  • Parámetro render= en URLs de scripts de ReCaptcha
  • class="cf-turnstile" para Turnstile

P: ¿Qué pasa si el token de CAPTCHA expira antes de usarlo?

Los tokens suelen expirar después de 1-2 minutos. Resuelve el CAPTCHA lo más cerca posible de la presentación del formulario. Si obtienes errores de validación, resuélvelo de nuevo con un token fresco.

P: ¿Puedo usar CapSolver con código asincrónico?

Sí! Envuelve la función de resolución en un ejecutor asincrónico:

python Copy
import asyncio

async def async_solve_captcha(*args, **kwargs):
    loop = asyncio.get_event_loop()
    return await loop.run_in_executor(
        None,
        lambda: solve_captcha(*args, **kwargs)
    )

P: ¿Cómo manejar múltiples ReCaptchas en una sola página?

Resuelve cada CAPTCHA por separado e incluye todos los tokens en tu envío:

python Copy
# Resolver múltiples ReCaptchas
solution_v2 = solve_captcha("ReCaptchaV2TaskProxyLess", url, key1)
solution_v3 = solve_captcha("ReCaptchaV3TaskProxyLess", url, key2, pageAction="submit")

# Enviar con tokens usando el método de la clase Scrapling
response = Fetcher.post(url, data={
    "g-recaptcha-response": solution_v2["gRecaptchaResponse"],
    "g-recaptcha-response-v3": solution_v3["gRecaptchaResponse"],
})

Conclusión

Combinar Scrapling y CapSolver proporciona una solución poderosa para raspar sitios web protegidos con CAPTCHA. Aquí está un resumen rápido:

  1. Usar Fetcher de Scrapling para solicitudes simples donde importa la velocidad
  2. Usar StealthyFetcher cuando enfrentes sistemas anti-bot sofisticados
  3. Usar CapSolver para resolver ReCaptcha v2, v3 y Turnstile de Cloudflare
  4. Implementar mejores prácticas como límites de velocidad, manejo de errores y rotación de proxies

Recuerda siempre raspar de manera responsable:

  • Respetar los términos de servicio del sitio web
  • No sobrecargar los servidores con solicitudes
  • Usar los datos éticamente
  • Considera contactar a los dueños del sitio para acceso a API

¿Listo para comenzar a raspar? Consigue tu clave de API de CapSolver en capsolver.com e instala Scrapling con pip install "scrapling[all]".

Aviso de Cumplimiento: La información proporcionada en este blog es solo para fines informativos. CapSolver se compromete a cumplir con todas las leyes y regulaciones aplicables. El uso de la red de CapSolver para actividades ilegales, fraudulentas o abusivas está estrictamente prohibido y será investigado. Nuestras soluciones para la resolución de captcha mejoran la experiencia del usuario mientras garantizan un 100% de cumplimiento al ayudar a resolver las dificultades de captcha durante el rastreo de datos públicos. Fomentamos el uso responsable de nuestros servicios. Para obtener más información, visite nuestros Términos de Servicio y Política de Privacidad.

Máse

.Cómo resolver CAPTCHAs en Python usando Botasaurus y CapSolver (Guía completa)
Cómo resolver CAPTCHAs en Python usando Botasaurus y CapSolver (Guía completa)

Aprende a integrar Botasaurus (marco de scraping web en Python) con la API de CapSolver para resolver automáticamente reCAPTCHA v2/v3 y Turnstile.

web scraping
Logo of CapSolver

Aloísio Vítor

15-Dec-2025

errores de raspado de web
¿Qué son los errores 402, 403, 404 y 429 en el web scraping? Una guía completa

Domine el manejo de errores de scraping web comprendiendo qué son los errores 402, 403, 404 y 429. Aprenda a corregir el error 403 Prohibido, implemente soluciones para el error 429 de limitación de tasas y maneje el código de estado 402 Requerido de pago.

web scraping
Logo of CapSolver

Adélia Cruz

12-Dec-2025

Raspado de web con Python
Web Scraping Con Python: 2026 Mejores Estrategias

Aprende las tácticas top de scraping web en Python para 2026, incluyendo el manejo de contenido dinámico de JavaScript, la gestión de flujos de autenticación, resolver CAPTCHAs, identificar trampas ocultas, simular comportamiento humano, optimizar patrones de solicitud y reducir el uso de recursos en proyectos de scraping a gran escala.

web scraping
Logo of CapSolver

Adélia Cruz

12-Dec-2025

Cómo resolver CAPTCHAs durante el scraping web con Scrapling y CapSolver
Cómo resolver captchas al realizar scraping web con Scrapling y CapSolver

Scrapling + CapSolver permite el scraping automatizado con ReCaptcha v2/v3 y bypass de Cloudflare Turnstile.

web scraping
Logo of CapSolver

Ethan Collins

05-Dec-2025

Scraping de web con Selenium y Python
Raspado de web con Selenium y Python | Resolver Captcha al realizar el raspado de web

En este artículo te familiarizarás con el web scraping usando Selenium y Python, y aprenderás a resolver el Captcha involucrado en el proceso para una extracción de datos eficiente.

web scraping
Logo of CapSolver

Rajinder Singh

04-Dec-2025

Raspado de web en Golang con Colly
Raspado de web en Golang con Colly

En este blog, exploramos el mundo del raspado de web usando Golang con la biblioteca Colly. El guía comienza ayudándote a configurar tu proyecto de Golang e instalar el paquete Colly. Luego recorremos la creación de un raspador básico para extraer enlaces de una página de Wikipedia, mostrando la facilidad de uso y las potentes características de Colly.

web scraping
Logo of CapSolver

Emma Foster

04-Dec-2025