Tutorials

n8n + CaptchaAI: рабочий процесс решения CAPTCHA без кода

Чтобы решить CAPTCHA внутри n8n без единой строки серверного кода, нужны четыре узла: HTTP Request для отправки задачи, Wait для паузы, цикл на узле IF для опроса результата и ещё один HTTP Request — для использования токена. У n8n, в отличие от Zapier, циклы встроены изначально — для схемы «отправил — подождал — проверил» это решающее преимущество.


n8n или Zapier: что выбрать для решения CAPTCHA

Ключевое отличие — поддержка циклов «из коробки»: в n8n она встроена, а в Zapier опрос результата CAPTCHA приходится эмулировать через Paths.

Критерий n8n Zapier
Поддержка циклов / повторов Встроенная (IF-циклы, узел Loop) Ограниченная (только Paths)
Self-hosted вариант Есть, бесплатно Нет, только облако
Узлы с кодом Полноценный JavaScript Ограниченный
Стоимость Бесплатно при self-hosted или платное облако Платно, за каждую задачу
Порог входа Средний Низкий

Для рабочих процессов с CAPTCHA n8n обычно практичнее: циклы и узлы Code закрывают логику «отправить — подождать — проверить» без сторонних сервисов.


Как устроен рабочий процесс: от отправки до токена

Полная цепочка выглядит так:

Manual Trigger / Cron
    ↓
HTTP Request: Submit CAPTCHA
    ↓
Wait: 10 seconds
    ↓
Loop: Poll until solved
    ├── HTTP Request: Get result
    ├── IF: status == 1? → Exit loop
    └── Wait: 5 seconds → Loop again
    ↓
HTTP Request: Use token

Шаг 1: отправьте CAPTCHA на решение

Добавьте узел HTTP Request:

  • Метод: POST
  • URL-адрес: https://ocr.captchaai.com/in.php
  • Тип содержимого тела: Form URL Encoded

Параметры тела запроса:

Имя Значение
key {{ $credentials.captchaaiApiKey }} или жёстко закодируйте свой ключ
method userrecaptcha
googlekey 6Le-SITEKEY
pageurl https://example.com
json 1

Ответ:

{
  "status": 1,
  "request": "71823456"
}

Шаг 2: подождите перед первым опросом

Добавьте узел Wait:

  • Время ожидания: 10
  • Единица: Seconds

Пауза даёт решателю время начать обработку до первого запроса — без неё большинство ранних опросов вернут CAPCHA_NOT_READY.


Шаг 3: опрашивайте результат в цикле

n8n поддерживает циклы через узел Loop Over Items или подключением ложного выхода узла IF обратно к предыдущему узлу.

Вариант А: цикл на узле IF

Добавьте узел HTTP Request (опрос):

  • Метод: GET
  • URL-адрес: https://ocr.captchaai.com/res.php
  • Параметры запроса: key, action=get, id={{ $json.request }}, json=1

Подключите его к узлу IF: сравните значение 1 {{ $json.status }} со значением 2 1 через операцию Equal.

  • Истинный выход → переходите к следующему действию (использование токена)
  • Ложный выходWait (5 секунд) → назад к узлу опроса

Вариант Б: узел Code

Для более точного контроля используйте узел Code:

const apiKey = 'YOUR_API_KEY';
const taskId = $input.first().json.request;

for (let i = 0; i < 24; i++) {
  await new Promise(r => setTimeout(r, 5000));

  const resp = await fetch(
    `https://ocr.captchaai.com/res.php?key=${apiKey}&action=get&id=${taskId}&json=1`
  );
  const data = await resp.json();

  if (data.status === 1) {
    return [{ json: { token: data.request, taskId } }];
  }
  if (data.request !== 'CAPCHA_NOT_READY') {
    throw new Error(`CaptchaAI error: ${data.request}`);
  }
}

throw new Error(`Task ${taskId} timed out`);

Шаг 4: отправьте решённый токен

Добавьте ещё один узел HTTP Request для отправки формы с решённым токеном:

  • Метод: POST
  • URL-адрес: https://staging.example.com/submit
  • Тип содержимого тела: Form URL Encoded

Параметры тела запроса включают данные вашей формы, а также параметр g-recaptcha-response со значением {{ $json.token }}.


Как надёжно хранить API-ключ в n8n

Используйте встроенную систему Credentials n8n:

  1. Перейдите в раздел Credentials → Add Credential → Header Auth.
  2. Название: CaptchaAI API Key
  3. Храните ключ в защищённом хранилище n8n, а не в теле рабочего процесса.

Либо используйте переменные окружения:

# In your n8n environment
export CAPTCHAAI_API_KEY="your_key_here"

Обращение из узлов: {{ $env.CAPTCHAAI_API_KEY }}


Отдельный сценарий: решение CAPTCHA по изображению

Для CAPTCHA-изображений измените узел отправки:

  • method: base64
  • body: изображение, закодированное в base64 (из предыдущего узла или по URL)

Чтобы превратить URL изображения в base64 прямо в n8n, добавьте узел Code перед отправкой:

const imageUrl = $input.first().json.imageUrl;
const resp = await fetch(imageUrl);
const buffer = Buffer.from(await resp.arrayBuffer());
const base64 = buffer.toString('base64');

return [{ json: { imageBase64: base64 } }];

Автоматическая проверка баланса потоков

Заведите отдельный рабочий процесс, который выполняется по расписанию:

Cron (daily at 9 AM)
    ↓
HTTP Request: GET res.php?action=getbalance
    ↓
IF: balance < 5
    ↓
Slack / Email: "CaptchaAI balance low: $X.XX"

Агентствам из Беларуси, Казахстана и России часто удобнее вместо Slack / Email подключить узел Telegram: уведомление о низком балансе приходит прямо в рабочий чат.


Типичные ошибки и как их исправить

Проблема Причина Как исправить
Цикл опроса работает бесконечно Нет ограничения на число итераций Добавьте переменную-счётчик и прерывайте цикл после 24 попыток
Постоянно приходит CAPCHA_NOT_READY Слишком короткая пауза перед первым опросом Увеличьте начальное ожидание до 15–20 секунд
Токен не попадает в следующий узел Неверный путь в выражении Проверьте, что {{ $json.token }} соответствует реальному полю ответа
Учётные данные не найдены Переменная окружения не задана Перезапустите n8n после того, как переменные установлены

Часто задаваемые вопросы

Поддерживает ли n8n Cloudflare Turnstile?

Да. Замените method на turnstile и передавайте sitekey вместо googlekey — остальная цепочка узлов не меняется.

Работает ли эта схема в облачной версии n8n, а не только в self-hosted?

Да, узлы HTTP Request, Wait и Code доступны и в n8n Cloud. Разница только в хранении ключа: вместо переменной окружения используйте встроенные Credentials — сам сценарий не меняется.

Сколько потоков CaptchaAI нужно для пакетной обработки через n8n?

Зависит от объёма и от того, сколько элементов идёт параллельно через узел Split In Batches. Для нечастых запусков хватает BASIC ($15/мес, 5 потоков); при регулярной пакетной обработке разумнее взять ADVANCE ($90/мес, 50 потоков).

Как избежать зависшего цикла опроса, если решатель долго не отвечает?

Ограничьте число итераций счётчиком (как в примере узла Code — 24 попытки по 5 секунд) и выбрасывайте ошибку по тайм-ауту вместо бесконечного цикла.


Добавьте решение CAPTCHA в свой n8n-пайплайн

Получите API-ключ на сайте captchaai.com и подключите его к первому узлу HTTP Request — дальше цепочка работает без ручного вмешательства.


Что читать дальше

Комментарии для этой статьи отключены.