ProdutosIntegraçõesRecursosDocumentaçãoPreços
Começar agora

© 2026 CapSolver. All rights reserved.

Contacte-nos

Slack: lola@capsolver.com

Produtos

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Extensão de Navegador
  • Mais tipos de CAPTCHA

Integrações

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Parceiros
  • Ver todas as integrações

Recursos

  • Programa de Referenciação
  • Documentação
  • Referência da API
  • Blog
  • FAQ
  • Glossário
  • Estado

Legal

  • Termos de Serviço
  • Política de Privacidade
  • Política de Reembolso
  • Não vender os meus dados pessoais
Blog//Como Resolver reCAPTCHA v2/v3 Usando CapSolver e n8n
Mar09, 2026

Como Resolver reCAPTCHA v2/v3 Usando CapSolver e n8n

Adélia Cruz

Adélia Cruz

Neural Network Developer

Se você já tentou automatizar interações na web, quase certamente já se deparou com o reCAPTCHA — o sistema de desafio do Google que bloqueia bots de acessarem sites. Seja construindo scrapers, testando aplicações web ou automatizando tarefas repetitivas, o reCAPTCHA pode paralisar todo o seu fluxo de trabalho.

E se você pudesse resolver o reCAPTCHA automaticamente dentro dos seus fluxos de trabalho no n8n — seja criando uma API solver reutilizável, raspando um site protegido por captcha ou automatizando um formulário de login — tudo isso sem escrever uma única linha de código tradicional?

Neste guia, você aprenderá como combinar o n8n (uma ferramenta visual de automação de fluxos de trabalho) com o CapSolver (um serviço de resolução de captcha com inteligência artificial) para resolver desafios reCAPTCHA v2, v2 Invisível e v3 sob demanda — seja como um endpoint API independente ou como uma etapa dentro de qualquer fluxo de automação.

O que você vai construir:

API Solver — um endpoint reutilizável que suas outras ferramentas podem chamar:

  • Uma API solver de reCAPTCHA (funciona para v2, v2 Invisível e v3 — basta mudar a Operação no nó CapSolver)

Fluxos de uso direto — CapSolver embutido como uma etapa dentro de automações maiores:

  • Um scraper de preços e produtos que resolve reCAPTCHA, busca páginas protegidas e alerta sobre mudanças de preço
  • Uma automação de login de conta que resolve reCAPTCHA antes de enviar as credenciais

O que é reCAPTCHA?

reCAPTCHA é o sistema de detecção de bots do Google usado por milhões de sites. Existem três versões principais que você encontrará:

reCAPTCHA v2 — Caixa de seleção ("Não sou um robô") + desafios de imagens
reCAPTCHA v2 Invisível — Sem caixa de seleção visível, dispara automaticamente em segundo plano
reCAPTCHA v3 — Completamente invisível, atribui uma pontuação (0.0–1.0) baseada no comportamento

Entender qual versão um site utiliza é fundamental — cada uma requer parâmetros ligeiramente diferentes para a resolução.


Pré-requisitos

Antes de começar, certifique-se de ter o seguinte:

  1. Uma instância do n8n — Pode ser auto-hospedada ou n8n Cloud
  2. Uma conta CapSolver — Cadastre-se aqui e obtenha sua chave API
  3. O nó CapSolver para n8n — Já disponível como nó oficial no n8n (não precisa instalar)
  4. Extensão de navegador CapSolver (opcional, mas recomendada) — Para identificar parâmetros de captcha nos sites-alvo

Importante: Certifique-se de ter saldo suficiente na sua conta CapSolver. Tarefas de resolução de reCAPTCHA consomem créditos conforme o tipo de captcha.


Configurando o CapSolver no n8n

O CapSolver está disponível como uma integração oficial no n8n — não é necessário instalar nenhum nó da comunidade. Você pode encontrá-lo diretamente no painel de nós ao construir seus fluxos.

Como é uma integração oficial, você precisa criar uma credencial no n8n para que o nó CapSolver possa autenticar com sua conta.

Passo 1: Abra a Página de Credenciais

Vá para sua instância do n8n e navegue até Configurações → Credenciais. Você verá todas as credenciais configuradas aqui.

Página de credenciais do n8n mostrando conta CapSolver

Passo 2: Crie a Credencial CapSolver

  1. Clique em Criar credencial (canto superior direito)
  2. Procure por "CapSolver" e selecione CapSolver API
  3. Insira sua Chave API — copie diretamente do Painel CapSolver
  4. Deixe Domínios Permitidos para Requisição HTTP como All (padrão)
  5. Clique em Salvar

O n8n testará a conexão automaticamente. Você deverá ver uma faixa verde com a mensagem "Conexão testada com sucesso" confirmando que sua chave API é válida.

Configuração da credencial CapSolver com teste de conexão bem-sucedido

Importante: Cada nó CapSolver nos seus fluxos fará referência a essa credencial. Você só precisa criá-la uma vez — todos os seus fluxos solver compartilharão a mesma credencial.

Agora você está pronto para construir seu fluxo de trabalho solver de reCAPTCHA!


Como Identificar os Parâmetros do reCAPTCHA

Antes de poder resolver um reCAPTCHA, você precisa saber seus parâmetros — especificamente o websiteURL e o websiteKey (também chamado de chave do site). A maneira mais fácil de encontrá-los é usando a Extensão de Navegador CapSolver.

Passo 1: Instale a Extensão CapSolver

Baixe e instale a extensão CapSolver na Chrome Web Store ou nos Add-ons do Firefox.

Passo 2: Abra o Detector de CAPTCHA

  1. Navegue até o site alvo
  2. Pressione F12 para abrir as Ferramentas de Desenvolvedor
  3. Encontre a aba "CapSolver Captcha Detector" nas DevTools
Aba CapSolver Captcha Detector nas DevTools

Passo 3: Dispare o CAPTCHA

Com o painel do detector aberto, interaja com a página para disparar o reCAPTCHA. A extensão detectará automaticamente e exibirá todos os parâmetros relevantes:

  • URL do Site — A URL da página que hospeda o CAPTCHA
  • Chave do Site (Site Key) — O identificador público do captcha
  • pageAction — A ação específica sendo verificada (v3)
  • isInvisible — Se é um reCAPTCHA invisível
  • isEnterprise — Se usa reCAPTCHA Enterprise
  • apiDomain — O endpoint da API usado (ex.: recaptcha.net)
Parâmetros reCAPTCHA detectados na extensão CapSolver

Dica: A extensão gera uma saída JSON mostrando exatamente como formatar esses parâmetros para sua requisição de resolução. Isso evita que você tenha que inspecionar manualmente o código-fonte da página.

Para um guia detalhado sobre como identificar parâmetros de captcha, confira a documentação oficial do CapSolver.


Fluxo de Trabalho: API Solver de reCAPTCHA

Este fluxo cria um endpoint POST que aceita parâmetros de reCAPTCHA e retorna um token resolvido. A mesma estrutura de 4 nós funciona para todos os tipos de reCAPTCHA — basta mudar a Operação no nó CapSolver.

Fluxo de trabalho solver de reCAPTCHA v2 no n8n

Como Funciona

  1. Webhook — Recebe requisições POST com parâmetros do captcha
  2. CapSolver — Resolve o desafio usando a Operação configurada
  3. Erro CapSolver? — Nó IF que ramifica se a resolução falhou ($json.error não está vazio)
  4. Responder ao Webhook — Retorna a solução em caso de sucesso, ou {"error": "..."} em caso de falha

Escolhendo o Tipo de reCAPTCHA

Tipo Operação a selecionar Parâmetro extra
v2 Padrão reCAPTCHA v2 —
v2 Invisível reCAPTCHA v2 Defina Is Invisible como true no nó
v3 reCAPTCHA v3 Adicione pageAction — deve corresponder à ação configurada no site alvo (ex.: login, submit)

O fluxo abaixo usa reCAPTCHA v2 como padrão. Abra o nó CapSolver e mude o dropdown Operação para trocar de tipo. Nenhuma outra alteração estrutural é necessária.

Configuração dos Nós

1. Nó Webhook

Configuração Valor
Método HTTP POST
Caminho solver-recaptcha
Responder Response Node

Isso cria um endpoint em: https://sua-instancia-n8n.com/webhook/solver-recaptcha

2. Nó CapSolver

Parâmetro Valor Descrição
Operação reCAPTCHA v2 Mude para reCAPTCHA v3 para v3; para v2 Invisível, mantenha reCAPTCHA v2 e defina Is Invisible como true
Website URL ={{ $json.body.websiteURL }} A URL da página com o captcha
Website Key ={{ $json.body.websiteKey }} A chave do site reCAPTCHA
Page Action ={{ $json.body.pageAction || '' }} Obrigatório para v3 — deve corresponder à ação configurada no site
Is Invisible ={{ $json.body.isInvisible || false }} Defina como true para v2 Invisível
API Domain ={{ $json.body.apiDomain || '' }} Opcional — domínio API customizado (ex.: recaptcha.net)
Enterprise Payload ={{ $json.body.enterprisePayload || '' }} Opcional — payload adicional para reCAPTCHA Enterprise
Is Session ={{ $json.body.isSession || false }} Opcional — habilita resolução baseada em sessão
Task Type ={{ $json.body.taskType || 'ReCaptchaV2TaskProxyLess' }} Tipo de tarefa CapSolver — veja referência abaixo. Padrão é ReCaptchaV2TaskProxyLess
Proxy ={{ $json.body.proxy || '' }} Usado apenas quando o Tipo de Tarefa selecionado requer proxy (tipos não-ProxyLess). Deixe vazio ou omita para tipos ProxyLess. Formato: ip:port:user:pass

Também selecione suas credenciais CapSolver no nó.

Referência de Tipo de Tarefa reCAPTCHA:

Tipo de Tarefa Proxy Necessário Observações
ReCaptchaV2TaskProxyLess Não v2 padrão
ReCaptchaV2Task Sim v2 com proxy
ReCaptchaV2EnterpriseTaskProxyLess Não Enterprise v2, sem proxy
ReCaptchaV2EnterpriseTask Sim Enterprise v2, requer proxy
ReCaptchaV3TaskProxyLess Não v3 padrão
ReCaptchaV3Task Sim v3 com proxy
ReCaptchaV3EnterpriseTaskProxyLess Não Enterprise v3, sem proxy
ReCaptchaV3EnterpriseTask Sim Enterprise v3, requer proxy

Proxy: Aplicável apenas para tipos de tarefa não-ProxyLess (ex.: ReCaptchaV2Task, ReCaptchaV3EnterpriseTask). Ao usar um tipo ProxyLess, o campo proxy é ignorado — o CapSolver usa sua própria infraestrutura. Para tipos não-ProxyLess, você deve fornecer um proxy.

3. Nó Erro CapSolver? (IF)

Configuração Valor
Condição ={{ $json.error }} não está vazio
Ramo verdadeiro Direciona para o nó Responder ao Webhook de Erro
Ramo falso Direciona para o nó Responder ao Webhook de Sucesso

Isso torna o caminho de erro explícito no canvas. O nó CapSolver continua em caso de erro (onError: continueRegularOutput), então falhas chegam aqui como { "error": "..." } em vez de travar o fluxo. Você pode anexar nós adicionais ao ramo verdadeiro (logs, alertas, tentativas) sem alterar o caminho de sucesso.

4. Nós Responder ao Webhook

Ramo de sucesso (saída falsa do nó Erro CapSolver?):

Configuração Valor
Responder com JSON
Corpo da resposta ={{ JSON.stringify($json.data) }}

Teste

Envie uma requisição POST para seu endpoint webhook:bash 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" }' > O tipo de tarefa deve corresponder à Operação do nó. Cada fluxo de trabalho implantado é configurado para uma versão específica do reCAPTCHA através do campo Operation no nó CapSolver (reCAPTCHA v2 ou reCAPTCHA v3). Apenas os tipos de tarefa para essa versão são válidos — enviar um tipo de tarefa v3 para um fluxo v2 (ou vice-versa) não funcionará. Nota: o v2 Invisível usa a mesma operação reCAPTCHA v2 que o v2 padrão — a diferença está no parâmetro isInvisible, não na operação.

Para reCAPTCHA v3, adicione também "pageAction": "login" (ou qualquer ação que o site utilize) ao corpo da requisição, e use um tipo de tarefa v3 (por exemplo, "taskType": "ReCaptchaV3TaskProxyLess").

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

### Importe Este Fluxo de Trabalho Copy
Copie o JSON abaixo e importe-o no n8n através de **Menu** → **Importar de JSON**. Em seguida, altere a **Operação** no nó CapSolver para o tipo de reCAPTCHA desejado.

<details>
<summary>Clique para expandir o JSON do fluxo de trabalho (reCAPTCHA v2 — altere a Operação para outros 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>
---

## Fluxo de Trabalho: Enviando Tokens para Sites

Até agora, os fluxos de trabalho da API acima mostram como **obter** um token de captcha resolvido. Mas o que você realmente **faz** com ele?

Na automação do mundo real, resolver o captcha é apenas metade do trabalho. Você precisa **enviar o token** para o site alvo — exatamente como um navegador faria — para desbloquear os dados ou a ação por trás do captcha.

Aqui está o padrão geral:

1. **Resolver o captcha** → Obter o token `gRecaptchaResponse` do CapSolver
2. **Enviar o token** → Enviá-lo para o site alvo via uma requisição HTTP (geralmente como um campo de formulário `g-recaptcha-response` ou parâmetro de URL)
3. **Verificar a resposta** → Checar se o site aceitou o token e retornou os dados esperados
4. **Processar o resultado** → Extrair os dados que você precisa

### Exemplo: Resolvendo e Enviando reCAPTCHA v2

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

![Fluxo de trabalho de scraping do reCAPTCHA v2 no n8n](https://assets.capsolver.com/prod/posts/how-to-solve-recaptcha-n8n/d5PwlG9NjvBb-d2b5ca33bd970f64a6301fa75ae2eb22.png)

#### Fluxo do Workflow```
Manual Trigger → CapSolver reCAPTCHA v2 → HTTP POST Request → IF (check success) → Valid / Invalid
```#### Como Funciona

1. **Gatilho Manual** — Inicia o fluxo de trabalho manualmente (clique em "Execute workflow"). Você pode substituir isso por qualquer gatilho — Webhook, Agendamento, Evento de App, etc.
2. **CapSolver reCAPTCHA v2** — Resolve o captcha para a página de demonstração:
   - URL do site: `https://example.com`
   - Chave do site: `YOUR_SITE_KEY`
3. **Requisição HTTP POST** — Envia o token resolvido para a mesma URL como um POST de formulário:
   - O token é enviado no campo de formulário `g-recaptcha-response`
   - Isso é exatamente o que um navegador faz quando você clica em "Enviar" após resolver o captcha
4. **Nó IF** — Verifica se o HTML da resposta contém `"recaptcha-success"`, indicando que o captcha foi aceito
5. **Válido / Inválido** — O nó IF direciona para o ramo **Válido** em caso de sucesso (onde você extrai os dados necessários, por exemplo, com o **nó HTML** para listas de produtos, resultados de formulários, etc.) ou para o ramo **Inválido** em caso de falha (onde você trata o erro)

> **Conceito chave:** Cada site lida com o envio do token de forma diferente. Nesta demonstração, o token vai em um campo de formulário `g-recaptcha-response` via POST — mas outros sites podem esperar que ele seja enviado como parâmetro de URL, em um corpo JSON, ou através de um endpoint completamente diferente. Sempre inspecione o envio real do formulário do site (usando a aba Network das DevTools) para ver exatamente como o token precisa ser enviado.

<details>
<summary>Clique para expandir o JSON do fluxo de trabalho</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>

> **Adaptando para outros tipos de reCAPTCHA:** Este mesmo padrão funciona para **v2 Invisível** e **v3**. Para o v2 Invisível, defina `isInvisible: true` no nó CapSolver. Para o v3, altere a Operação para `reCAPTCHA v3` e adicione o parâmetro `pageAction`. A etapa de envio da Requisição HTTP será diferente para cada site — sempre inspecione o envio real do formulário nas DevTools.

---

## Fluxo de Trabalho: Exemplos de Casos de Uso

A API do resolvedor e os exemplos de scraping acima mostram o padrão principal: resolver o captcha, enviar o token, processar o resultado. Os fluxos de trabalho a seguir estendem esse padrão para **casos de uso prontos para produção** — cada um com gatilhos duplos (agendamento + webhook), rastreamento persistente de estado e saída estruturada.


| Fluxo de Trabalho | Propósito |
|---|---|
| `reCAPTCHA Scraping — Preço & Detalhes do Produto — CapSolver + Agendamento + Webhook` | Raspagem do preço e nome do produto a cada 6 horas, compara com valores anteriores armazenados em `staticData`, alerta sobre mudanças |
| `reCAPTCHA Login de Conta — CapSolver + Agendamento + Webhook` | Faz login na sua própria conta em um site protegido por captcha resolvendo primeiro, depois enviando as credenciais via POST com o token |

### Exemplo 1: Raspagem — Preço & Detalhes do Produto

Este fluxo de trabalho raspa uma página de produto a cada 6 horas (agendamento) ou sob demanda (webhook), extrai o preço usando o nó HTML e compara com o valor armazenado anteriormente.

**Caminho do agendamento:**```
Every 6 Hours → Solve reCAPTCHA v3 → Fetch Product Page → Extract Data
  → Compare Data → Data Changed? → Build Alert / No Change
```> **Tratamento de erros:** Se o CapSolver falhar, a execução para e é marcada como falhada no n8n. Verifique em **Executions** para ver o erro, ou configure o [Error Workflow](https://docs.n8n.io/flow-logic/error-handling/) do n8n para ser notificado automaticamente.

Comportamentos principais:
- Usa **reCAPTCHA v3** com um parâmetro `pageAction` (configurável)
- O token é enviado como um cabeçalho `x-recaptcha-token` (adapte ao formato esperado pelo seu site)
- O **nó HTML** extrai preço e nome do produto via seletores CSS (`.product-price`, `h1`)
- `$workflow.staticData.lastPrice` persiste o preço anterior entre execuções
- A comparação de preços detecta tanto **quedas** (gravidade: `deal`) quanto **aumentos** (gravidade: `info`)
- O tipo de tarefa é `ReCaptchaV3TaskProxyLess` (fixo) — edite o nó Solve reCAPTCHA v3 diretamente para alterar o tipo de tarefa ou proxy

<details>
<summary>Clique para expandir o JSON completo do fluxo (17 nós)</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>

### Exemplo 2: Login de Conta

Este fluxo de trabalho automatiza o login em um site protegido por captcha. Um nó **Set Login Config** centraliza todos os parâmetros — **[Schedule]** para o caminho agendado e **[Webhook]** para o caminho de webhook sob demanda. Edite o nó de configuração apropriado para configurar cada caminho.

**Caminho agendado:**```
Every 24 Hours → Set Login Config → Solve Captcha → Submit Login
  → Login Successful? → Mark Login Success / Mark Login Failed
```> **Tratamento de erros:** Se o CapSolver falhar, a execução para e é marcada como falha no n8n. Verifique **Executions** para ver o erro, ou configure o [Error Workflow](https://docs.n8n.io/flow-logic/error-handling/) do n8n para ser notificado automaticamente.

Comportamentos principais:
- Padrão para **reCAPTCHA v2** (`ReCaptchaV2TaskProxyLess`) — altere `taskType` em **Set Login Config [Schedule]** ou **Set Login Config [Webhook]** para o caminho respectivo; altere a `Operation` no nó Solve Captcha se alternar entre v2 e v3
- Os campos do formulário são fixos como `email`, `password` e `g-recaptcha-response` — edite diretamente o nó **Submit Login** para corresponder aos nomes dos campos do site alvo
- A verificação **Login Successful?** avalia tanto `statusCode < 400` quanto a presença de um `successMarker` configurável no corpo da resposta
- O **caminho Webhook** usa **Set Login Config [Webhook]** com os mesmos valores fixos de espaço reservado — edite esse nó para configurar o caminho do webhook sob demanda
- O caminho Webhook retorna o resultado como JSON via **Respond to Webhook**

<details>
<summary>Clique para expandir o JSON completo do fluxo de trabalho (15 nós)</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>

Conclusão

Você aprendeu como construir APIs para resolver reCAPTCHA e fluxos de trabalho de scraping prontos para produção usando n8n e CapSolver — sem necessidade de codificação tradicional.

Neste guia, abordamos:

  • Endpoints de API para solver para reCAPTCHA v2, v2 Invisível e v3 usando fluxos de trabalho baseados em webhook
  • Exemplos de casos de uso — scraping e login de conta — mostrando como enviar tokens resolvidos e processar dados protegidos
  • Como identificar parâmetros de captcha usando a extensão do navegador CapSolver
  • Melhores práticas para manuseio de tokens, gerenciamento de erros e uso em produção

A principal lição: resolver o captcha é apenas metade do trabalho — você também precisa enviar o token para o site alvo para desbloquear os dados protegidos.

Dica: Esses fluxos de trabalho usam gatilhos Schedule + Webhook, mas você pode trocar o nó de gatilho por qualquer gatilho n8n — manual, evento de app, envio de formulário, etc. Após buscar os dados, use os nós integrados do n8n para salvar resultados no Google Sheets, bancos de dados, armazenamento na nuvem, ou enviar alertas via Telegram/Slack/Email.


Pronto para começar? Cadastre-se no CapSolver e use o código bônus n8n para um bônus extra de 8% na sua primeira recarga!

Banner do código bônus CapSolver

Perguntas Frequentes

Quanto custa resolver um reCAPTCHA?

O preço varia conforme o tipo de captcha. O reCAPTCHA v2 normalmente custa cerca de US$ 1-3 por 1.000 resoluções. Confira a página de preços do CapSolver para as tarifas atuais.

Quanto tempo leva para resolver um reCAPTCHA?

A maioria dos desafios reCAPTCHA v2 é resolvida em 5-20 segundos. O reCAPTCHA v3 é geralmente mais rápido, pois não envolve desafio de imagem.

Posso usar esses fluxos de trabalho com o n8n Cloud?

Sim! Esses fluxos funcionam tanto com o n8n auto-hospedado quanto com o n8n Cloud. O nó CapSolver já está disponível como uma integração oficial — basta adicionar suas credenciais de API.

Como encontro a chave do site reCAPTCHA para um site?

O método mais fácil é usar a extensão do navegador CapSolver — abra o DevTools, vá para a aba "CapSolver Captcha Detector" e acione o captcha. A extensão exibirá todos os parâmetros automaticamente. Alternativamente, você pode buscar no código-fonte da página por data-sitekey ou render= na URL do script do reCAPTCHA.

Qual a diferença entre reCAPTCHA v2 e v2 Invisível?

Ambos usam a mesma tecnologia subjacente, mas o v2 mostra uma caixa de seleção visível ("Não sou um robô"), enquanto o v2 Invisível roda em segundo plano sem nenhum widget visível. Ao resolver, a única diferença é definir isInvisible: true.

O CapSolver retornou um token, mas o site ainda o rejeitou — por quê?

Vários fatores podem causar isso. Primeiro, os tokens expiram rapidamente — certifique-se de enviar o token imediatamente. Segundo, verifique se está enviando o token para o lugar correto: inspecione a requisição de rede real que o navegador faz ao enviar o formulário (DevTools → aba Network) e confirme o nome do campo, método da requisição e endpoint correspondem ao que você configurou no n8n. Terceiro, alguns sites exigem parâmetros adicionais como enterprisePayload ou cookies e cabeçalhos específicos — use a extensão CapSolver para verificar se algum deles se aplica. Se o token ainda for rejeitado, contate o suporte do CapSolver para ajuda específica do site.

Ver mais

Web ScrapingApr 22, 2026

Arquitetura de Web Scraping em Rust para Extração de Dados Escalável

Aprenda arquitetura de raspagem web escalável em Rust com reqwest, scraper, raspagem assíncrona, raspagem de navegador headless, rotação de proxies e tratamento de CAPTCHA compatível.

Adélia Cruz
Adélia Cruz
Web ScrapingApr 08, 2026

Selenium vs Puppeteer para Resolução de CAPTCHA: Comparação de Desempenho e Caso de Uso

Compare o Selenium vs Puppeteer para resolver CAPTCHA. Descubra benchmarks de desempenho, notas de estabilidade e como integrar o CapSolver para o máximo de sucesso.

Índice

Ethan Collins
Ethan Collins
Web ScrapingFeb 10, 2026

Dados como Serviço (DaaS): O que é e por que importa em 2026

Entenda Dados como Serviço (DaaS) em 2026. Descubra seus benefícios, casos de uso e como transforma os negócios com visões em tempo real e escalabilidade.

Ethan Collins
Ethan Collins
Web ScrapingFeb 05, 2026

Como corrigir erros comuns de raspagem da web em 2026

Dominar a correção de diversos erros de raspagem de web, como 400, 401, 402, 403, 429, 5xx e 1001 do Cloudflare em 2026. Aprenda estratégias avançadas para rotação de IPs, cabeçalhos e limitação de taxa adaptativa com o CapSolver.

Rajinder Singh
Rajinder Singh
Web Scraping