دروس 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 →

التعليقات غير مفعّلة لهذا المقال.