Como resolver enigmas visuais no n8n com o CapSolver

Emma Foster
Machine Learning Engineer
18-Mar-2026

Quebra-cabeças visuais estão em todo lugar: CAPTCHAs de deslizamento que exigem arrastar uma peça para a posição correta, desafios de rotação onde você alinha uma imagem, grids de seleção de objetos e reconhecimento de texto em GIFs animados. Esses não são CAPTCHAs tradicionais baseados em texto e não são desafios baseados em tokens (como reCAPTCHA ou Turnstile) que retornam uma string que você envia com um formulário. Eles são desafios visuais baseados em imagem, onde a entrada é uma imagem e a saída é uma medição — uma distância em pixels, um ângulo em graus, um conjunto de coordenadas ou texto reconhecido.
Essa é a solução do CapSolver's Vision Engine. Ele usa inteligência artificial para analisar a imagem do quebra-cabeça visual e retornar a resposta precisa que sua automação precisa para prosseguir.
Neste guia, você aprenderá como usar o Vision Engine no n8n por meio do nó da comunidade CapSolver. O walkthrough aborda o fluxo de trabalho básico da API do Solver e um Solver de Quebra-cabeça de Deslizamento prático que busca imagens de quebra-cabeça, as converte em base64, resolve o deslizamento e retorna a distância em pixels.
Importante: O Vision Engine é uma operação de Reconhecimento, não uma operação de Token. Isso significa que o resultado retorna instantaneamente em uma única chamada de API — não há polling, nenhum loop de
getTaskResulte nenhum tempo de espera por timeout. Você envia a imagem e recebe a resposta.
Como o Vision Engine se Diferencia de Outras Operações do CapSolver
A maioria das operações do CapSolver no n8n são tarefas de Token. Você envia os parâmetros do site (URL, chave do site, proxy), o CapSolver resolve o desafio em segundo plano e seu fluxo de trabalho faz polling para obter o resultado. A saída é uma string de token que você então envia para o site alvo.
O Vision Engine funciona de forma diferente:
| Aspecto | Operações de Token (reCAPTCHA, Turnstile, etc.) | Vision Engine (Reconhecimento) |
|---|---|---|
| Recurso | Token | Reconhecimento |
| Entrada | URL do site, chave do site, proxy | Imagem(s) em base64, nome do módulo |
| Processamento | Assíncrono — polling para obter o resultado | Instantâneo — chamada única à API |
| Saída | String de token | Pixels, graus, coordenadas ou texto |
| Proxy | Frequentemente necessário | Não necessário |
| Caso de uso | Enviar token para burlar a porta de desafio | Interpretar o quebra-cabeça visual para automatizar a interação |
O Vision Engine é mais próximo do Reconhecimento de Imagem para Texto (OCR) do que da resolução de reCAPTCHA, mas vai além do reconhecimento simples de texto. Enquanto o Reconhecimento de Imagem para Texto lê caracteres de uma imagem estática, o Vision Engine entende relações espaciais — ele pode calcular quantos pixels você precisa arrastar uma peça de deslizamento, qual ângulo você precisa girar uma imagem, quais áreas de uma imagem correspondem a uma pergunta ou qual texto está oculto em um GIF animado.
Módulos Disponíveis
O Vision Engine suporta múltiplos modelos de IA, cada um projetado para um tipo específico de quebra-cabeça visual:
| Módulo | Propósito | Entrada | Retorna |
|---|---|---|---|
slider_1 |
Resolução de quebra-cabeça de deslizamento | image (peça do quebra-cabeça) + imageBackground (fundo com o slot) |
Distância em pixels |
rotate_1 |
Rotação de imagem única | image + imageBackground |
Ângulo em graus |
rotate_2 |
Rotação de múltiplas imagens (interna + externa) | image (imagem interna) |
Ângulo em graus |
shein |
Seleção de objeto/área | image + question (o que selecionar) |
Array rects — caixas delimitadoras [{x1, y1, x2, y2}] |
ocr_gif |
Reconhecimento de texto em GIF animado | image (base64 do GIF) |
String de texto reconhecido |
Quando Usar Cada Módulo
slider_1 — O tipo mais comum de CAPTCHA visual. O usuário vê uma imagem de fundo com uma peça faltando e uma peça separada. O objetivo é determinar quantos pixels a peça precisa ser arrastada para a direita. Ambas as image (a peça do quebra-cabeça) e imageBackground (o fundo completo com o slot) são necessárias.
rotate_1 — Uma imagem única que precisa ser girada para a orientação correta. Ambas as image e imageBackground são necessárias. O motor retorna o ângulo em graus.
rotate_2 — Duas imagens concêntricas (imagem interna e anel externo). A imagem interna precisa ser girada para se alinhar com o externo. Apenas image é necessária. O motor retorna o ângulo.
shein — Usado para desafios que perguntam "selecionar os itens correspondentes" ou "tocar na área correta." Requer image mais um parâmetro question descrevendo o que procurar. Retorna coordenadas de caixas delimitadoras para cada área correspondente.
ocr_gif — GIFs animados onde o texto aparece em frames, tornando-o ilegível para OCR padrão. O motor analisa a animação e extrai o texto.
Pré-requisitos
Antes de começar, certifique-se de ter:
- Uma instância do n8n (auto-hospedada ou em nuvem)
- Uma conta do CapSolver com chave de API e saldo — inscreva-se aqui
- O nó da comunidade CapSolver instalado no n8n (
n8n-nodes-capsolver) - Uma credencial do CapSolver configurada no n8n (Configurações > Credenciais > CapSolver API)
Nenhum proxy é necessário para tarefas do Vision Engine.
Configurações do Nó CapSolver para Vision Engine
No nó CapSolver do n8n, configure estas configurações:
| Configuração | Valor |
|---|---|
| Recurso | Reconhecimento |
| Operação | Vision Engine |
| módulo | Nome do modelo (ex.: slider_1, rotate_1, ocr_gif) |
| image | String codificada em base64 (sem prefixo data:image/...;base64,) |
| imageBackground | Imagem de fundo codificada em base64 (opcional — necessário para slider_1 e rotate_1) |
| question | Pergunta de texto (opcional — necessário apenas para o módulo shein) |
| websiteURL | URL da página de origem (opcional — pode melhorar a precisão) |
O campo tipo é automaticamente definido como VisionEngine quando você seleciona a operação Vision Engine.
Requisitos para Imagem em Base64
Os campos image e imageBackground devem ser strings base64 puras — sem prefixo URI de dados, sem quebras de linha:
- Correto:
/9j/4AAQSkZJRgABA...(base64 puro) - Errado:
data:image/jpeg;base64,/9j/4AAQSkZJRgABA...(tem prefixo)
Se sua imagem de origem for uma URL, você deve buscá-la primeiro e convertê-la em base64. Se ela já tiver o prefixo data:image/...;base64,, remova-o antes de passá-la para o nó CapSolver.
Fluxo de Trabalho 1: Vision Engine — API do Solver
Este fluxo expõe o Vision Engine como um endpoint de API REST simples. Envie uma solicitação POST com o nome do módulo e a imagem em base64 e obtenha a solução de volta como JSON.
Fluxo de Nós
Receber Solicitação do Solver (Webhook POST)
→ Validar Entrada (Código)
→ Resolver Quebra-cabeça Visual (CapSolver — Reconhecimento — Vision Engine)
→ Houve erro no Vision Engine? (IF)
→ sim: Responder ao Webhook com erro
→ não: Responder ao Webhook (Sucesso)
Como Funciona
1. Receber Solicitação do Solver
Um endpoint de webhook aceita solicitações POST com um corpo JSON contendo:
json
{
"module": "slider_1",
"image": "/9j/4AAQSkZJRgABA...",
"imageBackground": "/9j/4AAQSkZJRgABA...",
"question": "",
"websiteURL": ""
}
2. Validar Entrada
O nó de Código verifica se image existe e se module é um dos valores suportados (slider_1, rotate_1, rotate_2, shein, ocr_gif). Se a validação falhar, ele define um campo error.
3. Resolver Quebra-cabeça Visual
O nó CapSolver é configurado com:
- Recurso:
Reconhecimento - Operação:
Vision Engine - módulo: do corpo da solicitação
- image: do corpo da solicitação
- imageBackground: do corpo da solicitação (string vazia se não fornecido)
- question: do corpo da solicitação (string vazia se não fornecido)
Como esta é uma tarefa de Reconhecimento, o resultado retorna instantaneamente.
4. Tratamento de Erros
O nó IF verifica erros. Se o nó CapSolver retornar um erro (módulo incorreto, imagem inválida, etc.), o webhook de erro é acionado. Caso contrário, a resposta de sucesso retorna a solução.
Solicitação e Resposta Esperados
Solicitação de quebra-cabeça de deslizamento:
bash
curl -X POST https://sua-instancia-n8n.com/webhook/vision-engine-solver \
-H "Content-Type: application/json" \
-d '{
"module": "slider_1",
"image": "BASE64_PEÇA_DO_QUEBRA-CABEÇA",
"imageBackground": "BASE64_FUNDO"
}'
Resposta de sucesso:
json
{
"solution": {
"distance": 142,
"module": "slider_1"
}
}
Solicitação de OCR de GIF:
bash
curl -X POST https://sua-instancia-n8n.com/webhook/vision-engine-solver \
-H "Content-Type: application/json" \
-d '{
"module": "ocr_gif",
"image": "BASE64_DADOS_DO_GIF"
}'
Resposta de sucesso:
json
{
"solution": {
"text": "x7Km9",
"module": "ocr_gif"
}
}
Importar Este Fluxo de Trabalho
Clique para expandir o JSON do fluxo de trabalho
json
{
"name": "Vision Engine — Solver API",
"nodes": [
{
"parameters": {
"content": "## Vision Engine — Solver API\n\n**Para quem é:** Desenvolvedores e equipes de automação que precisam resolver quebra-cabeças visuais (deslizamentos, rotações, seleção de objetos, OCR de GIF) por meio de um endpoint REST simples.\n\n**O que ele faz:** Aceita uma imagem codificada em base64 e um nome de módulo, envia para o Vision Engine do CapSolver e retorna a solução instantaneamente.\n\n**Como funciona:**\n1. Webhook recebe POST com `module`, `image` e `imageBackground`/`question` opcionais\n2. Nó de Código valida a entrada (imagem existe, módulo é válido)\n3. Nó do CapSolver de Reconhecimento resolve o quebra-cabeça visual\n4. Retorna solução ou erro como JSON\n\n**Configuração:**\n1. Adicione sua chave de API do CapSolver em **Configurações → Credenciais**\n2. Ative o fluxo de trabalho\n3. Envie POST para `/webhook/vision-engine-solver` com seus dados de imagem",
"height": 560,
"width": 460,
"color": 1
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-920, -380],
"id": "sticky-ve-main-001",
"name": "Nota Fixa"
},
{
"parameters": {
"content": "### Validação de Entrada\nVerifica se `image` está presente e `module` é um dos seguintes: slider_1, rotate_1, rotate_2, shein, ocr_gif",
"height": 480,
"width": 440,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-100, -280],
"id": "sticky-ve-section-002",
"name": "Nota Fixa1"
},
{
"parameters": {
"content": "### Vision Engine do CapSolver\nRecurso de Reconhecimento — resultado instantâneo, sem polling. Retorna distância, ângulo, coordenadas ou texto dependendo do módulo.",
"height": 480,
"width": 440,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [380, -280],
"id": "sticky-ve-section-003",
"name": "Nota Fixa2"
},
{
"parameters": {
"content": "### Tratamento de Erros\nVerifica erros do CapSolver (imagem inválida, módulo não suportado, etc.) e retorna resposta de erro estruturada.",
"height": 480,
"width": 440,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [860, -280],
"id": "sticky-ve-section-004",
"name": "Nota Fixa3"
},
{
"parameters": {
"content": "### Gatilho de Webhook\nPOST /webhook/vision-engine-solver com corpo JSON contendo módulo, imagem e opções imageBackground / question.",
"height": 480,
"width": 440,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-580, -280],
"id": "sticky-ve-section-005",
"name": "Nota Fixa4"
},
{
"parameters": {
"content": "### Resposta de Sucesso\nRetorna o objeto de solução completo do CapSolver — conteúdo varia conforme o tipo de módulo.",
"height": 480,
"width": 440,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [1340, -280],
"id": "sticky-ve-section-006",
"name": "Nota Fixa5"
},
{
"parameters": {
"content": "### Resposta de Erro\nRetorna a mensagem de erro do CapSolver ou da validação de entrada.",
"height": 480,
"width": 440,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [1340, 240],
"id": "sticky-ve-section-007",
"name": "Nota Fixa6"
},
{
"parameters": {
"httpMethod": "POST",
"path": "vision-engine-solver",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [-540, 0],
"id": "ve-api-11111111-1111-1111-1111-111111111101",
"name": "Receber Solicitação do Solver",
"webhookId": "ve-api-11111111-aaaa-bbbb-cccc-111111111101"
},
{
"parameters": {
"jsCode": "const body = $input.first().json.body || {};\nconst validModules = ['slider_1', 'rotate_1', 'rotate_2', 'shein', 'ocr_gif'];\n\nconst module = (body.module || '').trim();\nconst image = (body.image || '').trim();\nconst imageBackground = (body.imageBackground || '').trim();\nconst question = (body.question || '').trim();\nconst websiteURL = (body.websiteURL || '').trim();\n\n// Validação de campos obrigatórios\nif (!image) {\n return [{ json: { error: 'Campo obrigatório ausente: image (codificada em base64)' } }];\n}\n\nif (!module) {\n return [{ json: { error: 'Campo obrigatório ausente: module' } }];\n}\n\nif (!validModules.includes(module)) {\n return [{ json: { error: `Módulo inválido: ${module}. Deve ser um dos seguintes: ${validModules.join(', ')}` } }];\n}\n\n// Validação específica do módulo\nif ((module === 'slider_1' || module === 'rotate_2') && !imageBackground) {\n return [{ json: { error: `O módulo ${module} requer imageBackground` } }];\n}\n\nif (module === 'shein' && !question) {\n return [{ json: { error: 'O módulo shein requer um parâmetro question' } }];\n}\n\nreturn [{ json: {\n module,\n image,\n imageBackground,\n question,\n websiteURL,\n validated: true\n} }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [-60, 0],
"id": "ve-api-11111111-1111-1111-1111-111111111102",
"name": "Validar Entrada"
},
{
"parameters": {
"resource": "Reconhecimento",
"operation": "Vision Engine",
"module": "={{ $json.module }}",
"image": "={{ $json.image }}",
"imageBackground": "={{ $json.imageBackground || '' }}",
"question": "={{ $json.question || '' }}",
"websiteURL": "={{ $json.websiteURL || '' }}"
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [420, 0],
"id": "ve-api-11111111-1111-1111-1111-111111111103",
"name": "Resolver Quebra-cabeça Visual",
"onError": "continueRegularOutput",
"credentials": {
"capSolverApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "Conta CapSolver"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "ve-err-001",
"leftValue": "={{ $json.error }}",
"operator": {
"type": "string",
"operation": "isNotEmpty",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [900, 0],
"id": "ve-api-11111111-1111-1111-1111-111111111104",
"name": "Erro no Motor de Visão?"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json.data) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [1380, -80],
"id": "ve-api-11111111-1111-1111-1111-111111111105",
"name": "Responda ao Webhook"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
"options": {
"responseCode": 400
}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [1380, 120],
"id": "ve-api-11111111-1111-1111-1111-111111111106",
"name": "Responda ao Webhook de Erro"
}
],
"connections": {
"Receive Solver Request": {
"main": [
[
{
"node": "Validate Input",
"type": "main",
"index": 0
}
]
]
},
"Validate Input": {
"main": [
[
{
"node": "Solve Visual Puzzle",
"type": "main",
"index": 0
}
]
]
},
"Solve Visual Puzzle": {
"main": [
[
{
"node": "Vision Engine Error?",
"type": "main",
"index": 0
}
]
]
},
"Vision Engine 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: Solver de Puzzles de Deslizamento — Buscar e Resolver
Este fluxo demonstra um solver de puzzle de deslizamento prático e completo. Ele busca as imagens da peça do puzzle e do fundo a partir de URLs, as converte para base64, envia-as ao Vision Engine com o módulo slider_1 e retorna a distância em pixels necessária para completar o deslizamento.
Este é o padrão que você usaria ao integrar a resolução de CAPTCHA de deslizamento em uma automação maior — a distância retornada diz exatamente para onde o manipulador do deslizamento deve ser arrastado pela sua automação de navegador (Puppeteer, Playwright, Selenium).
Fluxo de Nós
Gatilho de Agenda (a cada 1 hora) ─┐
├→ Configuração do Puzzle → Buscar Imagem do Puzzle → Buscar Imagem de Fundo
Gatilho de Webhook (POST) ──────────┘ → Converter Imagens para Base64 → Resolver Puzzle de Deslizamento
→ Erro no Slider? → Formatar Solução → Retornar Resultado
→ Formatar Erro → Retornar Erro
Como Funciona
1. Gatilhos Duplos
- Gatilho de Agenda: executa a cada hora para testes automatizados ou resolução de puzzles recorrentes
- Gatilho de Webhook: ativação sob demanda de outro fluxo ou serviço externo
2. Configuração do Puzzle
Define as URLs para as imagens da peça do puzzle e do fundo, mais qualquer websiteURL opcional para maior precisão. Em uma integração real, essas URLs viriam da resposta do desafio CAPTCHA do site alvo.
3. Buscar Imagem do Puzzle + Buscar Imagem de Fundo
Dois nós de Requisição HTTP baixam as imagens da peça do puzzle e do fundo como dados binários.
4. Converter Imagens para Base64
Um nó de Código converte ambas as imagens binárias em strings base64, removendo qualquer prefixo data:image/...;base64,.
5. Resolver Puzzle de Deslizamento
O nó CapSolver com:
- Recurso:
Reconhecimento - Operação:
Motor de Visão - módulo:
slider_1 - imagem: base64 da peça do puzzle
- imagem de fundo: base64 do fundo
Retorna a distância em pixels instantaneamente.
6. Verificar Resultado e Responder
O nó IF verifica erros. Em caso de sucesso, a solução é formatada e retornada. Em caso de erro, a mensagem de erro é retornada.
Resposta Esperada
Sucesso:
json
{
"success": true,
"module": "slider_1",
"distance": 142,
"unit": "pixels",
"solvedAt": "2026-03-16T10:00:00.000Z"
}
Erro:
json
{
"success": false,
"error": "ERRO_IMAGEM_INVÁLIDA",
"solvedAt": "2026-03-16T10:00:00.000Z"
}
Importar Este Fluxo
Clique para expandir o JSON do fluxo
json
{
"name": "Solver de Puzzle de Deslizamento — Buscar e Resolver — Motor de Visão",
"nodes": [
{
"parameters": {
"content": "## Solver de Puzzle de Deslizamento — Buscar e Resolver\n\n**Para quem é:** Equipes de automação que resolvem CAPTCHAS de deslizamento como parte de pipelines de automação de navegador ou raspagem.\n\n**O que ele faz:** Busca a imagem do puzzle e o fundo a partir de URLs, as converte para base64, envia-as ao Motor de Visão do CapSolver (módulo slider_1) e retorna a distância exata em pixels para arrastar o manípulo do deslizamento.\n\n**Como funciona:**\n1. Gatilho de Agenda (a cada 1h) ou Webhook — ambos alimentam o mesmo pipeline de resolução de puzzles\n2. Nó de Configuração define as URLs das imagens do puzzle\n3. Dois nós de Requisição HTTP buscam as imagens\n4. Nó de Código converte as imagens para base64\n5. Motor de Visão do CapSolver resolve o puzzle de deslizamento\n6. Retorna a distância em pixels para automação\n\n**Configuração:**\n1. Adicione sua chave de API do CapSolver sob **Configurações → Credenciais**\n2. Substitua as URLs de imagem de exemplo no Set Puzzle Config\n3. Ative e teste",
"height": 560,
"width": 460,
"color": 1
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-1200, -380],
"id": "sticky-slider-main-001",
"name": "Nota Colante"
},
{
"parameters": {
"content": "### Gatilhos\nAgenda (a cada hora) ou Webhook — ambos alimentam o mesmo pipeline de resolução de puzzles.",
"height": 480,
"width": 440,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-860, -280],
"id": "sticky-slider-section-002",
"name": "Nota Colante1"
},
{
"parameters": {
"content": "### Configuração do Puzzle\nDefina as URLs para as imagens da peça do puzzle e do fundo. Na produção, extraia essas URLs da resposta do desafio do site alvo.",
"height": 480,
"width": 440,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-380, -280],
"id": "sticky-slider-section-003",
"name": "Nota Colante2"
},
{
"parameters": {
"content": "### Busca de Imagens\nBaixe ambas as imagens como binário. A peça do puzzle vai para image, e o fundo (com o slot) vai para imageBackground.",
"height": 480,
"width": 920,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [100, -280],
"id": "sticky-slider-section-004",
"name": "Nota Colante3"
},
{
"parameters": {
"content": "### Conversão para Base64\nConverte dados binários de imagem para strings base64 brutos (sem prefixo URI de dados). Ambas as imagens devem ser base64 bruto para a API do CapSolver.",
"height": 480,
"width": 440,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [1060, -280],
"id": "sticky-slider-section-005",
"name": "Nota Colante4"
},
{
"parameters": {
"content": "### Resolução do Motor de Visão + Tratamento de Resultado\nO CapSolver retorna a distância do deslizamento instantaneamente. O resultado é formatado e retornado via webhook ou armazenado para uso posterior.",
"height": 480,
"width": 1400,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [1540, -280],
"id": "sticky-slider-section-006",
"name": "Nota Colante5"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 1
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [-820, -60],
"id": "ve-slider-22222222-2222-2222-2222-222222222201",
"name": "A Cada 1 Hora"
},
{
"parameters": {
"httpMethod": "POST",
"path": "slider-puzzle-solver",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [-820, 140],
"id": "ve-slider-22222222-2222-2222-2222-222222222202",
"name": "Gatilho de Webhook",
"webhookId": "ve-slider-22222222-aaaa-bbbb-cccc-222222222202",
"onError": "continueRegularOutput"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "cfg-001",
"name": "puzzleImageURL",
"value": "={{ $json.body?.puzzleImageURL || 'https://exemplo.com/captcha/puzzle-piece.png' }}",
"type": "string"
},
{
"id": "cfg-002",
"name": "backgroundImageURL",
"value": "={{ $json.body?.backgroundImageURL || 'https://exemplo.com/captcha/background.png' }}",
"type": "string"
},
{
"id": "cfg-003",
"name": "websiteURL",
"value": "={{ $json.body?.websiteURL || '' }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [-340, 0],
"id": "ve-slider-22222222-2222-2222-2222-222222222203",
"name": "Configuração do Puzzle"
},
{
"parameters": {
"url": "={{ $json.puzzleImageURL }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [140, -60],
"id": "ve-slider-22222222-2222-2222-2222-222222222204",
"name": "Buscar Imagem do Puzzle"
},
{
"parameters": {
"url": "={{ $('Configuração do Puzzle').first().json.backgroundImageURL }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [540, -60],
"id": "ve-slider-22222222-2222-2222-2222-222222222205",
"name": "Buscar Imagem de Fundo"
},
{
"parameters": {
"jsCode": "// Obter dados binários das duas buscas de imagem\nconst puzzleBinary = $input.first().binary;\nconst config = $('Configuração do Puzzle').first().json;\n\nif (!puzzleBinary || !puzzleBinary.data) {\n return [{ json: { error: 'Falha ao buscar imagem do puzzle — nenhum dado binário retornado' } }];\n}\n\n// Converter peça do puzzle para base64\nconst puzzleBuffer = await this.helpers.getBinaryDataBuffer(0, 'data');\nconst puzzleBase64 = puzzleBuffer.toString('base64');\n\n// Obter dados binários da imagem de fundo do nó atual\n// A imagem de fundo foi buscada no nó anterior\nlet backgroundBase64 = '';\ntry {\n const bgBinary = $input.first().binary;\n if (bgBinary && bgBinary.data) {\n const bgBuffer = await this.helpers.getBinaryDataBuffer(0, 'data');\n backgroundBase64 = bgBuffer.toString('base64');\n }\n} catch (e) {\n // Fundo pode não estar disponível se a busca falhar\n}\n\nreturn [{ json: {\n image: puzzleBase64,\n imageBackground: backgroundBase64,\n websiteURL: config.websiteURL || '',\n module: 'slider_1'\n} }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [1100, 0],
"id": "ve-slider-22222222-2222-2222-2222-222222222206",
"name": "Converter Imagens para Base64"
},
{
"parameters": {
"resource": "Reconhecimento",
"operation": "Motor de Visão",
"module": "={{ $json.module }}",
"image": "={{ $json.image }}",
"imageBackground": "={{ $json.imageBackground }}",
"websiteURL": "={{ $json.websiteURL || '' }}"
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [1580, 0],
"id": "ve-slider-22222222-2222-2222-2222-222222222207",
"name": "Resolver Puzzle de Deslizamento",
"onError": "continueRegularOutput",
"credentials": {
"capSolverApi": {
"id": "SUAS_CREDENCIAIS",
"name": "Conta CapSolver"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "slider-err-001",
"leftValue": "={{ $json.error }}",
"operator": {
"type": "string",
"operation": "isNotEmpty",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [1900, 0],
"id": "ve-slider-22222222-2222-2222-2222-222222222208",
"name": "Erro no Slider?"
},
{
"parameters": {
"jsCode": "const solution = $input.first().json.data?.solution || $input.first().json.data || {};\nconst distance = solution.distance || solution.slide_distance || null;\n\nreturn [{ json: {\n success: true,\n module: 'slider_1',\n distance: distance,\n unit: 'pixels',\n rawSolution: solution,\n solvedAt: new Date().toISOString()\n} }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [2200, -80],
"id": "ve-slider-22222222-2222-2222-2222-222222222209",
"name": "Formatar Solução"
},
{
"parameters": {
"jsCode": "return [{ json: {\n success: false,\n error: $input.first().json.error || 'Erro desconhecido no Motor de Visão',\n solvedAt: new Date().toISOString()\n} }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [2200, 120],
"id": "ve-slider-22222222-2222-2222-2222-222222222210",
"name": "Erro de Formato"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [2500, -80],
"id": "ve-slider-22222222-2222-2222-2222-222222222211",
"name": "Retornar Resultado"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {
"responseCode": 400
}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [2500, 120],
"id": "ve-slider-22222222-2222-2222-2222-222222222212",
"name": "Retornar Erro"
}
],
"connections": {
"Every 1 Hour": {
"main": [
[
{
"node": "Set Puzzle Config",
"type": "main",
"index": 0
}
]
]
},
"Webhook Trigger": {
"main": [
[
{
"node": "Set Puzzle Config",
"type": "main",
"index": 0
}
]
]
},
"Set Puzzle Config": {
"main": [
[
{
"node": "Fetch Puzzle Image",
"type": "main",
"index": 0
}
]
]
},
"Fetch Puzzle Image": {
"main": [
[
{
"node": "Fetch Background Image",
"type": "main",
"index": 0
}
]
]
},
"Fetch Background Image": {
"main": [
[
{
"node": "Convert Images to Base64",
"type": "main",
"index": 0
}
]
]
},
"Convert Images to Base64": {
"main": [
[
{
"node": "Solve Slider Puzzle",
"type": "main",
"index": 0
}
]
]
},
"Solve Slider Puzzle": {
"main": [
[
{
"node": "Slider Error?",
"type": "main",
"index": 0
}
]
]
},
"Slider Error?": {
"main": [
[
{
"node": "Format Error",
"type": "main",
"index": 0
}
],
[
{
"node": "Format Solution",
"type": "main",
"index": 0
}
]
]
},
"Format Solution": {
"main": [
[
{
"node": "Return Result",
"type": "main",
"index": 0
}
]
]
},
"Format Error": {
"main": [
[
{
"node": "Return Error",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
}
}
``
</details>
---
## Teste-o
### Testando a API do Solver
Após configurar as credenciais do CapSolver e ativar o fluxo de trabalho, teste a API do Solver:
**Puzzle de deslizamento:**
```bash
curl -X POST https://seu-instância-n8n.com/webhook/vision-engine-solver \
-H "Content-Type: application/json" \
-d '{
"module": "slider_1",
"image": "BASE64_PUZZLE_PIECE_HERE",
"imageBackground": "BASE64_BACKGROUND_HERE"
}'
Puzzle de rotação:
bash
curl -X POST https://seu-instância-n8n.com/webhook/vision-engine-solver \
-H "Content-Type: application/json" \
-d '{
"module": "rotate_1",
"image": "BASE64_IMAGEM_PARA_ROTACIONAR"
}'
Seleção de objeto (shein):
bash
curl -X POST https://seu-instância-n8n.com/webhook/vision-engine-solver \
-H "Content-Type: application/json" \
-d '{
"module": "shein",
"image": "BASE64_IMAGEM",
"question": "Selecione todos os sapatos"
}'
OCR de GIF:
bash
curl -X POST https://seu-instância-n8n.com/webhook/vision-engine-solver \
-H "Content-Type: application/json" \
-d '{
"module": "ocr_gif",
"image": "BASE64_DADOS_GIF"
}'
Testando o Solver de Puzzle de Deslizamento
bash
curl -X POST https://seu-instância-n8n.com/webhook/slider-puzzle-solver \
-H "Content-Type: application/json" \
-d '{
"puzzleImageURL": "https://exemplo.com/captcha/puzzle-piece.png",
"backgroundImageURL": "https://exemplo.com/captcha/background.png",
"websiteURL": "https://exemplo.com"
}'
Uma resposta com o valor numérico distance confirma que todo o pipeline funcionou — as imagens foram baixadas, convertidas para base64, o Vision Engine resolveu o deslizamento e a distância em pixels foi retornada.
Entendendo a Resposta
O Vision Engine retorna diferentes formatos de solução dependendo do módulo:
slider_1
json
{
"solution": {
"distance": 142
}
}
A distance está em pixels — é a distância que o controle deslizante deve ser arrastado para a direita para completar o puzzle.
rotate_1 / rotate_2
json
{
"solution": {
"angle": 73
}
}
O angle está em graus — é quantos graus a imagem deve ser girada (no sentido horário) para atingir a orientação correta.
shein
json
{
"solution": {
"rects": [
{ "x1": 45, "y1": 120, "x2": 180, "y2": 250 },
{ "x1": 300, "y1": 90, "x2": 420, "y2": 210 }
]
}
}
Cada rect no array é um retângulo de limites (canto superior esquerdo e inferior direito) para uma área correspondente na imagem.
ocr_gif
json
{
"solution": {
"text": "x7Km9"
}
}
O text é a string reconhecida do GIF animado.
Adaptando para Outros Tipos de Módulo
O fluxo de trabalho da API do Solver já suporta todos os cinco módulos via corpo da solicitação. Para criar um fluxo de trabalho dedicado para um módulo diferente — digamos, rotate_1 para puzzles de rotação — as mudanças são mínimas:
- Nó de configuração: Substitua
puzzleImageURL/backgroundImageURLpor apenas a URL da imagem de rotação - Nós de busca: Apenas uma solicitação HTTP necessária (nenhuma imagem de fundo para
rotate_1) - Nó do CapSolver: Altere
modulepararotate_1 - Formatar solução: Extraia
angleem vez dedistance
Para shein, você também adicionaria o parâmetro question ao config e o passaria para o nó do CapSolver.
Solução de Problemas
"ERROR_INVALID_IMAGE"
A string base64 está malformada ou vazia. Verifique que:
- A imagem foi baixada com sucesso (HTTP 200)
- A conversão de binário para base64 produziu uma string não vazia
- O prefixo
data:image/...;base64,foi removido - A string base64 não tem quebras de linha ou espaços
"ERROR_INVALID_MODULE"
O valor module não corresponde a nenhum modelo suportado. Use exatamente um dos seguintes: slider_1, rotate_1, rotate_2, shein, ocr_gif.
A Distância Retorna 0 ou Nulo
As imagens podem não ser um par válido de puzzle de deslizamento. Verifique que:
imageé a peça do puzzle (o fragmento pequeno e arrastável)imageBackgroundé o fundo completo com a fenda visível- Ambas as imagens são da mesma instância de desafio
- As imagens não estão corrompidas ou muito pequenas
O Nó CapSolver Mostra Nenhuma Opção "Vision Engine"
Certifique-se de que você tem a versão 1.x ou superior do n8n-nodes-capsolver instalado. A operação Vision Engine foi adicionada em versões recentes. Atualize o nó da comunidade se necessário:
- Vá para Configurações > Nós da Comunidade
- Encontre
n8n-nodes-capsolver - Atualize para a versão mais recente
- Reinicie o n8n
Webhook Retorna 404
O fluxo de trabalho deve estar ativo para o webhook estar ativo. Importe o fluxo de trabalho, configure as credenciais, depois ative o fluxo de trabalho no n8n.
Boas Práticas
-
Use strings base64 brutos — sempre remova o prefixo
data:image/...;base64,antes de passar as imagens para o nó do CapSolver. -
Corresponda as imagens aos módulos —
slider_1precisa deimageeimageBackground.rotate_1precisa apenas daimage.sheinprecisa deimagemaisquestion. Usar a combinação errada falhará ou retornará resultados incorretos. -
Baixe as imagens frescas — as imagens de puzzles visuais geralmente são de uso único e expiram rapidamente. Baixe-as o mais perto possível do momento de resolução.
-
O Vision Engine é instantâneo — diferente das operações de Token que polam por resultados, as operações de Reconhecimento retornam imediatamente. Seu fluxo de trabalho não precisa de lógica de repetição ou atrasos.
-
Nenhum proxy é necessário — o Vision Engine analisa as imagens no servidor. Não há interação com o site de destino, então nenhum proxy é necessário.
-
Valide antes de resolver — verifique se os dados da imagem estão presentes e o nome do módulo é válido antes de chamar o nó do CapSolver. Isso evita desperdiçar créditos da API em solicitações que falharão.
-
Use
websiteURLquando disponível — embora opcional, fornecer a URL da página de origem pode melhorar a precisão para alguns tipos de puzzle. -
Trate respostas específicas do módulo — diferentes módulos retornam campos diferentes (
distance,angle,rects,text). A lógica posterior deve verificar qual módulo foi usado e extrair o campo correto.
Pronto para começar? Registre-se no CapSolver e use o código promocional n8n para obter um bônus de 8% adicional na primeira recarga!

Conclusão
O Vision Engine preenche uma lacuna diferente em comparação com as operações de Token do CapSolver. Enquanto a resolução de reCAPTCHA, Turnstile e Cloudflare Challenge retorna tokens que você submete para contornar uma barreira, o Vision Engine retorna medições que sua automação usa para interagir com puzzles visuais — arrastar deslizadores, girar imagens, selecionar objetos ou ler texto animado.
As diferenças principais a lembrar são:
- Recurso de Reconhecimento, não Token — resultados instantâneos, sem polling
- Imagens base64 em, medições fora — pixels, graus, coordenadas ou texto
- Nenhum proxy necessário — o AI analisa as imagens no servidor
- Cinco módulos — cada um projetado para um tipo específico de puzzle visual
Os dois fluxos de trabalho neste artigo cobrem os dois padrões de integração mais comuns:
- API do Solver — um ponto final de webhook genérico que aceita qualquer módulo e retorna a solução
- Solver de Puzzle de Deslizamento — um pipeline completo de buscar, converter e resolver CAPTCHAs de deslizamento
Ambos importam como inativos. Configure suas credenciais do CapSolver, substitua os valores de substituição, ative o fluxo de trabalho e teste.
Perguntas Frequentes
Como o Vision Engine é diferente do Image To Text (OCR)?
Image To Text reconhece caracteres em uma imagem estática — OCR padrão. O Vision Engine vai além: ele entende relações espaciais em puzzles visuais. Ele pode calcular distâncias de deslizadores, ângulos de rotação, caixas delimitadoras de objetos e até ler texto de GIFs animados. Ambos são operações de Reconhecimento (resultado instantâneo, sem polling), mas resolvem problemas diferentes.
Eu preciso de um proxy para o Vision Engine?
Não. O Vision Engine analisa as imagens que você fornece no servidor. Não há sessão de navegador, nenhum cookie e nenhuma interação com um site de destino. Proxies não são necessários e o nó do CapSolver não aceita um parâmetro de proxy para tarefas do Vision Engine.
Posso resolver múltiplos puzzles em uma execução do fluxo de trabalho?
Sim. O nó do CapSolver processa um item por vez, mas a execução baseada em itens do n8n significa que você pode passar múltiplos itens pelo nó. Cada item recebe sua própria chamada de Reconhecimento e retorna sua própria solução. Use um nó Split In Batches ou alimente múltiplos itens de um nó Code.
Quais formatos de imagem são suportados?
Os campos image e imageBackground aceitam strings base64 codificadas em JPEG, PNG, GIF e WebP. A string base64 deve ser bruta — sem prefixo data:image/...;base64, e sem quebras de linha.
Como obter as imagens do puzzle de um site real?
Em uma integração real de CAPTCHA de deslizamento, o site de destino serve as imagens do puzzle como parte da resposta do desafio. Normalmente, você:
- Carrega a página (via HTTP Request ou automação de navegador)
- Extrai as URLs das imagens do widget CAPTCHA do DOM ou das requisições de rede
- Baixa as imagens
- Converte para base64
- Envia para o Vision Engine
O fluxo de trabalho do Solver de Puzzle de Deslizamento demonstra os passos 3-5. Os passos 1-2 dependem do site específico.
O que o parâmetro question faz?
O parâmetro question é usado apenas pelo módulo shein. Ele diz ao AI o que procurar na imagem — por exemplo, "Selecione todos os sapatos" ou "Toque nos itens correspondentes." Para todos os outros módulos, deixe-o vazio.
Posso usar o Vision Engine para desafios de imagem do hCaptcha?
Os módulos do Vision Engine (slider_1, rotate_1, rotate_2, shein, ocr_gif) são projetados para tipos específicos de puzzles visuais. Desafios de classificação de imagem do hCaptcha usam uma abordagem diferente. Consulte a documentação do CapSolver para soluções específicas do hCaptcha.
Quão rápido é o Vision Engine?
O Vision Engine é uma operação de Reconhecimento, o que significa que o resultado volta em uma única chamada de API — normalmente em menos de 2 segundos. Não há loop de polling, nenhuma chamada getTaskResult e nenhum tempo de espera por timeout. Isso o torna significativamente mais rápido que as operações de Token, que podem levar de 10 a 30 segundos para ser concluídas.
O que acontece se a imagem for muito pequena ou muito grande?
Imagens muito pequenas podem não conter detalhes suficientes para análise precisa. Imagens muito grandes aumentarão o tamanho do payload base64 e podem tornar a solicitação mais lenta. Para melhores resultados, use a resolução original fornecida pelo desafio CAPTCHA — não redimensione as imagens.
Posso encadear o Vision Engine com automação de navegador?
Sim, e é o caso de uso intencionado para a maioria das aplicações reais. O fluxo típico é:
- Automação de navegador (Puppeteer/Playwright via n8n) carrega a página
- O desafio CAPTCHA aparece com as imagens do puzzle
- Seu fluxo de trabalho extrai as URLs das imagens e as baixa
- O Vision Engine retorna a solução (distância, ângulo, etc.)
- A automação de navegador usa a solução para completar o desafio (arrastar o deslizador, girar a imagem, clicar nas coordenadas)
O fluxo de trabalho do Vision Engine lida com os passos 3-4. Os passos 1-2 e 5 são tratados pelos seus nós de automação de navegador.
Declaração de Conformidade: As informações fornecidas neste blog são apenas para fins informativos. A CapSolver está comprometida em cumprir todas as leis e regulamentos aplicáveis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas é estritamente proibido e será investigado. Nossas soluções de resolução de captcha melhoram a experiência do usuário enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados públicos. Incentivamos o uso responsável de nossos serviços. Para mais informações, visite nossos Termos de Serviço e Política de Privacidade.
Mais

Como resolver o fingerprinting TLS no n8n com o CapSolver
Resolva o fingerprinting TLS no n8n com o CapSolver. Faça as solicitações parecerem navegadores reais e evite bloqueios de detecção de bots.

Adélia Cruz
18-Mar-2026

Como resolver enigmas visuais no n8n com o CapSolver
Resolva CAPTCHAs visuais com o CapSolver Vision Engine no n8n. Trate deslizadores, rotação, seleção de objetos e GIF OCR instantaneamente.

Emma Foster
18-Mar-2026

