ProductosIntegracionesRecursosDocumentaciónPrecios
Empezar ahora

© 2026 CapSolver. All rights reserved.

Contáctenos

Slack: lola@capsolver.com

Productos

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Extensión de navegador
  • Más tipos de CAPTCHA

Integraciones

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Socios
  • Ver todas las integraciones

Recursos

  • Programa de referidos
  • Documentación
  • Referencia de API
  • Blog
  • Preguntas frecuentes
  • Glosario
  • Estado

Legal

  • Términos de servicio
  • Política de privacidad
  • Política de reembolso
  • No vender mi información personal
//Cómo Resolver reCAPTCHA v2/v3 Usando CapSolver y n8n
Mar09, 2026

Cómo Resolver reCAPTCHA v2/v3 Usando CapSolver y n8n

Aloísio Vítor

Aloísio Vítor

Image Processing Expert

Si alguna vez has intentado automatizar interacciones web, casi con seguridad te has topado con reCAPTCHA — el sistema de desafío de Google que bloquea bots para acceder a sitios web. Ya sea que estés construyendo scrapers, probando aplicaciones web o automatizando tareas repetitivas, reCAPTCHA puede detener todo tu flujo de trabajo.

¿Qué pasaría si pudieras resolver reCAPTCHA automáticamente dentro de tus flujos de trabajo en n8n — ya sea que estés creando una API de solucionador reutilizable, raspando un sitio protegido por captcha o automatizando un formulario de inicio de sesión — todo sin escribir una sola línea de código tradicional?

En esta guía, aprenderás a combinar n8n (una herramienta visual de automatización de flujos de trabajo) con CapSolver (un servicio de resolución de captchas impulsado por IA) para resolver desafíos reCAPTCHA v2, v2 Invisible y v3 bajo demanda — ya sea como un endpoint API independiente o como un paso dentro de cualquier flujo de automatización.

Lo que construirás:

API de Solución — un endpoint reutilizable que tus otras herramientas pueden llamar:

  • Una API solucionadora de reCAPTCHA (funciona para v2, v2 Invisible y v3 — solo cambia la Operación en el nodo CapSolver)

Flujos de uso directo — CapSolver integrado como un paso dentro de automatizaciones mayores:

  • Un scraper de precios y productos que resuelve reCAPTCHA, obtiene páginas protegidas y alerta sobre cambios de precio
  • Una automatización de inicio de sesión que resuelve reCAPTCHA antes de enviar credenciales

¿Qué es reCAPTCHA?

reCAPTCHA es el sistema de detección de bots de Google usado por millones de sitios web. Hay tres versiones principales que encontrarás:

reCAPTCHA v2 — Casilla de verificación ("No soy un robot") + desafíos de imágenes
reCAPTCHA v2 Invisible — Sin casilla visible, se activa automáticamente en segundo plano
reCAPTCHA v3 — Completamente invisible, asigna una puntuación (0.0–1.0) basada en el comportamiento

Entender qué versión usa un sitio web es fundamental — cada una requiere parámetros ligeramente diferentes al resolver.


Requisitos Previos

Antes de comenzar, asegúrate de tener lo siguiente:

  1. Una instancia de n8n — Ya sea autoalojada o n8n Cloud
  2. Una cuenta de CapSolver — Regístrate aquí y obtén tu clave API
  3. El nodo CapSolver para n8n — Ya disponible como nodo oficial en n8n (no se requiere instalación)
  4. Extensión de navegador CapSolver (opcional pero recomendada) — Para identificar parámetros de captcha en sitios objetivo

Importante: Asegúrate de tener saldo suficiente en tu cuenta de CapSolver. Las tareas de resolución de reCAPTCHA consumen créditos según el tipo de captcha.


Configurando CapSolver en n8n

CapSolver está disponible como una integración oficial en n8n — no se requiere instalar nodos de la comunidad. Puedes encontrarlo directamente en el panel de nodos al construir tus flujos.

Como es una integración oficial, necesitas crear una credencial en n8n para que el nodo CapSolver pueda autenticarse con tu cuenta.

Paso 1: Abre la Página de Credenciales

Ve a tu instancia de n8n y navega a Configuración → Credenciales. Verás todas tus credenciales configuradas aquí.

Página de credenciales de n8n mostrando cuenta CapSolver

Paso 2: Crea la Credencial de CapSolver

  1. Haz clic en Crear credencial (arriba a la derecha)
  2. Busca "CapSolver" y selecciona CapSolver API
  3. Ingresa tu Clave API — cópiala directamente desde el Dashboard de CapSolver
  4. Deja Dominios permitidos para solicitudes HTTP en Todos (por defecto)
  5. Haz clic en Guardar

n8n probará automáticamente la conexión. Deberías ver un banner verde con "Conexión probada con éxito" confirmando que tu clave API es válida.

Configuración de credencial CapSolver con prueba de conexión exitosa

Importante: Cada nodo CapSolver en tus flujos hará referencia a esta credencial. Solo necesitas crearla una vez — todos tus flujos solucionadores compartirán la misma credencial.

¡Ahora estás listo para construir tu flujo de trabajo solucionador de reCAPTCHA!


Cómo Identificar Parámetros de reCAPTCHA

Antes de poder resolver un reCAPTCHA, necesitas conocer sus parámetros — específicamente websiteURL y websiteKey (también llamada clave del sitio). La forma más fácil de encontrarlos es usando la Extensión de Navegador CapSolver.

Paso 1: Instala la Extensión CapSolver

Descarga e instala la extensión CapSolver desde la Chrome Web Store o Firefox Add-ons.

Paso 2: Abre el Detector de CAPTCHA

  1. Navega al sitio web objetivo
  2. Presiona F12 para abrir las Herramientas de Desarrollador
  3. Encuentra la pestaña "CapSolver Captcha Detector" en DevTools
Pestaña CapSolver Captcha Detector en DevTools

Paso 3: Activa el CAPTCHA

Con el panel del detector abierto, interactúa con la página para activar el reCAPTCHA. La extensión detectará automáticamente y mostrará todos los parámetros relevantes:

  • URL del sitio web — La URL de la página que aloja el CAPTCHA
  • Clave del sitio (Website Key) — El identificador público del captcha
  • pageAction — La acción específica que se verifica (v3)
  • isInvisible — Si es un reCAPTCHA invisible
  • isEnterprise — Si usa reCAPTCHA Enterprise
  • apiDomain — El endpoint API que se usa (por ejemplo, recaptcha.net)
Parámetros reCAPTCHA detectados en la extensión CapSolver

Consejo: La extensión genera una salida JSON que muestra exactamente cómo formatear estos parámetros para tu solicitud de resolución. Esto te ahorra tener que inspeccionar manualmente el código fuente de la página.

Para una guía detallada sobre cómo identificar parámetros de captcha, consulta la documentación oficial de CapSolver.


Flujo de Trabajo: API Solucionadora de reCAPTCHA

Este flujo crea un endpoint POST que acepta parámetros de reCAPTCHA y devuelve un token resuelto. La misma estructura de 4 nodos funciona para todos los tipos de reCAPTCHA — solo cambia la Operación en el nodo CapSolver.

Flujo solucionador de reCAPTCHA v2 en n8n

Cómo Funciona

  1. Webhook — Recibe solicitudes POST con parámetros del captcha
  2. CapSolver — Resuelve el desafío usando la Operación configurada
  3. ¿Error en CapSolver? — Nodo IF que bifurca según si la resolución falló ($json.error no está vacío)
  4. Responder al Webhook — Devuelve la solución en caso de éxito, o {"error": "..."} en caso de fallo

Elegir Tu Tipo de reCAPTCHA

Tipo Operación a seleccionar Parámetro extra
v2 Estándar reCAPTCHA v2 —
v2 Invisible reCAPTCHA v2 Establece Is Invisible a true en el nodo
v3 reCAPTCHA v3 Añade pageAction — debe coincidir con la acción configurada en el sitio (ejemplo: login, submit)

El flujo a continuación usa reCAPTCHA v2 por defecto. Abre el nodo CapSolver y cambia el desplegable Operación para cambiar de tipo. No se necesitan otros cambios estructurales.

Configuración de Nodos

1. Nodo Webhook

Configuración Valor
Método HTTP POST
Ruta solver-recaptcha
Responder Response Node

Esto crea un endpoint en: https://your-n8n-instance.com/webhook/solver-recaptcha

2. Nodo CapSolver

Parámetro Valor Descripción
Operación reCAPTCHA v2 Cambia a reCAPTCHA v3 para v3; para v2 Invisible, mantén reCAPTCHA v2 y establece Is Invisible en true
Website URL ={{ $json.body.websiteURL }} La URL de la página con el captcha
Website Key ={{ $json.body.websiteKey }} La clave del sitio reCAPTCHA
Page Action ={{ $json.body.pageAction || '' }} Requerido para v3 — debe coincidir con la acción configurada en el sitio
Is Invisible ={{ $json.body.isInvisible || false }} Ponlo en true para v2 Invisible
API Domain ={{ $json.body.apiDomain || '' }} Opcional — dominio API personalizado (ejemplo: recaptcha.net)
Enterprise Payload ={{ $json.body.enterprisePayload || '' }} Opcional — carga adicional para reCAPTCHA Enterprise
Is Session ={{ $json.body.isSession || false }} Opcional — habilitar resolución basada en sesión
Task Type ={{ $json.body.taskType || 'ReCaptchaV2TaskProxyLess' }} Tipo de tarea CapSolver — ver referencia abajo. Por defecto ReCaptchaV2TaskProxyLess
Proxy ={{ $json.body.proxy || '' }} Solo usado cuando el Tipo de Tarea seleccionado requiere proxy (tipos no ProxyLess). Déjalo vacío u omítelo para tipos ProxyLess. Formato: ip:port:user:pass

También selecciona tus credenciales CapSolver en el nodo.

Referencia de Tipos de Tarea reCAPTCHA:

Tipo de Tarea Requiere Proxy Notas
ReCaptchaV2TaskProxyLess No v2 por defecto
ReCaptchaV2Task Sí v2 con proxy
ReCaptchaV2EnterpriseTaskProxyLess No Enterprise v2, sin proxy
ReCaptchaV2EnterpriseTask Sí Enterprise v2, requiere proxy
ReCaptchaV3TaskProxyLess No v3 por defecto
ReCaptchaV3Task Sí v3 con proxy
ReCaptchaV3EnterpriseTaskProxyLess No Enterprise v3, sin proxy
ReCaptchaV3EnterpriseTask Sí Enterprise v3, requiere proxy

Proxy: Solo aplicable para tipos de tarea no ProxyLess (ejemplo: ReCaptchaV2Task, ReCaptchaV3EnterpriseTask). Al usar un tipo ProxyLess, el campo proxy es ignorado — CapSolver usa su propia infraestructura. Al usar un tipo no ProxyLess, debes suministrar un proxy.

3. Nodo ¿Error en CapSolver? (IF)

Configuración Valor
Condición ={{ $json.error }} no está vacío
Rama verdadera Dirige al nodo Error Responder al Webhook
Rama falsa Dirige al nodo Éxito Responder al Webhook

Esto hace explícito el camino de error en el lienzo. El nodo CapSolver continúa en caso de error (onError: continueRegularOutput), por lo que las fallas llegan aquí como { "error": "..." } en lugar de detener el flujo. Puedes conectar nodos adicionales a la rama verdadera (registro, alertas, reintentos) sin tocar la rama de éxito.

4. Nodos Responder al Webhook

Rama de éxito (salida falsa del nodo ¿Error en CapSolver?):

Configuración Valor
Responder con JSON
Cuerpo de respuesta ={{ JSON.stringify($json.data) }}

Pruébalo

Envía una solicitud POST a tu endpoint webhook:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/solver-recaptcha \
  -H "Content-Type: application/json" \
  -d '{
    "websiteURL": "https://example.com/login",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "taskType": "ReCaptchaV2TaskProxyLess"
  }'

El tipo de tarea debe coincidir con la Operación del nodo. Cada flujo desplegado está configurado para una versión específica de reCAPTCHA mediante el campo Operación en el nodo CapSolver (reCAPTCHA v2 o reCAPTCHA v3). Solo los tipos de tarea para esa versión son válidos — enviar un tipo de tarea v3 a un flujo v2 (o viceversa) no funcionará. Nota: v2 Invisible usa la misma operación reCAPTCHA v2 que el v2 estándar — la diferencia está en el parámetro isInvisible, no en la operación.

Para reCAPTCHA v3, también agrega "pageAction": "login" (o la acción que use el sitio) al cuerpo de la solicitud, y usa un tipo de tarea v3 (ejemplo: "taskType": "ReCaptchaV3TaskProxyLess").

Respuesta Esperada:```json
{
"taskId": "abc123...",
"solution": {
"gRecaptchaResponse": "03AGdBq24PBCb..."
},
"status": "ready"
}

### Importa este flujo de trabajo Copy
Copia el JSON a continuación e impórtalo en n8n a través de **Menú** → **Importar desde JSON**. Luego cambia la **Operación** en el nodo CapSolver al tipo de reCAPTCHA que necesites.

<details>
<summary>Haz clic para expandir el JSON del flujo de trabajo (reCAPTCHA v2 — cambia la Operación para otros tipos)</summary>```json
{
  "nodes": [
    {
      "parameters": {
        "content": "## reCAPTCHA Solver API\n\n### How it works\n\n1. A webhook receives the reCAPTCHA solver request.\n2. The request is passed to the solver node to resolve the reCAPTCHA.\n3. The system checks if the solver encountered an error.\n4. If an error occurred, a response is sent indicating the failure.\n5. If successful, a response is sent with the result.\n\n### Setup steps\n\n- [ ] Configure webhook endpoint to receive solver requests.\n- [ ] Set up CapSolver credentials if necessary.\n\n### Customization\n\nAdjust the solver node settings depending on reCAPTCHA type or difficulty.",
        "width": 480,
        "height": 592
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -800,
        -240
      ],
      "id": "497d295f-4668-48ff-8eaa-97773cfd1c89",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Receive request and solve\n\nHandles incoming requests and solves reCAPTCHA.",
        "width": 496,
        "height": 272,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -240,
        -112
      ],
      "id": "cb4b7a54-ae67-458e-bbef-18e3f6d242bb",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Evaluate and respond\n\nChecks for errors and sends appropriate webhook responses.",
        "width": 560,
        "height": 432,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        464,
        -240
      ],
      "id": "fc9430f0-b899-45ce-b5cf-de9a1b10fbe2",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solver-recaptcha",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "rc-api-001",
      "name": "Receive Solver Request",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -192,
        0
      ],
      "webhookId": "solver-recaptcha"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {}
      },
      "id": "rc-api-002",
      "name": "Solve reCAPTCHA",
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        112,
        0
      ],
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      },
      "continueOnFail": true
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "version": 2,
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "1",
              "operator": {
                "type": "string",
                "operation": "isNotEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.error }}",
              "rightValue": ""
            }
          ]
        },
        "options": {}
      },
      "id": "rc-api-003",
      "name": "CapSolver Error?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        512,
        -32
      ]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
        "options": {}
      },
      "id": "rc-api-004",
      "name": "Respond to Webhook (Error)",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        880,
        -128
      ]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json.data) }}",
        "options": {}
      },
      "id": "rc-api-005",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        880,
        32
      ]
    }
  ],
  "connections": {
    "Receive Solver Request": {
      "main": [
        [
          {
            "node": "Solve reCAPTCHA",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve reCAPTCHA": {
      "main": [
        [
          {
            "node": "CapSolver Error?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapSolver Error?": {
      "main": [
        [
          {
            "node": "Respond to Webhook (Error)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
  }
}
```</details>
---

## Flujo de trabajo: Enviar tokens a sitios web

Hasta ahora, los flujos de trabajo de la API anteriores muestran cómo **obtener** un token de captcha resuelto. Pero, ¿qué se hace realmente con él?

En la automatización del mundo real, resolver el captcha es solo la mitad del trabajo. Necesitas **enviar el token** al sitio web objetivo — exactamente como lo haría un navegador — para desbloquear los datos o la acción detrás del captcha.

Aquí está el patrón general:

1. **Resolver el captcha** → Obtener el token `gRecaptchaResponse` de CapSolver
2. **Enviar el token** → Enviarlo al sitio web objetivo mediante una solicitud HTTP (usualmente como un campo de formulario `g-recaptcha-response` o parámetro de URL)
3. **Verificar la respuesta** → Comprobar si el sitio web aceptó el token y devolvió los datos esperados
4. **Procesar el resultado** → Extraer los datos que necesitas

### Ejemplo: Resolver y enviar reCAPTCHA v2

**Ejemplo:** [example.com](https://example.com)

![Flujo de trabajo de scraping de reCAPTCHA v2 en n8n](https://assets.capsolver.com/prod/posts/how-to-solve-recaptcha-n8n/d5PwlG9NjvBb-d2b5ca33bd970f64a6301fa75ae2eb22.png)

#### Flujo del flujo de trabajo

Disparador manual → CapSolver reCAPTCHA v2 → Solicitud HTTP POST → IF (verificar éxito) → Válido / Inválido

Copy
#### Cómo funciona

1. **Disparador manual** — Inicia el flujo de trabajo manualmente (haz clic en "Ejecutar flujo de trabajo"). Puedes reemplazarlo con cualquier disparador — Webhook, Programación, Evento de aplicación, etc.
2. **CapSolver reCAPTCHA v2** — Resuelve el captcha para la página de demostración:
   - URL del sitio web: `https://example.com`
   - Clave del sitio web: `YOUR_SITE_KEY`
3. **Solicitud HTTP POST** — Envía el token resuelto a la misma URL como un formulario POST:
   - El token se envía en el campo de formulario `g-recaptcha-response`
   - Esto es exactamente lo que hace un navegador cuando haces clic en "Enviar" después de resolver el captcha
4. **Nodo IF** — Verifica si el HTML de la respuesta contiene `"recaptcha-success"`, lo que significa que el captcha fue aceptado
5. **Válido / Inválido** — El nodo IF dirige a la rama **Válido** en caso de éxito (donde extraes los datos que necesitas, por ejemplo, con el **nodo HTML** para listados de productos, resultados de formularios, etc.) o a la rama **Inválido** en caso de fallo (donde manejas el error)

> **Concepto clave:** Cada sitio web maneja el envío del token de manera diferente. En esta demo, el token va en un campo de formulario `g-recaptcha-response` vía POST — pero otros sitios pueden esperarlo como un parámetro de URL, en un cuerpo JSON, o a través de un endpoint completamente diferente. Siempre inspecciona el envío real del formulario del sitio (usando la pestaña Red de DevTools) para ver exactamente cómo debe enviarse el token.

<details>
<summary>Haz clic para expandir el JSON del flujo de trabajo</summary>```json
{
  "nodes": [
    {
      "parameters": {
        "content": "## reCAPTCHA v2 \u2014 All Triggers\n\n### How it works\n\n1. Receives solver requests through a webhook.\n2. Processes these requests using CapSolver and returns the results.\n3. Regularly triggers checks every hour using a schedule.\n4. Executes the scheduled process and checks the status of tasks.\n5. Allows manual testing of CapSolver through a manual trigger.\n\n### Setup steps\n\n- [ ] Set up webhook credentials for 'Receive Solver Request'.\n- [ ] Configure CapSolver with necessary keys for all CapSolver nodes.\n- [ ] Assign necessary permissions for HTTP request to reCAPTCHA endpoint.\n- [ ] Review and adjust the schedule in 'Schedule Trigger'.\n- [ ] Test manual execution with 'Manual Trigger'.\n",
        "width": 480,
        "height": 896
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -816,
        -128
      ],
      "id": "68e8c344-ce45-4e9f-859b-ca005db7c73e",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Receive and handle requests\n\nStarts with receiving a solver request via webhook, processes it, and returns the solver result.",
        "width": 800,
        "height": 304,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -256,
        -128
      ],
      "id": "c26741c7-e0e6-4a4e-9fbf-2a623df014c8",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Scheduled recurrent process\n\nInitiates the process on an hourly schedule, sets target parameters, and sends them to CapSolver.",
        "width": 800,
        "height": 304,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -256,
        224
      ],
      "id": "4b879cbf-e269-4260-9596-740b95df628a",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "## Process and validate token\n\nPosts to the reCAPTCHA validation endpoint and checks results, branching into pass or fail paths.",
        "width": 736,
        "height": 464,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        656,
        96
      ],
      "id": "7c860b53-f4a7-4d0b-8537-5253eec5a043",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "## Manual testing process\n\nAllows manual trigger testing with CapSolver and formats the result for review.",
        "width": 800,
        "height": 272,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -256,
        576
      ],
      "id": "8936a2df-c5b5-4c63-a0d5-afd190553a57",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solve-recaptcha-v2",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -208,
        0
      ],
      "id": "11111111-1111-1111-1111-111111111101",
      "name": "Receive Solver Request",
      "webhookId": "a1b2c3d4-e5f6-7890-abcd-ef1234567801",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "type": "={{ $json.body.taskType || 'ReCaptchaV2TaskProxyLess' }}",
        "proxy": "={{ $json.body.proxy || '' }}",
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {
          "pageAction": "={{ $json.body.pageAction || '' }}",
          "isInvisible": "={{ $json.body.isInvisible || false }}",
          "apiDomain": "={{ $json.body.apiDomain || '' }}",
          "enterprisePayload": "={{ $json.body.enterprisePayload || '' }}",
          "isSession": "={{ $json.body.isSession || false }}"
        }
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        112,
        0
      ],
      "id": "11111111-1111-1111-1111-111111111102",
      "name": "CapSolver [Webhook]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json.data) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        400,
        0
      ],
      "id": "11111111-1111-1111-1111-111111111103",
      "name": "Return Solver Result"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 1
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -208,
        352
      ],
      "id": "11111111-1111-1111-1111-111111111104",
      "name": "Schedule Trigger (Every 1h)"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "sa-001",
              "name": "websiteURL",
              "value": "https://www.google.com/recaptcha/api2/demo",
              "type": "string"
            },
            {
              "id": "sa-002",
              "name": "websiteKey",
              "value": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        112,
        352
      ],
      "id": "11111111-1111-1111-1111-111111111105",
      "name": "Set Target Params"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.websiteURL }}",
        "websiteKey": "={{ $json.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        400,
        352
      ],
      "id": "11111111-1111-1111-1111-111111111106",
      "name": "CapSolver [Schedule]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://www.google.com/recaptcha/api2/demo",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        704,
        352
      ],
      "id": "11111111-1111-1111-1111-111111111107",
      "name": "Submit Token"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "if-001",
              "leftValue": "={{ $json.data }}",
              "rightValue": "recaptcha-success",
              "operator": {
                "type": "string",
                "operation": "contains"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        1008,
        352
      ],
      "id": "11111111-1111-1111-1111-111111111108",
      "name": "Check Result"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "sp-001",
              "name": "status",
              "value": "passed",
              "type": "string"
            },
            {
              "id": "sp-002",
              "name": "message",
              "value": "reCAPTCHA v2 monitor passed successfully",
              "type": "string"
            },
            {
              "id": "sp-003",
              "name": "timestamp",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1248,
        224
      ],
      "id": "11111111-1111-1111-1111-111111111109",
      "name": "Monitor Passed"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "sf-001",
              "name": "status",
              "value": "failed",
              "type": "string"
            },
            {
              "id": "sf-002",
              "name": "message",
              "value": "reCAPTCHA v2 monitor FAILED \u2014 token rejected",
              "type": "string"
            },
            {
              "id": "sf-003",
              "name": "timestamp",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1248,
        384
      ],
      "id": "11111111-1111-1111-1111-111111111110",
      "name": "Monitor Failed"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -208,
        688
      ],
      "id": "11111111-1111-1111-1111-111111111111",
      "name": "Manual Trigger (Test)"
    },
    {
      "parameters": {
        "websiteURL": "https://www.google.com/recaptcha/api2/demo",
        "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        112,
        688
      ],
      "id": "11111111-1111-1111-1111-111111111112",
      "name": "CapSolver [Manual]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "mr-001",
              "name": "token",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}",
              "type": "string"
            },
            {
              "id": "mr-002",
              "name": "taskId",
              "value": "={{ $json.data.taskId }}",
              "type": "string"
            },
            {
              "id": "mr-003",
              "name": "status",
              "value": "solved",
              "type": "string"
            },
            {
              "id": "mr-004",
              "name": "solvedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        400,
        688
      ],
      "id": "11111111-1111-1111-1111-111111111113",
      "name": "Format Result"
    }
  ],
  "connections": {
    "Receive Solver Request": {
      "main": [
        [
          {
            "node": "CapSolver [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapSolver [Webhook]": {
      "main": [
        [
          {
            "node": "Return Solver Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger (Every 1h)": {
      "main": [
        [
          {
            "node": "Set Target Params",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Target Params": {
      "main": [
        [
          {
            "node": "CapSolver [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapSolver [Schedule]": {
      "main": [
        [
          {
            "node": "Submit Token",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submit Token": {
      "main": [
        [
          {
            "node": "Check Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Result": {
      "main": [
        [
          {
            "node": "Monitor Passed",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Monitor Failed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Trigger (Test)": {
      "main": [
        [
          {
            "node": "CapSolver [Manual]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapSolver [Manual]": {
      "main": [
        [
          {
            "node": "Format Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
  }
}
```</details>

> **Adaptación para otros tipos de reCAPTCHA:** Este mismo patrón funciona para **v2 Invisible** y **v3**. Para v2 Invisible, establece `isInvisible: true` en el nodo CapSolver. Para v3, cambia la Operación a `reCAPTCHA v3` y añade el parámetro `pageAction`. El paso de envío de la solicitud HTTP variará según el sitio — siempre inspecciona el envío real del formulario en DevTools.

---

## Flujo de trabajo: Ejemplos de casos de uso

La API del solucionador y los ejemplos de scraping anteriores muestran el patrón principal: resolver el captcha, enviar el token, procesar el resultado. Los siguientes flujos de trabajo extienden este patrón a **casos de uso listos para producción** — cada uno con disparadores duales (programación + webhook), seguimiento persistente del estado y salida estructurada.


| Flujo de trabajo | Propósito |
|---|---|
| `reCAPTCHA Scraping — Precio y Detalles del Producto — CapSolver + Schedule + Webhook` | Extrae el precio y nombre del producto cada 6 horas, compara con valores previos almacenados en `staticData`, alerta sobre cambios |
| `reCAPTCHA Inicio de Sesión en Cuenta — CapSolver + Schedule + Webhook` | Inicia sesión en tu propia cuenta en un sitio protegido por captcha resolviéndolo primero, luego enviando las credenciales con el token mediante POST |

### Ejemplo 1: Scraping — Precio y Detalles del Producto

Este flujo de trabajo extrae datos de una página de producto cada 6 horas (programación) o bajo demanda (webhook), extrae el precio usando el nodo HTML, y lo compara con el valor almacenado previamente.

**Ruta de programación:**

Cada 6 horas → Resolver reCAPTCHA v3 → Obtener página del producto → Extraer datos
→ Comparar datos → ¿Datos cambiaron? → Construir alerta / Sin cambio

Copy
> **Manejo de errores:** Si CapSolver falla, la ejecución se detiene y se marca como fallida en n8n. Revisa **Ejecuciones** para ver el error, o configura el [Flujo de trabajo de errores](https://docs.n8n.io/flow-logic/error-handling/) de n8n para recibir notificaciones automáticas.

Comportamientos clave:
- Usa **reCAPTCHA v3** con un parámetro `pageAction` (configurable)
- El token se envía como un encabezado `x-recaptcha-token` (adáptalo al formato esperado por tu sitio)
- El **nodo HTML** extrae el precio y nombre del producto mediante selectores CSS (`.product-price`, `h1`)
- `$workflow.staticData.lastPrice` persiste el precio anterior entre ejecuciones
- La comparación de precios detecta tanto **caídas** (severidad: `deal`) como **aumentos** (severidad: `info`)
- El tipo de tarea es `ReCaptchaV3TaskProxyLess` (codificado) — edita directamente el nodo Resolver reCAPTCHA v3 para cambiar el tipo de tarea o proxy

<details>
<summary>Haz clic para expandir el JSON completo del flujo de trabajo (17 nodos)</summary>```json
{
  "nodes": [
    {
      "parameters": {
        "content": "## reCAPTCHA Scraping \u2014 Price & Product Monitor\n\n### How it works\n\n1. Triggers the workflow every 6 hours or via webhook.\n2. Configures target website URL and key for scraping.\n3. Solves reCAPTCHA to access the webpage.\n4. Fetches and extracts product data from the webpage.\n5. Compares current data with previous data to check for changes.\n6. Builds alert or updates status based on data changes.\n\n### Setup steps\n\n- [ ] Configure the 'Every 6 Hours' trigger to set the appropriate time schedule.\n- [ ] Set up the target website URL and key parameters in the 'Set Target Config [Schedule]' node.\n- [ ] Ensure the 'Solve reCAPTCHA' and 'Solve reCAPTCHA [Webhook]' nodes are configured with the correct CAPTCHA services.\n- [ ] Set up webhook endpoint in the 'Webhook Trigger' node.\n- [ ] Configure the 'Respond to Webhook' node for handling webhook responses.\n\n### Customization\n\nAdjust the 'Compare Data' and 'Compare Data [Webhook]' code to fit specific data comparison logic or data formats.",
        "height": 896,
        "width": 480
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1312,
        -352
      ],
      "id": "871c5a60-20b4-4cc0-a357-d5cecb8a322a",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Scheduled trigger setup\n\nTriggers every 6 hours and sets the target config for scraping.",
        "height": 304,
        "width": 496,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -752,
        -128
      ],
      "id": "43acb039-cfcd-47c3-892e-e13da011b721",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Scheduled CAPTCHA solving and page fetch\n\nSolves the CAPTCHA and fetches the product page based on schedule.",
        "height": 304,
        "width": 496,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -144,
        -128
      ],
      "id": "68fc53a6-181e-4ca8-bf7d-f3f8e9b12f9d",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "## Scheduled data extraction and comparison\n\nExtracts and compares data from the fetched page.",
        "height": 272,
        "width": 784,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        464,
        -112
      ],
      "id": "155fc92b-721a-40bf-80e6-6dd2082b126a",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "## Scheduled alert or status update\n\nHandles response based on data comparison for scheduled runs.",
        "height": 560,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1296,
        -352
      ],
      "id": "ee2c8c8e-d21d-42aa-b261-49a6fffb3d11",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "content": "## Webhook trigger setup\n\nInitiates the workflow via a webhook request.",
        "height": 368,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -752,
        304
      ],
      "id": "6957473e-81a0-4afd-a0ea-e6f61c3be715",
      "name": "Sticky Note5"
    },
    {
      "parameters": {
        "content": "## Webhook CAPTCHA solving and page fetch\n\nSolves the CAPTCHA and fetches the product page via webhook.",
        "height": 304,
        "width": 496,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -144,
        304
      ],
      "id": "48990176-a5b5-48db-ac09-bcc207318f0a",
      "name": "Sticky Note6"
    },
    {
      "parameters": {
        "content": "## Webhook data extraction and comparison\n\nProcesses data fetched from the page and checks for changes via webhook.",
        "height": 272,
        "width": 784,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        464,
        320
      ],
      "id": "844166d1-75f7-4192-8bfb-3a1381fb6235",
      "name": "Sticky Note7"
    },
    {
      "parameters": {
        "content": "## Webhook alert or status update\n\nResponds to webhook trigger with alert or status update.",
        "height": 544,
        "width": 384,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1328,
        240
      ],
      "id": "c1926a60-dfb3-4520-a530-82aa40c6341c",
      "name": "Sticky Note8"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -704,
        0
      ],
      "id": "rc-s-901",
      "name": "Every 6 Hours"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "cfg-001",
              "name": "websiteURL",
              "value": "https://YOUR-TARGET-SITE.com/product-page",
              "type": "string"
            },
            {
              "id": "cfg-002",
              "name": "websiteKey",
              "value": "YOUR_SITE_KEY_HERE",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -400,
        0
      ],
      "id": "rc-s-900",
      "name": "Set Target Config [Schedule]"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.websiteURL }}",
        "websiteKey": "={{ $json.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        0
      ],
      "id": "rc-s-902",
      "name": "Solve reCAPTCHA",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Set Target Config [Schedule]').first().json.websiteURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        0
      ],
      "id": "rc-s-903",
      "name": "Fetch Product Page"
    },
    {
      "parameters": {
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "price",
              "cssSelector": ".product-price, [data-price], .price"
            },
            {
              "key": "productName",
              "cssSelector": "h1, .product-title"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.html",
      "typeVersion": 1.2,
      "position": [
        512,
        0
      ],
      "id": "rc-s-904",
      "name": "Extract Data"
    },
    {
      "parameters": {
        "jsCode": "const staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\nconst parsePrice = (str) => { if (!str) return null; const match = str.match(/[\\d]+\\.?\\d*/); return match ? parseFloat(match[0].replace(',', '')) : null; };\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? 'dropped' : 'increased') : 'unchanged';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : '0';\nreturn [{ json: { productName, currentPrice, previousPrice: previousPrice || 'first check', changed, direction, diff: changed ? `$${diff}` : null, checkedAt: new Date().toISOString() } }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        800,
        0
      ],
      "id": "rc-s-905",
      "name": "Compare Data"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "if-1",
              "leftValue": "={{ $json.changed }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1104,
        0
      ],
      "id": "rc-s-906",
      "name": "Data Changed?"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "alert",
              "value": "=Price {{ $json.direction }} for {{ $json.productName }}: {{ $json.previousPrice }} \u2192 {{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "a2",
              "name": "severity",
              "value": "={{ $json.direction === 'dropped' ? 'deal' : 'info' }}",
              "type": "string"
            },
            {
              "id": "a3",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1344,
        -160
      ],
      "id": "rc-s-907",
      "name": "Build Alert"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "n1",
              "name": "status",
              "value": "no_change",
              "type": "string"
            },
            {
              "id": "n2",
              "name": "currentPrice",
              "value": "={{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "n3",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1344,
        48
      ],
      "id": "rc-s-908",
      "name": "No Change"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "price-monitor-recaptcha",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -704,
        480
      ],
      "id": "rc-s-909",
      "name": "Webhook Trigger",
      "webhookId": "rc-s-909-webhook",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        432
      ],
      "id": "rc-s-910",
      "name": "Solve reCAPTCHA [Webhook]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Webhook Trigger').item.json.body.websiteURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        432
      ],
      "id": "rc-s-911",
      "name": "Fetch Product Page [Webhook]"
    },
    {
      "parameters": {
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "price",
              "cssSelector": ".product-price, [data-price], .price"
            },
            {
              "key": "productName",
              "cssSelector": "h1, .product-title"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.html",
      "typeVersion": 1.2,
      "position": [
        512,
        432
      ],
      "id": "rc-s-912",
      "name": "Extract Data [Webhook]"
    },
    {
      "parameters": {
        "jsCode": "const staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\nconst parsePrice = (str) => { if (!str) return null; const match = str.match(/[\\d]+\\.?\\d*/); return match ? parseFloat(match[0].replace(',', '')) : null; };\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? 'dropped' : 'increased') : 'unchanged';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : '0';\nreturn [{ json: { productName, currentPrice, previousPrice: previousPrice || 'first check', changed, direction, diff: changed ? `$${diff}` : null, checkedAt: new Date().toISOString() } }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        800,
        432
      ],
      "id": "rc-s-913",
      "name": "Compare Data [Webhook]"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "if-2",
              "leftValue": "={{ $json.changed }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1104,
        432
      ],
      "id": "rc-s-914",
      "name": "Data Changed? [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "a4",
              "name": "alert",
              "value": "=Price {{ $json.direction }} for {{ $json.productName }}: {{ $json.previousPrice }} \u2192 {{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "a5",
              "name": "severity",
              "value": "={{ $json.direction === 'dropped' ? 'deal' : 'info' }}",
              "type": "string"
            },
            {
              "id": "a6",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1376,
        368
      ],
      "id": "rc-s-915",
      "name": "Build Alert [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "n4",
              "name": "status",
              "value": "no_change",
              "type": "string"
            },
            {
              "id": "n5",
              "name": "currentPrice",
              "value": "={{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "n6",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1392,
        608
      ],
      "id": "rc-s-916",
      "name": "No Change [Webhook]"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        1568,
        512
      ],
      "id": "rc-s-917",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Every 6 Hours": {
      "main": [
        [
          {
            "node": "Set Target Config [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Target Config [Schedule]": {
      "main": [
        [
          {
            "node": "Solve reCAPTCHA",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve reCAPTCHA": {
      "main": [
        [
          {
            "node": "Fetch Product Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Product Page": {
      "main": [
        [
          {
            "node": "Extract Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Data": {
      "main": [
        [
          {
            "node": "Compare Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Data": {
      "main": [
        [
          {
            "node": "Data Changed?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Changed?": {
      "main": [
        [
          {
            "node": "Build Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Change",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Solve reCAPTCHA [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve reCAPTCHA [Webhook]": {
      "main": [
        [
          {
            "node": "Fetch Product Page [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Product Page [Webhook]": {
      "main": [
        [
          {
            "node": "Extract Data [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Data [Webhook]": {
      "main": [
        [
          {
            "node": "Compare Data [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Data [Webhook]": {
      "main": [
        [
          {
            "node": "Data Changed? [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Changed? [Webhook]": {
      "main": [
        [
          {
            "node": "Build Alert [Webhook]",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Change [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Alert [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No Change [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
  }
}
```</details>

### Ejemplo 2: Inicio de sesión en la cuenta

Este flujo de trabajo automatiza el inicio de sesión en un sitio protegido por captcha. Un nodo **Set Login Config** centraliza todos los parámetros — **[Schedule]** para la ruta programada y **[Webhook]** para la ruta de webhook bajo demanda. Edita el nodo de configuración correspondiente para configurar cada ruta.

**Ruta programada:**

Every 24 Hours → Set Login Config → Solve Captcha → Submit Login
→ Login Successful? → Mark Login Success / Mark Login Failed

Copy
> **Manejo de errores:** Si CapSolver falla, la ejecución se detiene y se marca como fallida en n8n. Revisa **Executions** para ver el error, o configura el [Error Workflow](https://docs.n8n.io/flow-logic/error-handling/) de n8n para recibir notificaciones automáticas.

Comportamientos clave:
- Por defecto usa **reCAPTCHA v2** (`ReCaptchaV2TaskProxyLess`) — cambia `taskType` en **Set Login Config [Schedule]** o **Set Login Config [Webhook]** para la ruta respectiva; cambia la `Operation` en el nodo Solve Captcha si cambias entre v2 y v3
- Los campos del formulario están codificados como `email`, `password` y `g-recaptcha-response` — edita directamente el nodo **Submit Login** para que coincida con los nombres de campos del sitio objetivo
- La verificación **Login Successful?** evalúa tanto `statusCode < 400` como la presencia de un `successMarker` configurable en el cuerpo de la respuesta
- La **ruta Webhook** usa **Set Login Config [Webhook]** con los mismos valores de marcador de posición codificados — edita ese nodo para configurar la ruta webhook bajo demanda
- La ruta webhook devuelve el resultado como JSON a través de **Respond to Webhook**

<details>
<summary>Haz clic para expandir el JSON completo del flujo de trabajo (15 nodos)</summary>```json
{
  "nodes": [
    {
      "parameters": {
        "content": "## reCAPTCHA Account Login\n\n### How it works\n\n1. The workflow triggers every 24 hours to initiate a login process.\n2. It solves reCAPTCHA challenges for login attempts.\n3. Submits login credentials via HTTP requests.\n4. Checks if login is successful and records the outcome.\n5. A webhook can trigger the login process manually.\n6. Responds to webhook calls with login status.\n\n### Setup steps\n\n- [ ] Configure the schedule trigger for desired intervals.\n- [ ] Set up the webhook URL for manual login attempts.\n- [ ] Ensure that credentials for solving reCAPTCHA are valid.\n- [ ] Configure the HTTP request nodes with the correct login endpoint.\n- [ ] Confirm that response nodes are set with the correct output format.\n\n### Customization\n\nCustomizable time intervals for automated login attempts and custom webhook endpoints can be configured.",
        "width": 480,
        "height": 896
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1248,
        -352
      ],
      "id": "b76c0299-05e6-4d65-ba90-63a8148242af",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Scheduled login initialization\n\nTriggers login attempts every 24 hours and configures necessary parameters.",
        "width": 1408,
        "height": 272,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -688,
        -112
      ],
      "id": "0610b8c8-fce5-4efd-b3d2-1eeeb6eba648",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Scheduled login results\n\nDetermines and marks the results of scheduled login attempts.",
        "width": 240,
        "height": 528,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        816,
        -352
      ],
      "id": "73eec9f0-dbe8-43a5-bff7-2308b4cac998",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "## Webhook login initialization\n\nManual login attempts triggered by webhook, solving reCAPTCHA.",
        "width": 1408,
        "height": 272,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -688,
        320
      ],
      "id": "0680f603-0a47-429f-81cb-69ff7741a9bd",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "## Webhook login results and response\n\nRecords results of webhook login attempts and sends response.",
        "width": 512,
        "height": 496,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        816,
        208
      ],
      "id": "4f244d27-03e3-4670-8e6f-67ed6264ac8d",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 24
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -640,
        0
      ],
      "id": "rc-l-921",
      "name": "Every 24 Hours"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "l1",
              "name": "websiteURL",
              "value": "https://YOUR-LOGIN-PAGE.com",
              "type": "string"
            },
            {
              "id": "l2",
              "name": "websiteKey",
              "value": "YOUR_SITE_KEY_HERE",
              "type": "string"
            },
            {
              "id": "l3",
              "name": "successMarker",
              "value": "account-dashboard",
              "type": "string"
            },
            {
              "id": "l4",
              "name": "userAgent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -336,
        0
      ],
      "id": "rc-l-922",
      "name": "Set Login Config [Schedule]"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.websiteURL }}",
        "websiteKey": "={{ $json.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -32,
        0
      ],
      "id": "rc-l-923",
      "name": "Solve Captcha [Schedule]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Set Login Config [Schedule]').item.json.websiteURL }}/login",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "user-agent",
              "value": "={{ $('Set Login Config [Schedule]').item.json.userAgent }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "email",
              "value": "your-email@example.com"
            },
            {
              "name": "password",
              "value": "YOUR_ACCOUNT_PASSWORD"
            },
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": true
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        272,
        0
      ],
      "id": "rc-l-924",
      "name": "Submit Login [Schedule]"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "lif1",
              "leftValue": "={{ $json.statusCode < 400 && String($json.body || $json.data || '').includes($('Set Login Config [Schedule]').item.json.successMarker) }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        576,
        0
      ],
      "id": "rc-l-925",
      "name": "Login Successful? [Schedule]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "s1",
              "name": "action",
              "value": "account_login",
              "type": "string"
            },
            {
              "id": "s2",
              "name": "status",
              "value": "success",
              "type": "string"
            },
            {
              "id": "s3",
              "name": "message",
              "value": "Configured account login flow succeeded",
              "type": "string"
            },
            {
              "id": "s4",
              "name": "checkedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        864,
        -192
      ],
      "id": "rc-l-926",
      "name": "Mark Login Success [Schedule]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "f1",
              "name": "action",
              "value": "account_login",
              "type": "string"
            },
            {
              "id": "f2",
              "name": "status",
              "value": "failed",
              "type": "string"
            },
            {
              "id": "f3",
              "name": "statusCode",
              "value": "={{ $json.statusCode }}",
              "type": "number"
            },
            {
              "id": "f4",
              "name": "message",
              "value": "Login response did not match the configured success marker",
              "type": "string"
            },
            {
              "id": "f5",
              "name": "checkedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        864,
        16
      ],
      "id": "rc-l-927",
      "name": "Mark Login Failed [Schedule]"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "account-login-recaptcha",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -640,
        432
      ],
      "id": "rc-l-928",
      "name": "Webhook Trigger",
      "webhookId": "rc-l-928-webhook",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -32,
        432
      ],
      "id": "rc-l-929",
      "name": "Solve Captcha [Webhook]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Webhook Trigger').item.json.body.loginActionURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "user-agent",
              "value": "={{ $('Webhook Trigger').item.json.body.userAgent || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36' }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "={{ $('Webhook Trigger').item.json.body.usernameField || 'email' }}",
              "value": "={{ $('Webhook Trigger').item.json.body.usernameValue }}"
            },
            {
              "name": "={{ $('Webhook Trigger').item.json.body.passwordField || 'password' }}",
              "value": "={{ $('Webhook Trigger').item.json.body.passwordValue }}"
            },
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": true
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        272,
        432
      ],
      "id": "rc-l-930",
      "name": "Submit Login [Webhook]"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "lif2",
              "leftValue": "={{ $json.statusCode < 400 && String($json.body || $json.data || '').includes($('Webhook Trigger').item.json.body.successMarker) }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        576,
        432
      ],
      "id": "rc-l-931",
      "name": "Login Successful? [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "ws1",
              "name": "action",
              "value": "account_login",
              "type": "string"
            },
            {
              "id": "ws2",
              "name": "status",
              "value": "success",
              "type": "string"
            },
            {
              "id": "ws3",
              "name": "message",
              "value": "Configured account login flow succeeded",
              "type": "string"
            },
            {
              "id": "ws4",
              "name": "checkedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        864,
        336
      ],
      "id": "rc-l-932",
      "name": "Mark Login Success [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "wf1",
              "name": "action",
              "value": "account_login",
              "type": "string"
            },
            {
              "id": "wf2",
              "name": "status",
              "value": "failed",
              "type": "string"
            },
            {
              "id": "wf3",
              "name": "statusCode",
              "value": "={{ $json.statusCode }}",
              "type": "number"
            },
            {
              "id": "wf4",
              "name": "message",
              "value": "Login response did not match the configured success marker",
              "type": "string"
            },
            {
              "id": "wf5",
              "name": "checkedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        880,
        528
      ],
      "id": "rc-l-933",
      "name": "Mark Login Failed [Webhook]"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        1184,
        496
      ],
      "id": "rc-l-934",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Every 24 Hours": {
      "main": [
        [
          {
            "node": "Set Login Config [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Login Config [Schedule]": {
      "main": [
        [
          {
            "node": "Solve Captcha [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve Captcha [Schedule]": {
      "main": [
        [
          {
            "node": "Submit Login [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submit Login [Schedule]": {
      "main": [
        [
          {
            "node": "Login Successful? [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Login Successful? [Schedule]": {
      "main": [
        [
          {
            "node": "Mark Login Success [Schedule]",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Mark Login Failed [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Solve Captcha [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve Captcha [Webhook]": {
      "main": [
        [
          {
            "node": "Submit Login [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submit Login [Webhook]": {
      "main": [
        [
          {
            "node": "Login Successful? [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Login Successful? [Webhook]": {
      "main": [
        [
          {
            "node": "Mark Login Success [Webhook]",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Mark Login Failed [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Login Success [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Login Failed [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
  }
}

```</details>

Conclusión

Has aprendido cómo construir APIs para resolver reCAPTCHA y flujos de trabajo de scraping listos para producción usando n8n y CapSolver — sin necesidad de programación tradicional.

En esta guía, cubrimos:

  • Endpoints de API para resolver reCAPTCHA v2, v2 Invisible y v3 usando flujos de trabajo basados en webhooks
  • Ejemplos de casos de uso — scraping e inicio de sesión en cuentas — mostrando cómo enviar tokens resueltos y procesar datos protegidos
  • Cómo identificar los parámetros del captcha usando la extensión de navegador de CapSolver
  • Mejores prácticas para el manejo de tokens, gestión de errores y uso en producción

La conclusión clave: resolver el captcha es solo la mitad del trabajo — también necesitas enviar el token al sitio web objetivo para desbloquear los datos protegidos.

Consejo: Estos flujos de trabajo usan disparadores de Schedule + Webhook, pero puedes cambiar el nodo disparador a cualquier disparador de n8n — manual, evento de app, envío de formulario, etc. Después de obtener los datos, usa los nodos integrados de n8n para guardar resultados en Google Sheets, bases de datos, almacenamiento en la nube, o enviar alertas vía Telegram/Slack/Email.


¿Listo para comenzar? Regístrate en CapSolver y usa el código de bono n8n para un 8% extra en tu primera recarga.

Banner del código de bono de CapSolver

Preguntas Frecuentes

¿Cuánto cuesta resolver un reCAPTCHA?

El precio varía según el tipo de captcha. reCAPTCHA v2 típicamente cuesta alrededor de $1-3 por cada 1,000 resoluciones. Consulta la página de precios de CapSolver para tarifas actuales.

¿Cuánto tiempo tarda en resolverse un reCAPTCHA?

La mayoría de los desafíos de reCAPTCHA v2 se resuelven en 5-20 segundos. reCAPTCHA v3 suele ser más rápido ya que no involucra un desafío con imágenes.

¿Puedo usar estos flujos de trabajo con n8n Cloud?

¡Sí! Estos flujos de trabajo funcionan tanto con n8n autoalojado como con n8n Cloud. El nodo de CapSolver ya está disponible como integración oficial — solo agrega tus credenciales API.

¿Cómo encuentro la clave del sitio reCAPTCHA para un sitio web?

El método más fácil es usar la extensión de navegador de CapSolver — abre DevTools, ve a la pestaña "CapSolver Captcha Detector" y activa el captcha. La extensión mostrará todos los parámetros automáticamente. Alternativamente, puedes buscar en el código fuente de la página data-sitekey o render= en la URL del script de reCAPTCHA.

¿Cuál es la diferencia entre reCAPTCHA v2 y v2 Invisible?

Ambos usan la misma tecnología subyacente, pero v2 muestra una casilla visible ("No soy un robot") mientras que v2 Invisible se ejecuta en segundo plano sin ningún widget visible. Al resolver, la única diferencia es establecer isInvisible: true.

CapSolver devolvió un token pero el sitio web aún lo rechazó — ¿por qué?

Varias cosas pueden causar esto. Primero, los tokens expiran rápido — asegúrate de enviar el token inmediatamente. Segundo, verifica que estás enviando el token al lugar correcto: inspecciona la solicitud de red real que hace el navegador al enviar el formulario (DevTools → pestaña Network) y confirma que el nombre del campo, método de solicitud y endpoint coincidan con lo configurado en n8n. Tercero, algunos sitios requieren parámetros adicionales como enterprisePayload o cookies y encabezados específicos — usa la extensión de CapSolver para verificar si alguno aplica. Si el token sigue siendo rechazado, contacta al soporte de CapSolver para ayuda específica del sitio.

Ver más

Web ScrapingApr 22, 2026

Arquitectura de raspado de web para extracción de datos escalable

Aprende una arquitectura de raspado web escalable en Rust con reqwest, scraper, raspado asíncrono, raspado con navegador sin cabeza, rotación de proxies y manejo de CAPTCHA conforme.

Aloísio Vítor
Aloísio Vítor
Web ScrapingFeb 17, 2026

Cómo resolver Captcha en Nanobot con CapSolver

Automatiza la resolución de CAPTCHA con Nanobot y CapSolver. Utiliza Playwright para resolver reCAPTCHA y Cloudflare autónomamente.

Contenido

Adélia Cruz
Adélia Cruz
Web ScrapingFeb 10, 2026

Datos como Servicio (DaaS): ¿Qué es y por qué es importante en 2026

Comprender Datos como Servicio (DaaS) en 2026. Explora sus beneficios, casos de uso y cómo transforma los negocios con insights en tiempo real y escalabilidad.

Sora Fujimoto
Sora Fujimoto
Web ScrapingFeb 05, 2026

Cómo arreglar errores comunes de raspado de web en 2026

Dominar la resolución de diversos errores de scrapers web como 400, 401, 402, 403, 429, 5xx y Cloudflare 1001 en 2026. Aprender estrategias avanzadas para la rotación de IPs, encabezados y limitación de tasa adaptativa con CapSolver.

Emma Foster
Emma Foster
Blog
Web Scraping