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
//Como resolver o problema ImageToText usando CapSolver e n8n
Mar16, 2026

Como resolver o problema ImageToText usando CapSolver e n8n

Rajinder Singh

Rajinder Singh

Deep Learning Researcher

CAPTCHAs baseados em imagem estão por toda parte — formulários de login, páginas de inscrição, sites de venda de ingressos e portais governamentais. Eles exibem uma imagem distorcida de letras, números ou uma mistura de ambos, e pedem aos usuários para digitar o que veem. Automatizá-los com ferramentas tradicionais significa construir seu próprio pipeline de OCR, lidar com filtros de ruído e tratar casos especiais para cada fonte e tipo de distorção.

E se você pudesse resolver CAPTCHAs de imagem automaticamente em seus fluxos de trabalho n8n — seja você construindo uma API de resolução reutilizável ou automatizando envios de formulários que exigem a leitura de um captcha de imagem — tudo sem treinar um único modelo?

Neste guia, você aprenderá como combinar n8n (uma ferramenta visual de automação de fluxo de trabalho) com CapSolver (um serviço de resolução de captcha alimentado por IA) para resolver captchas de Imagem para Texto sob demanda — seja como um endpoint de API autônomo ou como uma etapa em um fluxo de trabalho de automação maior.

O que você vai construir:

API de Resolução — um endpoint reutilizável que suas outras ferramentas podem chamar:

  • Uma API de resolução de Imagem para Texto que aceita uma imagem base64 e retorna o texto reconhecido.

Fluxo de Trabalho de Uso Direto — CapSolver incorporado como uma etapa em uma automação maior:

  • Uma automação de formulário que busca a imagem do captcha de um site de destino, a converte para base64, a resolve com CapSolver e envia o formulário com o texto reconhecido.

O que é ImageToTextTask?

ImageToTextTask é o serviço de reconhecimento baseado em OCR do CapSolver. Você envia uma imagem de captcha codificada em base64, e o CapSolver retorna o texto reconhecido — letras, números ou ambos — instantaneamente.

Isso é fundamentalmente diferente de outras operações do CapSolver, como reCAPTCHA ou Turnstile:

Característica ImageToText (Reconhecimento) reCAPTCHA / Turnstile (Token)
Tipo de Recurso Reconhecimento Token
Entrada Imagem Base64 URL do site + chave do site
Resultado Texto reconhecido (instantâneo) Token (requer sondagem)
Requer Proxy Não Depende do tipo de tarefa
Caso de Uso Leitura de texto distorcido de imagens Geração de tokens de verificação

A principal diferença é que as operações de Reconhecimento retornam resultados instantaneamente — não há criação de tarefa e depois sondagem. Você envia a imagem, o CapSolver a lê, e o texto é retornado em um único ciclo de solicitação-resposta.

Parâmetros Obrigatórios

Parâmetro Valor Descrição
body String Base64 A imagem do captcha, codificada em base64. Sem caracteres de nova linha, sem prefixo data:image/...;base64, — apenas a string base64 bruta
module "common" O módulo de reconhecimento. "common" lida com OCR alfanumérico geral

Parâmetros Opcionais

Parâmetro Descrição
websiteURL O URL da página onde o captcha aparece (ajuda o CapSolver a otimizar o reconhecimento)
images (1-9) Imagens adicionais para o módulo "number" ao resolver captchas numéricos de várias imagens

Tipos de Módulo

Módulo Propósito
common OCR geral — letras, números, caracteres mistos. Padrão para a maioria dos captchas
number Captchas apenas numéricos. Suporta resolução em lote com até 9 imagens adicionais através do parâmetro images

Pré-requisitos

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

  1. Uma instância n8n — Auto-hospedada ou n8n Cloud
  2. Uma conta CapSolver — Inscreva-se aqui e obtenha sua chave de API
  3. O nó CapSolver n8n — Já disponível como um nó oficial no n8n (sem necessidade de instalação)

Importante: Certifique-se de ter saldo suficiente em sua conta CapSolver. As tarefas ImageToText consomem créditos com base no uso.


Configurando o CapSolver no n8n

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

Como é uma integração oficial, você precisará 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 n8n e navegue até Settings -> Credentials. Você verá todas as suas credenciais configuradas aqui.

Página de credenciais do n8n mostrando a conta CapSolver

Passo 2: Crie uma credencial CapSolver

  1. Clique em Create credential (canto superior direito)
  2. Procure por "CapSolver" e selecione CapSolver API
  3. Insira sua Chave de API — copie-a diretamente do Painel do CapSolver
  4. Deixe Allowed HTTP Request Domains definido como All (padrão)
  5. Clique em Save

O n8n testará automaticamente a conexão. Você verá um banner verde "Connection tested successfully" confirmando que sua chave de API é válida.

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

Importante: Todos os nós do CapSolver em seus fluxos de trabalho farão referência a esta credencial. Você só precisa criá-la uma vez — todos os seus fluxos de trabalho de resolução compartilharão a mesma credencial.

Agora você está pronto para construir seus fluxos de trabalho de resolução de Imagem para Texto!


Entendendo a Codificação Base64 para Imagens de Captcha

Antes de mergulhar nos fluxos de trabalho, é crucial entender os requisitos de base64 para ImageToTextTask. Esta é a fonte mais comum de erros.

O que o CapSolver espera

O parâmetro body deve conter uma string base64 limpa — os bytes codificados brutos do arquivo de imagem. Especificamente:

  • Sem prefixo data: — se você tiver data:image/png;base64,iVBORw0KGgo..., você deve remover a parte data:image/png;base64,
  • Sem caracteres de nova linha — a string base64 deve ser uma única linha contínua sem caracteres \n
  • Sem espaços em branco — sem espaços, tabulações ou outros caracteres de espaço em branco

Como obter uma string Base64 limpa no n8n

Quando você busca uma imagem usando o nó HTTP Request no n8n, a resposta vem como dados binários. Para convertê-la para base64 para o CapSolver, use um nó Code:

javascript Copy
// Converte dados de imagem binários para base64 limpo
const binaryData = $input.first().binary.data;
const base64String = binaryData.data; // Já é base64 no formato binário do n8n

// Remove o prefixo data: se presente (verificação de segurança)
const cleanBase64 = base64String.replace(/^data:image\/\w+;base64,/, "");

// Remove quaisquer caracteres de nova linha
const finalBase64 = cleanBase64.replace(/\n/g, "");

return [{ json: { body: finalBase64 } }];

Erros Comuns

Erro Resultado
Envio de data:image/png;base64,... CapSolver rejeita o conteúdo como inválido
String Base64 contém caracteres de nova linha CapSolver não consegue decodificar a imagem
Envio de URL de imagem em vez de base64 Parâmetro incorreto — body espera base64, não um URL
Envio de uma string vazia CapSolver retorna um erro

Fluxo de Trabalho 1: API de Resolução de Imagem para Texto

Este fluxo de trabalho cria um endpoint de API POST que aceita uma imagem de captcha base64 e retorna o texto reconhecido.

Como Funciona

O fluxo de trabalho consiste em seis nós:

  1. Receive Solver Request — Webhook que recebe solicitações POST com dados de imagem
  2. Validate Image Input — Nó Code que verifica se body existe e é um base64 válido
  3. Solve Image Captcha — Nó CapSolver que usa Resource=Recognition, Operation=Image To Text
  4. Image Captcha Error? — Nó IF que ramifica com base no sucesso ou falha da resolução
  5. Respond to Webhook — Retorna o texto reconhecido em caso de sucesso
  6. Respond to Webhook Error — Retorna uma mensagem de erro em caso de falha

Configuração do Nó

1. Receive Solver Request (Webhook)

Configuração Valor
Método HTTP POST
Caminho solver-image-to-text
Resposta Response Node

Isso cria um endpoint em: https://your-n8n-instance.com/webhook/solver-image-to-text

2. Validate Image Input (Code)

Este nó garante que o corpo da solicitação contenha um parâmetro body válido e remove quaisquer prefixos data: ou caracteres de nova linha acidentais:

javascript Copy
const body = $input.first().json.body;

if (!body || !body.body) {
  return [{ json: { error: 'Missing required field: body (base64 encoded image)' } }];
}

let imageBase64 = String(body.body);

// Remove o prefixo data: se incluído acidentalmente
imageBase64 = imageBase64.replace(/^data:image\/\w+;base64,/, '');

// Remove caracteres de nova linha e espaços em branco
imageBase64 = imageBase64.replace(/[\n\r\s]/g, '');

// Validação básica de base64
if (!/^[A-Za-z0-9+\/]+=*$/.test(imageBase64)) {
  return [{ json: { error: 'Invalid base64 encoding in body field' } }];
}

return [{
  json: {
    body: imageBase64,
    module: body.module || 'common'
  }
}];

3. Solve Image Captcha (CapSolver)

Parâmetro Valor Descrição
Recurso Recognition Selecione o recurso de Reconhecimento (não Token)
Operação Image To Text Operação ImageToTextTask
Corpo {{ $json.body }} String de imagem base64 limpa
Módulo {{ $json.module }} Módulo de reconhecimento (padrão: common)

Importante: No nó CapSolver, você deve selecionar Resource = Recognition primeiro, e depois Operation = Image To Text. Isso é diferente das operações de Token, como reCAPTCHA ou Turnstile. Selecione também sua credencial CapSolver neste nó.

4. Image Captcha Error? (IF)

Configuração Valor
Condição ={{ $json.error }} não está vazio
Ramo Verdadeiro Vai para o nó Error Respond to Webhook
Ramo Falso Vai para o nó Success Respond to Webhook

O nó CapSolver continua em caso de erro (onError: continueRegularOutput), então os erros virão aqui como { "error": "..." } em vez de travar o fluxo de trabalho.

5. Respond to Webhook (Sucesso)

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

6. Respond to Webhook Error

Configuração Valor
Responder com JSON
Corpo da Resposta ={{ JSON.stringify({ error: $json.error }) }}

As mensagens de erro seguem um dos dois formatos:

Ponto de Falha Formato
Falha na criação da tarefa { "error": "..." }
Falha no reconhecimento { "status": "failed", "error": "..." }

Testando

Envie uma solicitação POST para o endpoint do seu webhook:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/solver-image-to-text \
  -H "Content-Type: application/json" \
  -d '{
    "body": "iVBORw0KGgoAAAANSUhEUgAA...",
    "module": "common"
  }'

Resposta esperada:

json Copy
{
  "solution": {
    "text": "xK7mQ"
  },
  "status": "ready"
}

O campo solution.text contém o texto do captcha reconhecido. Este é o valor que você inserirá no campo de entrada do captcha.

Importar Este Fluxo de Trabalho

Copie o JSON abaixo e importe-o para o n8n via Menu -> Import from JSON:

Clique para expandir o JSON do fluxo de trabalho
json Copy
{
  "name": "Image To Text — Solver API",
  "nodes": [
    {
      "parameters": {
        "content": "## Image To Text — Solver API\n\n**Para quem:** Desenvolvedores que precisam de um endpoint de resolução de captcha baseado em OCR para suas aplicações.\n\n**O que faz:** Aceita uma imagem de captcha codificada em base64 via webhook, valida a entrada, a resolve usando o reconhecimento ImageToTextTask do CapSolver e retorna o texto reconhecido.\n\n**Como funciona:**\n1. O Webhook recebe um POST com `body` (imagem base64) e `module` opcional\n2. O nó Code valida a entrada base64 e remove quaisquer prefixos data:\n3. O nó de Reconhecimento do CapSolver resolve o captcha de imagem instantaneamente\n4. O nó IF verifica erros\n5. A resposta retorna o texto reconhecido ou detalhes do erro\n\n**Configuração:**\n1. Adicione sua chave de API do CapSolver em **Settings → Credentials**\n2. Ative o fluxo de trabalho para habilitar o endpoint do webhook\n3. Envie imagens base64 para `/webhook/solver-image-to-text`",
        "height": 480,
        "width": 460,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-620, -280],
      "id": "sticky-itt-main-001",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "### Receber e Validar\nO Webhook aceita POSTs com imagens base64. O nó Code valida e limpa a entrada.",
        "height": 480,
        "width": 700,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-140, -280],
      "id": "sticky-itt-section-002",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "### Resolver Captcha de Imagem\nNó de Reconhecimento do CapSolver — retorna o texto reconhecido instantaneamente (sem sondagem).",
        "height": 480,
        "width": 400,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [580, -280],
      "id": "sticky-itt-section-003",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "### Verificar Erro e Responder\nO nó IF ramifica em caso de erro. O sucesso retorna o texto reconhecido, a falha retorna os detalhes do erro.",
        "height": 480,
        "width": 900,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [1000, -280],
      "id": "sticky-itt-section-004",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "### Lógica de Validação\nRemover prefixo data:, remover caracteres de nova linha, verificar formato base64.",
        "height": 480,
        "width": 400,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [160, -280],
      "id": "sticky-itt-section-005",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "content": "### Tratamento de Resposta\nSucesso: retorna a solução com o texto reconhecido. Falha: retorna a mensagem de erro.",
        "height": 480,
        "width": 500,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [1420, -280],
      "id": "sticky-itt-section-006",
      "name": "Sticky Note5"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solver-image-to-text",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [-100, 0],
      "id": "itt-11111111-1111-1111-1111-111111111101",
      "name": "Receive Solver Request",
      "webhookId": "itt-aaaa-bbbb-cccc-dddd-111111111101"
    },
    {
      "parameters": {
        "jsCode": "const body = $input.first().json.body;\n\nif (!body || !body.body) {\n  return [{ json: { error: 'Missing required field: body (base64 encoded image)' } }];\n}\n\nlet imageBase64 = String(body.body);\n\n// Remove o prefixo data: se incluído acidentalmente\nimageBase64 = imageBase64.replace(/^data:image\\/\\w+;base64,/, '');\n\n// Remove caracteres de nova linha e espaços em branco\nimageBase64 = imageBase64.replace(/[\\n\\r\\s]/g, '');\n\n// Validação básica de base64\nif (!/^[A-Za-z0-9+\\/]+=*$/.test(imageBase64)) {\n  return [{ json: { error: 'Invalid base64 encoding in body field' } }];\n}\n\nreturn [{\n  json: {\n    body: imageBase64,\n    module: body.module || 'common'\n  }\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [200, 0],
      "id": "itt-11111111-1111-1111-1111-111111111102",
      "name": "Validate Image Input"
    },
    {
      "parameters": {
        "resource": "recognition",
        "operation": "Image To Text",
        "body": "={{ $json.body }}",
        "module": "={{ $json.module }}"
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [620, 0],
      "id": "itt-11111111-1111-1111-1111-111111111103",
      "name": "Solve Image Captcha",
      "onError": "continueRegularOutput",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose",
            "version": 2
          },
          "conditions": [
            {
              "id": "itt-err-001",
              "leftValue": "={{ $json.error }}",
              "operator": {
                "type": "string",
                "operation": "isNotEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [1040, 0],
      "id": "itt-11111111-1111-1111-1111-111111111104",
      "name": "Image Captcha Error?"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [1460, -100],
      "id": "itt-11111111-1111-1111-1111-111111111105",
      "name": "Respond to Webhook Error"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json.data) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [1460, 100],
      "id": "itt-11111111-1111-1111-1111-111111111106",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Receive Solver Request": {
      "main": [
        [
          {
            "node": "Validate Image Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Image Input": {
      "main": [
        [
          {
            "node": "Solve Image Captcha",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve Image Captcha": {
      "main": [
        [
          {
            "node": "Image Captcha Error?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Image Captcha Error?": {
      "main": [
        [
          {
            "node": "Respond to Webhook Error",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Fluxo de Trabalho 2: Automação de Formulários — Resolver Captcha de Imagem e Enviar

Este fluxo de trabalho automatiza o envio de formulários de ponta a ponta em um site protegido por captcha de imagem. Ele busca a imagem do captcha do site de destino, a converte para base64, a resolve com CapSolver e envia o formulário com o texto reconhecido.

Ele suporta dois modos de gatilho:

  • Agendamento: executa automaticamente a cada 6 horas
  • Webhook: dispara sob demanda e retorna os resultados como JSON

Como Funciona

Caminho do Agendamento:

Copy
A cada 6 horas → Definir Configuração de Destino → Obter Imagem do Captcha → Converter para Base64
  → Resolver Captcha de Imagem → Enviar Formulário com Solução → Verificar Resultado do Envio
  → Marcar Sucesso / Marcar Falha

Caminho do Webhook:

Copy
Gatilho Webhook → Definir Configuração de Destino [Webhook] → Obter Imagem do Captcha [Webhook]
  → Converter para Base64 [Webhook] → Resolver Captcha de Imagem [Webhook]
  → Enviar Formulário com Solução [Webhook] → Verificar Resultado do Envio [Webhook]
  → Marcar Sucesso [Webhook] / Marcar Falha [Webhook] → Responder Webhook

Configuração do Nó

1. Nós de Gatilho

Gatilho de Agendamento:

Configuração Valor
Intervalo A cada 6 horas

Gatilho Webhook:

Configuração Valor
Método HTTP POST
Caminho image-captcha-form
Resposta Response Node

2. Definir Configuração de Destino

Este nó armazena todas as configurações para o site de destino em um só lugar:

Campo de Configuração Propósito
captchaImageURL O URL que serve a imagem do captcha (por exemplo, https://example.com/captcha.png)
formActionURL O endpoint que aceita o POST do formulário
captchaFieldName O nome do campo do formulário para a resposta do captcha (por exemplo, captcha, captcha_code, verification)
module O módulo de reconhecimento do CapSolver (common para OCR geral, number para apenas números)
userAgent A string do agente do usuário para enviar com as solicitações

3. Obter Imagem do Captcha (HTTP Request)

Configuração Valor
Método GET
URL ={{ $json.captchaImageURL }}
Formato da Resposta File (binário)

Isso baixa a imagem do captcha como dados binários. A resposta estará disponível em $binary.data.

Nota: Alguns sites exigem cookies ou cabeçalhos de sessão para servir a imagem do captcha. Se o captcha for vinculado à sessão, você pode precisar adicionar uma solicitação anterior para obter o cookie de sessão e passá-lo.

4. Converter para Base64 (Code)

javascript Copy
// Converte a imagem binária do captcha para uma string base64 limpa
const binaryData = $input.first().binary.data;
const base64String = binaryData.data;

// Remove o prefixo data: se presente
const cleanBase64 = base64String.replace(/^data:image\/\w+;base64,/, '');

// Remove quaisquer caracteres de nova linha
const finalBase64 = cleanBase64.replace(/\n/g, '');

// Passa a configuração de destino do nó Set Target Config
const config = $('Set Target Config').first().json;

return [{
  json: {
    body: finalBase64,
    module: config.module || 'common',
    captchaFieldName: config.captchaFieldName,
    formActionURL: config.formActionURL,
    userAgent: config.userAgent
  }
}];

5. Resolver Captcha de Imagem (CapSolver Recognition)

Parâmetro Valor
Recurso Recognition
Operação Image To Text
Corpo ={{ $json.body }}
Módulo ={{ $json.module }}

Isso retorna o texto reconhecido instantaneamente em $json.data.solution.text.

6. Enviar Formulário com Solução (HTTP Request)

Configuração Valor
Método POST
URL ={{ $('Set Target Config').first().json.formActionURL }}
Tipo de Conteúdo form-urlencoded
Campos de Conteúdo Campos do formulário + resposta do captcha

A resposta do captcha vai para o campo especificado por captchaFieldName:

Campo Valor
username seu-nome-de-usuario
password sua-senha
{{ captchaFieldName }} ={{ $json.data.solution.text }}

7. Verificar Resultado do Envio (IF)

Configuração Valor
Condição {{ $json.statusCode < 400 }} — verifica se a resposta HTTP indica sucesso
Ramo Verdadeiro Marcar Sucesso
Ramo Falso Marcar Falha

Testando

Envie uma solicitação POST para acionar a automação do formulário:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/image-captcha-form \
  -H "Content-Type: application/json" \
  -d '{}'

Resposta esperada (sucesso):

json Copy
{
  "action": "form_submission",
  "status": "success",
  "captchaText": "xK7mQ",
  "message": "Form submitted successfully with solved captcha",
  "submittedAt": "2026-03-16T12:00:00.000Z"
}

Resposta esperada (falha):

json Copy
{
  "action": "form_submission",
  "status": "failed",
  "statusCode": 403,
  "message": "Form submission was rejected by the target site",
  "submittedAt": "2026-03-16T12:00:00.000Z"
}

Importar Este Fluxo de Trabalho

Copie o JSON abaixo e importe-o para o n8n via Menu -> Import from JSON:

Clique para expandir o JSON do fluxo de trabalho
json Copy
{
  "name": "Form Automation — Solve Image Captcha & Submit",
  "nodes": [
    {
      "parameters": {
        "content": "## Automação de Formulários — Resolver Captcha de Imagem e Enviar\n\n**Para quem:** Equipes que automatizam o envio de formulários em sites protegidos por CAPTCHAs baseados em imagem.\n\n**O que faz:** Busca a imagem do captcha de um site de destino, a converte para base64, a resolve com o OCR do CapSolver e envia o formulário com o texto reconhecido.\n\n**Como funciona:**\n1. Agendamento (a cada 6h) ou Webhook aciona o fluxo\n2. A configuração de destino define o URL de destino, nome do campo e módulo\n3. A solicitação HTTP busca a imagem do captcha como binário\n4. O nó Code converte o binário para base64 limpo\n5. O Reconhecimento do CapSolver resolve a imagem instantaneamente\n6. A solicitação HTTP envia o formulário com o texto reconhecido\n7. O nó IF verifica o sucesso do envio\n\n**Configuração:**\n1. Adicione sua chave de API do CapSolver em **Settings → Credentials**\n2. Atualize a Configuração de destino com os detalhes do seu site de destino\n3. Atualize os campos do formulário em Enviar Formulário para corresponder ao destino\n4. Ative o fluxo de trabalho",
        "height": 480,
        "width": 460,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-920, -380],
      "id": "sticky-fa-main-001",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "### Caminho do Agendamento\nExecuta automaticamente a cada 6 horas. Busca o captcha, o resolve e envia o formulário.",
        "height": 480,
        "width": 2800,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-440, -280],
      "id": "sticky-fa-section-002",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "### Caminho do Webhook\nGatilho sob demanda — mesma lógica, retorna os resultados como uma resposta JSON.",
        "height": 480,
        "width": 2800,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-440, 240],
      "id": "sticky-fa-section-003",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "### Obter e Converter\nBaixa a imagem do captcha, converte o binário para base64.",
        "height": 480,
        "width": 700,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [170, -280],
      "id": "sticky-fa-section-004",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "### Resolver e Enviar\nO CapSolver lê a imagem, o formulário é enviado com a resposta.",
        "height": 480,
        "width": 700,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [890, -280],
      "id": "sticky-fa-section-005",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "content": "### Lidar com Resultados\nVerifica o status HTTP, marca sucesso ou falha.",
        "height": 480,
        "width": 700,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [1610, -280],
      "id": "sticky-fa-section-006",
      "name": "Sticky Note5"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [-400, 0],
      "id": "fa-22222222-2222-2222-2222-222222222201",
      "name": "Every 6 Hours"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "fa-cfg-001",
              "name": "captchaImageURL",
              "value": "https://YOUR-TARGET-SITE.com/captcha.png",
              "type": "string"
            },
            {
              "id": "fa-cfg-002",
              "name": "formActionURL",
              "value": "https://YOUR-TARGET-SITE.com/submit",
              "type": "string"
            },
            {
              "id": "fa-cfg-003",
              "name": "captchaFieldName",
              "value": "captcha",
              "type": "string"
            },
            {
              "id": "fa-cfg-004",
              "name": "module",
              "value": "common",
              "type": "string"
            },
            {
              "id": "fa-cfg-005",
              "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": [-96, 0],
      "id": "fa-22222222-2222-2222-2222-222222222202",
      "name": "Set Target Config"
    },
    {
      "parameters": {
        "url": "={{ $json.captchaImageURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "user-agent",
              "value": "={{ $json.userAgent }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [208, 0],
      "id": "fa-22222222-2222-2222-2222-222222222203",
      "name": "Obter Imagem do Captcha"
    },
    {
      "parameters": {
        "jsCode": "// Converte a imagem binária do captcha para uma string base64 limpa\nconst binaryData = $input.first().binary.data;\nconst base64String = binaryData.data;\n\n// Remove o prefixo data: se presente\nconst cleanBase64 = base64String.replace(/^data:image\\/\\w+;base64,/, '');\n\n// Remove quaisquer caracteres de nova linha\nconst finalBase64 = cleanBase64.replace(/\\n/g, '');\n\n// Passa a configuração de destino\nconst config = $('Set Target Config').first().json;\n\nreturn [{\n  json: {\n    body: finalBase64,\n    module: config.module || 'common',\n    captchaFieldName: config.captchaFieldName,\n    formActionURL: config.formActionURL,\n    userAgent: config.userAgent\n  }\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [512, 0],
      "id": "fa-22222222-2222-2222-2222-222222222204",
      "name": "Converter para Base64"
    },
    {
      "parameters": {
        "resource": "recognition",
        "operation": "Image To Text",
        "body": "={{ $json.body }}",
        "module": "={{ $json.module }}"
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [930, 0],
      "id": "fa-22222222-2222-2222-2222-222222222205",
      "name": "Resolver Captcha de Imagem",
      "onError": "continueRegularOutput",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Set Target Config').first().json.formActionURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "user-agent",
              "value": "={{ $('Set Target Config').first().json.userAgent }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "username",
              "value": "YOUR_USERNAME"
            },
            {
              "name": "password",
              "value": "YOUR_PASSWORD"
            },
            {
              "name": "={{ $('Set Target Config').first().json.captchaFieldName }}",
              "value": "={{ $json.data.solution.text }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": true
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [1234, 0],
      "id": "fa-22222222-2222-2222-2222-222222222206",
      "name": "Enviar Formulário com Solução"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "fa-if-001",
              "leftValue": "={{ $json.statusCode }}",
              "rightValue": 400,
              "operator": {
                "type": "number",
                "operation": "lt"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [1538, 0],
      "id": "fa-22222222-2222-2222-2222-222222222207",
      "name": "Verificar Resultado do Envio"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "fa-ms-001",
              "name": "action",
              "value": "form_submission",
              "type": "string"
            },
            {
              "id": "fa-ms-002",
              "name": "status",
              "value": "success",
              "type": "string"
            },
            {
              "id": "fa-ms-003",
              "name": "captchaText",
              "value": "={{ $('Resolver Captcha de Imagem').first().json.data.solution.text }}",
              "type": "string"
            },
            {
              "id": "fa-ms-004",
              "name": "message",
              "value": "Form submitted successfully with solved captcha",
              "type": "string"
            },
            {
              "id": "fa-ms-005",
              "name": "submittedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1842, -80],
      "id": "fa-22222222-2222-2222-2222-222222222208",
      "name": "Marcar Sucesso"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "fa-mf-001",
              "name": "action",
              "value": "form_submission",
              "type": "string"
            },
            {
              "id": "fa-mf-002",
              "name": "status",
              "value": "failed",
              "type": "string"
            },
            {
              "id": "fa-mf-003",
              "name": "statusCode",
              "value": "={{ $json.statusCode }}",
              "type": "number"
            },
            {
              "id": "fa-mf-004",
              "name": "message",
              "value": "Form submission was rejected by the target site",
              "type": "string"
            },
            {
              "id": "fa-mf-005",
              "name": "submittedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1842, 120],
      "id": "fa-22222222-2222-2222-2222-222222222209",
      "name": "Marcar Falha"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "image-captcha-form",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [-400, 520],
      "id": "fa-22222222-2222-2222-2222-222222222210",
      "name": "Gatilho Webhook",
      "webhookId": "fa-aaaa-bbbb-cccc-dddd-222222222210",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "fa-cfg-011",
              "name": "captchaImageURL",
              "value": "https://YOUR-TARGET-SITE.com/captcha.png",
              "type": "string"
            },
            {
              "id": "fa-cfg-012",
              "name": "formActionURL",
              "value": "https://YOUR-TARGET-SITE.com/submit",
              "type": "string"
            },
            {
              "id": "fa-cfg-013",
              "name": "captchaFieldName",
              "value": "captcha",
              "type": "string"
            },
            {
              "id": "fa-cfg-014",
              "name": "module",
              "value": "common",
              "type": "string"
            },
            {
              "id": "fa-cfg-015",
              "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": [-96, 520],
      "id": "fa-22222222-2222-2222-2222-222222222211",
      "name": "Definir Configuração de Destino [Webhook]"
    },
    {
      "parameters": {
        "url": "={{ $json.captchaImageURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "user-agent",
              "value": "={{ $json.userAgent }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": true
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [208, 520],
      "id": "fa-22222222-2222-2222-2222-222222222212",
      "name": "Obter Imagem do Captcha [Webhook]"
    },
    {
      "parameters": {
        "jsCode": "// Converte a imagem binária do captcha para uma string base64 limpa\nconst binaryData = $input.first().binary.data;\nconst base64String = binaryData.data;\n\n// Remove o prefixo data: se presente\nconst cleanBase64 = base64String.replace(/^data:image\\/\\w+;base64,/, '');\n\n// Remove quaisquer caracteres de nova linha\nconst finalBase64 = cleanBase64.replace(/\\n/g, '');\n\n// Passa a configuração de destino\nconst config = $('Definir Configuração de Destino [Webhook]').first().json;\n\nreturn [{\n  json: {\n    body: finalBase64,\n    module: config.module || 'common',\n    captchaFieldName: config.captchaFieldName,\n    formActionURL: config.formActionURL,\n    userAgent: config.userAgent\n  }\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [512, 520],
      "id": "fa-22222222-2222-2222-2222-222222222213",
      "name": "Converter para Base64 [Webhook]"
    },
    {
      "parameters": {
        "resource": "recognition",
        "operation": "Image To Text",
        "body": "={{ $json.body }}",
        "module": "={{ $json.module }}"
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [930, 520],
      "id": "fa-22222222-2222-2222-2222-222222222214",
      "name": "Resolver Captcha de Imagem [Webhook]",
      "onError": "continueRegularOutput",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Definir Configuração de Destino [Webhook]').first().json.formActionURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "user-agent",
              "value": "={{ $('Definir Configuração de Destino [Webhook]').first().json.userAgent }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "username",
              "value": "YOUR_USERNAME"
            },
            {
              "name": "password",
              "value": "YOUR_PASSWORD"
            },
            {
              "name": "={{ $('Definir Configuração de Destino [Webhook]').first().json.captchaFieldName }}",
              "value": "={{ $json.data.solution.text }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": true
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [1234, 520],
      "id": "fa-22222222-2222-2222-2222-222222222215",
      "name": "Enviar Formulário com Solução [Webhook]"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "fa-if-002",
              "leftValue": "={{ $json.statusCode }}",
              "rightValue": 400,
              "operator": {
                "type": "number",
                "operation": "lt"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [1538, 520],
      "id": "fa-22222222-2222-2222-2222-222222222216",
      "name": "Verificar Resultado do Envio [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "fa-ms-011",
              "name": "action",
              "value": "form_submission",
              "type": "string"
            },
            {
              "id": "fa-ms-012",
              "name": "status",
              "value": "success",
              "type": "string"
            },
            {
              "id": "fa-ms-013",
              "name": "captchaText",
              "value": "={{ $('Resolver Captcha de Imagem [Webhook]').first().json.data.solution.text }}",
              "type": "string"
            },
            {
              "id": "fa-ms-014",
              "name": "message",
              "value": "Form submitted successfully with solved captcha",
              "type": "string"
            },
            {
              "id": "fa-ms-015",
              "name": "submittedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1842, 440],
      "id": "fa-22222222-2222-2222-2222-222222222217",
      "name": "Marcar Sucesso [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "fa-mf-011",
              "name": "action",
              "value": "form_submission",
              "type": "string"
            },
            {
              "id": "fa-mf-012",
              "name": "status",
              "value": "failed",
              "type": "string"
            },
            {
              "id": "fa-mf-013",
              "name": "statusCode",
              "value": "={{ $json.statusCode }}",
              "type": "number"
            },
            {
              "id": "fa-mf-014",
              "name": "message",
              "value": "Form submission was rejected by the target site",
              "type": "string"
            },
            {
              "id": "fa-mf-015",
              "name": "submittedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1842, 600],
      "id": "fa-22222222-2222-2222-2222-222222222218",
      "name": "Marcar Falha [Webhook]"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [2146, 520],
      "id": "fa-22222222-2222-2222-2222-222222222219",
      "name": "Responder Webhook"
    }
  ],
  "connections": {
    "Every 6 Hours": {
      "main": [
        [
          {
            "node": "Set Target Config",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Target Config": {
      "main": [
        [
          {
            "node": "Obter Imagem do Captcha",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Obter Imagem do Captcha": {
      "main": [
        [
          {
            "node": "Converter para Base64",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Converter para Base64": {
      "main": [
        [
          {
            "node": "Resolver Captcha de Imagem",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Resolver Captcha de Imagem": {
      "main": [
        [
          {
            "node": "Enviar Formulário com Solução",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enviar Formulário com Solução": {
      "main": [
        [
          {
            "node": "Verificar Resultado do Envio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verificar Resultado do Envio": {
      "main": [
        [
          {
            "node": "Marcar Sucesso",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Marcar Falha",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gatilho Webhook": {
      "main": [
        [
          {
            "node": "Definir Configuração de Destino [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Definir Configuração de Destino [Webhook]": {
      "main": [
        [
          {
            "node": "Obter Imagem do Captcha [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Obter Imagem do Captcha [Webhook]": {
      "main": [
        [
          {
            "node": "Converter para Base64 [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Converter para Base64 [Webhook]": {
      "main": [
        [
          {
            "node": "Resolver Captcha de Imagem [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Resolver Captcha de Imagem [Webhook]": {
      "main": [
        [
          {
            "node": "Enviar Formulário com Solução [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enviar Formulário com Solução [Webhook]": {
      "main": [
        [
          {
            "node": "Verificar Resultado do Envio [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verificar Resultado do Envio [Webhook]": {
      "main": [
        [
          {
            "node": "Marcar Sucesso [Webhook]",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Marcar Falha [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Marcar Sucesso [Webhook]": {
      "main": [
        [
          {
            "node": "Responder Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Marcar Falha [Webhook]": {
      "main": [
        [
          {
            "node": "Responder Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Reconhecimento vs. Token: Por que Imagem para Texto é Diferente

Se você já usou o nó CapSolver n8n para reCAPTCHA, Turnstile ou outros tipos de desafios, você usou o recurso Token. Imagem para Texto usa o recurso Reconhecimento, e a diferença é importante:

Operações de Token (reCAPTCHA, Turnstile, etc.)

  1. O CapSolver cria uma tarefa em seus servidores.
  2. A tarefa é executada assincronamente — o nó sonda o resultado.
  3. A resolução pode levar de alguns segundos a mais de um minuto.
  4. O resultado é um token que você envia para o site de destino para verificação.
  5. Você precisa de websiteURL e websiteKey.

Operações de Reconhecimento (Imagem para Texto)

  1. O CapSolver processa a imagem instantaneamente em uma única solicitação.
  2. Sem sondagem — o resultado é retornado na mesma resposta.
  3. A resolução é quase instantânea (geralmente menos de 1 segundo).
  4. O resultado é o texto reconhecido que você insere no campo de entrada do captcha.
  5. Você precisa da imagem base64, não de um URL ou chave do site.

É por isso que o nó CapSolver n8n tem dois recursos separados:

Recurso Operações
Token reCAPTCHA v2, reCAPTCHA v3, Cloudflare Turnstile, Cloudflare Challenge, GeeTest V3, GeeTest V4, DataDome, AWS WAF, MTCaptcha
Reconhecimento Imagem para Texto

Ao configurar o nó CapSolver para Imagem para Texto, certifique-se de selecionar Resource = Recognition primeiro — isso mudará as operações e parâmetros disponíveis.


O que você provavelmente precisará mudar

Esses fluxos de trabalho são modelos. Em um alvo do mundo real, você deve esperar personalização:

1. Fonte da Imagem do Captcha

O modelo de automação de formulários busca a imagem de um único URL (captchaImageURL). Na prática, a imagem do captcha pode ser:

  • servida de um URL dinâmico que muda a cada solicitação
  • incorporada no HTML da página como uma tag <img> base64
  • vinculada a um cookie de sessão (então você precisará do cookie para buscar a imagem correta)
  • servida com parâmetros de consulta anti-cache

2. Tratamento de Sessão e Cookies

Muitos sistemas de captcha de imagem são vinculados à sessão — a imagem do captcha está ligada a uma sessão do lado do servidor. Se você busca a imagem em uma solicitação e envia a resposta em outra, você precisará:

  • capturar o cookie de sessão da solicitação da imagem
  • passar o mesmo cookie ao enviar o formulário
  • possivelmente extrair um token CSRF da página

3. Nome do Campo do Captcha

Diferentes sites usam diferentes nomes de campos de formulário para a resposta do captcha:

Nomes de Campos Comuns
captcha
captcha_code
verification
captcha_text
answer
security_code

Verifique o HTML do formulário para o nome exato do campo.

4. Módulo de Reconhecimento

A maioria dos captchas de imagem funciona com module: "common". Mas se o captcha contiver apenas números, tente module: "number" — ele é otimizado para reconhecimento numérico e pode dar melhores resultados.

5. Campos de Formulário Adicionais

O modelo inclui campos de espaço reservado username e password. Seu alvo pode exigir:

  • diferentes nomes de campos
  • campos ocultos adicionais
  • tokens CSRF
  • cabeçalhos de referência
  • cookies específicos

Solução de Problemas

"Acesso ImageToTextTask não encontrado"

Este erro significa que sua conta ou plano CapSolver não inclui acesso ao ImageToText. Verifique seu painel CapSolver para verificar se seu plano inclui este serviço.

CapSolver retorna texto incorreto

O reconhecimento de captcha de imagem não é 100% preciso. Se você obtiver resultados incorretos:

  • Tente um module diferente — "common" vs. "number" vs. IDs de módulo específicos
  • Verifique se sua codificação base64 está correta — uma codificação inválida pode produzir uma entrada corrompida
  • Verifique se a imagem não está corrompida ou vazia
  • Alguns captchas fortemente distorcidos têm uma taxa de sucesso menor

"Codificação base64 inválida" ou Resposta vazia

Causas comuns:

  • O prefixo data:image/...;base64, não foi removido
  • Há caracteres de nova linha na string base64
  • O URL da imagem retorna HTML em vez de uma imagem (verifique o Content-Type)
  • O nó HTTP Request retorna uma página de erro, não a imagem

Incompatibilidade de Sessão

Se o envio do formulário sempre falhar mesmo com o texto reconhecido corretamente, a causa mais provável é uma incompatibilidade de sessão entre a busca da imagem e o envio do formulário. Certifique-se de passar o mesmo cookie de sessão entre as duas solicitações.

O envio do formulário retorna 403 ou erro de Captcha

Isso geralmente significa que:

  • A resposta do captcha foi enviada muito tarde (alguns captchas expiram)
  • O cookie de sessão está faltando
  • O nome do campo do captcha está incorreto
  • O token CSRF está faltando
  • Campos ocultos adicionais são necessários

Melhores Práticas

  1. Envie o texto reconhecido imediatamente — os captchas de imagem geralmente expiram em 60-120 segundos.
  2. Mantenha os cookies de sessão entre a busca da imagem e o envio do formulário.
  3. Remova o prefixo data: — sempre limpe seu base64 antes de enviar para o CapSolver.
  4. Use o módulo apropriado — "common" para alfanumérico misto, "number" para apenas numérico.
  5. Valide o base64 no nó Code antes de enviar para o CapSolver para detectar erros de codificação precocemente.
  6. Inspecione a imagem — se o reconhecimento falhar, registre a string base64 e decodifique-a manualmente para verificar se é uma imagem de captcha válida.
  7. Lide com novas tentativas — se o texto reconhecido for rejeitado, você pode querer adicionar um loop de novas tentativas para buscar uma nova imagem de captcha e tentar novamente.
  8. Nenhum proxy é necessário — ao contrário das operações de Token, Imagem para Texto não requer um proxy. Os dados da imagem são enviados diretamente para os servidores do CapSolver.

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

Banner de código de bônus do CapSolver

Conclusão

Você aprendeu como construir uma API de resolução de Imagem para Texto e fluxos de trabalho de automação de formulários usando n8n e CapSolver.

Resumo:

  • Como Imagem para Texto difere das operações de Token — O reconhecimento é instantâneo, sem sondagem, sem necessidade de proxy.
  • Requisitos de codificação Base64 — apenas strings limpas, sem prefixo data:, sem caracteres de nova linha.
  • Um endpoint de API de resolução que aceita uma imagem base64 e retorna o texto reconhecido.
  • Um fluxo de trabalho de automação de formulários que busca a imagem do captcha, a converte, a resolve e envia o formulário.
  • Como converter imagens para base64 no n8n usando nós Code.
  • Melhores práticas para tratamento de sessão, seleção de módulo e gerenciamento de erros.

O resultado final: Imagem para Texto é a operação CapSolver mais simples de integrar — você envia a imagem base64 e recebe o texto de volta instantaneamente. O desafio geralmente reside no fluxo de trabalho circundante: buscar a imagem corretamente, manter o estado da sessão e enviar a resposta para o campo correto do formulário.

Dica: Esses fluxos de trabalho usam gatilhos de Agendamento + Webhook, mas você pode trocar o nó de gatilho por qualquer outro gatilho n8n — manual, eventos de aplicativo, envios de formulário, etc. Uma vez que o captcha é resolvido, use os nós integrados do n8n para salvar os resultados no Google Sheets, bancos de dados, armazenamento em nuvem ou enviar alertas via Telegram/Slack/Email.


Perguntas Frequentes

O que é ImageToTextTask?

ImageToTextTask é o serviço de reconhecimento de captcha baseado em OCR do CapSolver. Você envia uma imagem de captcha codificada em base64, e o CapSolver retorna o texto reconhecido — letras, números ou ambos. Ele usa o recurso Reconhecimento no nó CapSolver n8n, que é diferente do recurso Token usado para reCAPTCHA, Turnstile e outros tipos de desafios.

Quanto custa para resolver um captcha de imagem?

Os preços variam de acordo com o uso. Verifique a página de preços do CapSolver para os preços atuais do ImageToText. As tarefas de reconhecimento de imagem são geralmente uma das operações mais acessíveis do CapSolver.

Quanto tempo leva para resolver um captcha de imagem?

Imagem para Texto é uma operação de Reconhecimento, o que significa que os resultados são retornados instantaneamente — geralmente em menos de 1 segundo. Não há criação de tarefa ou atraso de sondagem como nas operações de Token.

Preciso de um proxy para Imagem para Texto?

Não. Ao contrário das operações de Token (reCAPTCHA, Turnstile, Cloudflare Challenge), Imagem para Texto não requer um proxy. Você está enviando os dados da imagem diretamente para o CapSolver — não há interação do navegador ou acesso ao site envolvido.

Quais formatos de imagem são suportados?

O CapSolver aceita formatos de imagem comuns (PNG, JPEG, GIF, BMP) como dados codificados em base64. A imagem deve conter um captcha visível — sem imagens vazias, corrompidas ou muito grandes.

O que o parâmetro module faz?

O parâmetro module informa ao CapSolver qual mecanismo de reconhecimento usar:

  • "common" — OCR geral para letras, números e caracteres mistos. Este é o padrão e funciona para a maioria dos captchas.
  • "number" — Otimizado para captchas apenas numéricos. Também suporta resolução em lote com até 9 imagens adicionais.
  • "module_001" a "module_032" — Mecanismos especializados para tipos específicos de captcha. Verifique a documentação do CapSolver para detalhes sobre cada módulo.

O CapSolver suporta reconhecimento que diferencia maiúsculas de minúsculas?

Não. O reconhecimento de Imagem para Texto do CapSolver não suporta diferenciação de maiúsculas de minúsculas. Se o site de destino exigir uma resposta de captcha que diferencia maiúsculas de minúsculas, o resultado do reconhecimento pode não corresponder. Esta é uma limitação conhecida.

Posso usar este fluxo de trabalho com o n8n Cloud?

Sim. Este fluxo de trabalho funciona com n8n auto-hospedado e n8n Cloud. O nó CapSolver já está disponível como uma integração oficial — basta adicionar suas credenciais de API.

Como lidar com captchas vinculados à sessão?

Muitos sites vinculam a imagem do captcha a uma sessão do servidor. Para lidar com isso:

  1. Faça uma solicitação inicial para a página do captcha para obter o cookie de sessão.
  2. Use esse cookie ao buscar a imagem do captcha.
  3. Passe o mesmo cookie ao enviar o formulário com o texto reconhecido.

No n8n, você pode extrair cookies dos cabeçalhos de resposta da solicitação HTTP e passá-los para solicitações subsequentes.

E se o CapSolver retornar texto incorreto?

O reconhecimento de captcha de imagem não é 100% preciso — especialmente para imagens fortemente distorcidas ou ruidosas. Se você obtiver resultados incorretos:

  • Tente um módulo diferente ("common", "number" ou um ID de módulo específico).
  • Verifique se sua codificação base64 está correta.
  • Adicione um loop de novas tentativas para buscar uma nova imagem de captcha em caso de falha.
  • Verifique a documentação do CapSolver para recomendações de módulos para tipos específicos de captcha.

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

Para Imagem para Texto, o CapSolver retorna o texto reconhecido, não um token. Se o envio do formulário for rejeitado:

  • Verifique se a resposta do captcha está correta inspecionando o valor de solution.text.
  • Verifique o tratamento da sessão — o captcha pode ter expirado ou o cookie de sessão pode estar faltando.
  • Verifique o nome do campo do formulário — a resposta do captcha pode precisar ir para um campo diferente.
  • Procure campos obrigatórios adicionais — tokens CSRF, entradas ocultas ou carimbos de data/hora.
  • Verifique o tempo — alguns captchas expiram rapidamente, então envie a resposta logo após o reconhecimento.

Ver mais

n8nMar 09, 2026

Como Resolver reCAPTCHA v2/v3 Usando CapSolver e n8n

Bangun API solver eCAPTCHA v2/v3 menggunakan CapSolver dan n8n. Pelajari cara mengotomatisasi penyelesaian token, mengirimkannya ke website, dan mengekstrak data yang dilindungi tanpa coding.

Adélia Cruz
Adélia Cruz
n8nMar 09, 2026

Como resolver o Cloudflare Turnstile usando CapSolver e n8n

Crie uma API para resolver o Cloudflare Turnstile usando CapSolver e n8n. Aprenda como automatizar a obtenção de tokens, enviá-los para sites e extrair dados protegidos sem necessidade de programação.

Índice

Adélia Cruz
Adélia Cruz
n8nMar 17, 2026

Como usar o CapSolver no n8n: O Guia Completo para resolver CAPTCHA em seus fluxos de trabalho

Aprenda como integrar o CapSolver com o n8n para resolver CAPTCHAs e criar fluxos de trabalho de automação confiáveis com facilidade.

Adélia Cruz
Adélia Cruz
n8nMar 12, 2026

Como resolver o GeeTest V4 no n8n com o CapSolver: Guia de integração completo

Aprenda a integrar o CapSolver com o n8n para resolver o GeeTest V4 e criar fluxos de trabalho de automação fiáveis.

Lucas Mitchell
Lucas Mitchell
Blog
n8n