Integrations

Axios + CaptchaAI: решение CAPTCHA без браузера

Вам не нужен Puppeteer или Драматург, чтобы разгадывать CAPTCHA. С помощью Axios и CaptchaAI вы можете решать reCAPTCHA, Turnstile и графические CAPTCHA, используя чистые HTTP-запросы — без дополнительных затрат на браузер.

Требования

Требование Подробности
Node.js 16+
аксиомы 1.х
CaptchaAI API-ключ Получите один здесь
npm install axios

CaptchaAI Клиент

const axios = require("axios");

class CaptchaAI {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = "https://ocr.captchaai.com";
  }

  async submit(params) {
    params.key = this.apiKey;
    const resp = await axios.get(`${this.baseUrl}/in.php`, { params });
    const text = resp.data;

    if (!String(text).startsWith("OK|")) {
      throw new Error(`Submit failed: ${text}`);
    }
    return String(text).split("|")[1];
  }

  async poll(taskId, timeoutMs = 300000) {
    const deadline = Date.now() + timeoutMs;
    const params = { key: this.apiKey, action: "get", id: taskId };

    while (Date.now() < deadline) {
      await new Promise((r) => setTimeout(r, 5000));

      const resp = await axios.get(`${this.baseUrl}/res.php`, { params });
      const text = String(resp.data);

      if (text === "CAPCHA_NOT_READY") continue;
      if (text.startsWith("OK|")) return text.split("|").slice(1).join("|");
      throw new Error(`Solve failed: ${text}`);
    }
    throw new Error(`Timeout after ${timeoutMs}ms for task ${taskId}`);
  }

  async solve(params, timeoutMs = 300000) {
    const taskId = await this.submit(params);
    return this.poll(taskId, timeoutMs);
  }

  async getBalance() {
    const resp = await axios.get(`${this.baseUrl}/res.php`, {
      params: { key: this.apiKey, action: "getbalance" },
    });
    return parseFloat(resp.data);
  }
}

module.exports = CaptchaAI;

Решить reCAPTCHA v2 (без браузера)

const CaptchaAI = require("./captchaai");

async function main() {
  const solver = new CaptchaAI(process.env.CAPTCHAAI_API_KEY);

  // Solve the CAPTCHA without opening any browser
  const token = await solver.solve({
    method: "userrecaptcha",
    googlekey: "6Le-wvkS...",
    pageurl: "https://https://staging.example.com/qa-login",
  });

  // Submit form with the token using Axios
  const resp = await axios.post("https://https://staging.example.com/qa-login", {
    username: "user",
    password: "pass",
    "g-recaptcha-response": token,
  });

  console.log(`Login response: ${resp.status}`);
}

main().catch(console.error);

Решить Cloudflare Turnstile (без браузера)

const token = await solver.solve({
  method: "turnstile",
  sitekey: "0x4AAAAA...",
  pageurl: "https://example.com",
});

// Submit with Turnstile token
const resp = await axios.post("https://example.com/api/verify", {
  "cf-turnstile-response": token,
  data: "payload",
});

Решите CAPTCHA для изображений

const fs = require("fs");

const imageBuffer = fs.readFileSync("captcha.png");
const imageB64 = imageBuffer.toString("base64");

const text = await solver.solve({
  method: "base64",
  body: imageB64,
});

console.log(`CAPTCHA text: ${text}`);

// Submit form with solved text
const resp = await axios.post("https://example.com/verify", {
  captcha: text,
  other_data: "value",
});

Полный рабочий процесс парсинга

Очистите страницу, защищенную CAPTCHA, без использования браузера:

const CaptchaAI = require("./captchaai");
const axios = require("axios");
const cheerio = require("cheerio");

async function scrapeProtectedPage(url) {
  const solver = new CaptchaAI(process.env.CAPTCHAAI_API_KEY);

  // Step 1: Fetch the page
  const page = await axios.get(url);
  const $ = cheerio.load(page.data);

  // Step 2: Extract the reCAPTCHA site key
  const siteKey = $(".g-recaptcha").attr("data-sitekey");
  if (!siteKey) {
    console.log("No CAPTCHA found, returning page content");
    return page.data;
  }

  // Step 3: Solve the CAPTCHA
  console.log(`Solving CAPTCHA for ${url}...`);
  const token = await solver.solve({
    method: "userrecaptcha",
    googlekey: siteKey,
    pageurl: url,
  });

  // Step 4: Submit form with token
  const formAction = $("form").attr("action") || url;
  const formData = {};

  $("form input").each((_, el) => {
    const name = $(el).attr("name");
    const value = $(el).attr("value") || "";
    if (name) formData[name] = value;
  });
  formData["g-recaptcha-response"] = token;

  const result = await axios.post(formAction, new URLSearchParams(formData), {
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
  });

  return result.data;
}

scrapeProtectedPage("https://example.com/data")
  .then((data) => console.log("Success:", typeof data))
  .catch(console.error);

Параллельное решение

async function solveBatch(urls, siteKey) {
  const solver = new CaptchaAI(process.env.CAPTCHAAI_API_KEY);

  const promises = urls.map(async (url) => {
    try {
      const token = await solver.solve({
        method: "userrecaptcha",
        googlekey: siteKey,
        pageurl: url,
      });
      return { url, token, error: null };
    } catch (error) {
      return { url, token: null, error: error.message };
    }
  });

  const results = await Promise.all(promises);

  const solved = results.filter((r) => r.token);
  console.log(`Solved ${solved.length}/${urls.length}`);
  return results;
}

Поиск неисправностей

Ошибка Причина Исправить
AxiosError: getaddrinfo ENOTFOUND проблема с DNS Проверьте подключение к сети
Submit failed: ERROR_WRONG_USER_KEY Неверный ключ API Подтвердите ключ с панели управления
Submit failed: ERROR_ZERO_BALANCE Нет средств Добавить баланс на счет
Токен отклонен целевым сайтом Срок действия токена истек Отправьте токен в течение 60 секунд

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

Почему стоит избегать браузеров для решения CAPTCHA?

Браузеры потребляют 200–500 МБ ОЗУ на каждый экземпляр. Чистый HTTP с CaptchaAI использует ~5 МБ. Это в 40–100 раз эффективнее для автоматизации на стороне сервера.

Когда мне еще понадобится браузер?

Когда сайт требует рендеринга контента на JavaScript. В частности, для CAPTCHA вам никогда не понадобится браузер — CaptchaAI решает проблему удаленно.

Могу ли я использовать выборку вместо Axios?

Да. Node.js 18+ включает встроенный fetch. Параметры API CaptchaAI такие же.

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

  • Учебное пособие по парсингу капчи Node.js
  • Интеграция HTTPX + CaptchaAI
  • cURL + CaptchaAI CLI
Комментарии для этой статьи отключены.

Похожие сообщения

DevOps & Scaling Создание решения CAPTCHA на основе событий с помощью AWS SNS и CaptchaAI
Руководство Dev Ops по созданию решений CAPTCHA на основе событий с помощью AWS SNS и Captcha AI, с архитектурными решениями, эксплуатационными соображениями и...

Руководство Dev Ops по созданию решений CAPTCHA на основе событий с помощью AWS SNS и Captcha AI, с архитектур...

Apr 24, 2026
Comparisons Сравнение подходящий сервисов по решению CAPTCHA (2025 г.)
Практическое сравнение Сравнение подходящий сервисов по решению CAPTCHA (2025 г.), ориентированное на различия в стоимости, точности, скорости и усилиях по инте...

Практическое сравнение Сравнение подходящий сервисов по решению CAPTCHA (2025 г.), ориентированное на различия...

Apr 25, 2026
DevOps & Scaling Учебники Ansible для развертывания рабочих кадров CaptchaAI
Руководство по Dev Ops для Учебники Ansible для развертывания рабочих кадров Captcha AI, с архитектурными решениями, соображениями по эксплуатации и шаблонами а...

Руководство по Dev Ops для Учебники Ansible для развертывания рабочих кадров Captcha AI, с архитектурными реше...

Apr 22, 2026