Туториалы по API

Решите CAPTCHA изображений с помощью Node.js и CaptchaAI

Изображение CAPTCHA отображает искаженный текст, который пользователи должны вводить. Они появляются на правительственных сайтах, в устаревших формах и страницах регистрации.CaptchaAIчитает изображение и возвращает текст. В этом руководстве показано, как это сделать из Node.js.


Предварительные условия

Элемент Ценить
CaptchaAI API-ключ Отcaptchaai.com
Node.js 14+
Библиотеки axios, fs
Формат изображения JPG, PNG или GIF (100 байт – 100 КБ)

Метод А: отправка Base64

const axios = require('axios');
const fs = require('fs');

const API_KEY = 'YOUR_API_KEY';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

// Read and encode the image
const imageB64 = fs.readFileSync('captcha.png').toString('base64');

// Submit to CaptchaAI
const { data: submitData } = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: API_KEY,
    method: 'base64',
    body: imageB64,
    json: 1,
  },
});

if (submitData.status !== 1) throw new Error(submitData.request);
const taskId = submitData.request;
console.log(`Task submitted: ${taskId}`);

Способ Б: загрузка файла

const FormData = require('form-data');

const form = new FormData();
form.append('key', API_KEY);
form.append('method', 'post');
form.append('json', '1');
form.append('file', fs.createReadStream('captcha.png'));

const { data: submitData } = await axios.post('https://ocr.captchaai.com/in.php', form, {
  headers: form.getHeaders(),
});

const taskId = submitData.request;

Опрос для получения текстового результата

await sleep(5000);

let captchaText;
for (let i = 0; i < 30; i++) {
  const { data: pollData } = await axios.get('https://ocr.captchaai.com/res.php', {
    params: { key: API_KEY, action: 'get', id: taskId, json: 1 },
  });

  if (pollData.status === 1) {
    captchaText = pollData.request;
    console.log(`CAPTCHA text: ${captchaText}`);
    break;
  }
  if (pollData.request !== 'CAPCHA_NOT_READY') {
    throw new Error(pollData.request);
  }
  await sleep(5000);
}

Параметры точности

// Digits only, 4-6 characters
const { data } = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: API_KEY,
    method: 'base64',
    body: imageB64,
    numeric: 1,      // digits only
    min_len: 4,       // minimum length
    max_len: 6,       // maximum length
    json: 1,
  },
});
Параметр Ценить Цель
numeric 1 = цифры, 2 = буквы Ограничивает символы
min_len / max_len Целое число Ограничения длины
calc 1 Вычисляет математическое выражение
regsense 1 С учетом регистра

Полный рабочий пример

const axios = require('axios');
const puppeteer = require('puppeteer');
const fs = require('fs');

const API_KEY = 'YOUR_API_KEY';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

async function solveImageCaptcha() {
  // 1. Load page and screenshot CAPTCHA
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/register');

  const captchaEl = await page.$('#captcha-image');
  await captchaEl.screenshot({ path: 'captcha.png' });

  // 2. Encode and submit
  const imageB64 = fs.readFileSync('captcha.png').toString('base64');
  const { data: submit } = await axios.post('https://ocr.captchaai.com/in.php', null, {
    params: { key: API_KEY, method: 'base64', body: imageB64, json: 1 },
  });
  const taskId = submit.request;

  // 3. Poll for text
  await sleep(5000);
  let text;
  for (let i = 0; i < 30; i++) {
    const { data: poll } = await axios.get('https://ocr.captchaai.com/res.php', {
      params: { key: API_KEY, action: 'get', id: taskId, json: 1 },
    });
    if (poll.status === 1) { text = poll.request; break; }
    if (poll.request !== 'CAPCHA_NOT_READY') throw new Error(poll.request);
    await sleep(5000);
  }

  // 4. Type and submit
  await page.type('#captcha-input', text);
  await page.click('form [type="submit"]');
  console.log(`Solved: ${text}`);
  await browser.close();
}

solveImageCaptcha().catch(console.error);

Ожидаемый результат:

Solved: ABC123

Распространенные ошибки

Ошибка Причина Исправить
ERROR_WRONG_FILE_EXTENSION Неподдерживаемый формат Используйте JPG, PNG или GIF.
ERROR_TOO_BIG_CAPTCHA_FILESIZE Изображение > 100 КБ Сначала сжать
ERROR_ZERO_CAPTCHA_FILESIZE Изображение < 100 байт Проверьте изображение
CAPCHA_NOT_READY Все еще решаем Опрос каждые 5 секунд

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

Могу ли я решить математические CAPTCHA?

Да. Добавьте calc: 1 к параметрам, и CaptchaAI вернет вычисленный результат.

Как сообщить о неправильных решениях?

Позвоните https://ocr.captchaai.com/res.php?key=KEY&action=reportbad&id=TASK_ID, чтобы сообщить о неверных результатах.

Base64 или загрузка файлов быстрее?

Производительность такая же. Base64 удобнее, когда изображение уже есть в памяти.


Связанные руководства


Начните решать CAPTCHA изображений с помощью CaptchaAI →

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