Tutorials

CAPTCHA Çözme İşlemi: Saatte 10.000 Görev Nasıl İşlenir?

Saatte 10.000 CAPTCHA'nın işlenmesi, saniyede ~2,8 çözümün sürdürüldüğü anlamına gelir. Doğru mimariyle bu başarılabilir. Bu kılavuzda, bu verime ulaşmak için gereken matematik, kod ve ayarlamalar anlatılmaktadır.CaptchaAI.

Matematik

Tek bir reCAPTCHA v2 çözümü 15 saniye sürerse (medyan):

  • Sıralı: 3.600s / 15s = 240 çözüm/hour
  • 10.000/hour'ye ulaşmak için: uçuş sırasında her zaman ~42 eşzamanlı çözüme ihtiyacınız var

Temel fikir: CaptchaAI'nin daha hızlı olmasını beklemiyorsunuz; aynı 15 saniyelik pencere içinde 42 çözümün tamamlanmasına yetecek kadar istekle çakışıyorsunuz.

Mimarlık

┌──────────┐     ┌────────────┐     ┌─────────────┐     ┌──────────┐
│  Task     │────▶│  Submit    │────▶│  CaptchaAI  │────▶│  Result  │
│  Queue    │     │  Workers   │     │  API        │     │  Store   │
│  (Redis)  │     │  (async)   │     │             │     │  (DB)    │
└──────────┘     └────────────┘     └─────────────┘     └──────────┘
                       │                    ▲
                       │    ┌──────────┐    │
                       └───▶│  Poll    │────┘
                            │  Workers │
                            └──────────┘

Bileşenler:

  1. Görev kuyruğu – Bekleyen CAPTCHA görevlerini site anahtarları ve URL'lerle tutar
  2. Çalışanları gönderin – Görevleri eş zamanlı olarak CaptchaAI API'sine gönderin
  3. Anket çalışanları – Sonuçları optimize edilmiş aralıklarla kontrol edin
  4. Sonuç deposu – Belirteçleri geldiklerinde kaydeder

Python: Eşzamansız Boru Hattı

# high_throughput_solver.py
import os
import asyncio
import time
import aiohttp

API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")
BASE_URL = "https://ocr.captchaai.com"
MAX_CONCURRENT = 50  # Max simultaneous solves
POLL_INTERVAL = 5    # Seconds between polls
INITIAL_WAIT = 12    # Seconds before first poll

semaphore = asyncio.Semaphore(MAX_CONCURRENT)
stats = {"submitted": 0, "solved": 0, "failed": 0, "start": 0}

async def solve_one(session, sitekey, pageurl, task_num):
    """Submit and poll a single CAPTCHA."""
    async with semaphore:
        try:
            # Submit
            async with session.get(f"{BASE_URL}/in.php", params={
                "key": API_KEY, "method": "userrecaptcha",
                "googlekey": sitekey, "pageurl": pageurl, "json": "1",
            }) as resp:
                result = await resp.json(content_type=None)

            if result.get("status") != 1:
                stats["failed"] += 1
                return None

            stats["submitted"] += 1
            task_id = result["request"]

            # Wait before first poll
            await asyncio.sleep(INITIAL_WAIT)

            # Poll
            for _ in range(25):
                async with session.get(f"{BASE_URL}/res.php", params={
                    "key": API_KEY, "action": "get",
                    "id": task_id, "json": "1",
                }) as resp:
                    poll_result = await resp.json(content_type=None)

                if poll_result.get("status") == 1:
                    stats["solved"] += 1
                    return poll_result["request"]

                if poll_result.get("request") != "CAPCHA_NOT_READY":
                    stats["failed"] += 1
                    return None

                await asyncio.sleep(POLL_INTERVAL)

            stats["failed"] += 1
            return None

        except Exception as e:
            stats["failed"] += 1
            return None

async def run_batch(tasks):
    """Process a batch of CAPTCHA tasks concurrently."""
    connector = aiohttp.TCPConnector(
        limit=MAX_CONCURRENT,
        keepalive_timeout=60,
    )
    async with aiohttp.ClientSession(connector=connector) as session:
        coros = [
            solve_one(session, task["sitekey"], task["pageurl"], i)
            for i, task in enumerate(tasks)
        ]
        results = await asyncio.gather(*coros)
    return results

async def main():
    # Generate test tasks (replace with your task source)
    tasks = [
        {
            "sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
            "pageurl": "https://www.google.com/recaptcha/api2/demo",
        }
        for _ in range(100)  # Start with 100 tasks
    ]

    stats["start"] = time.time()
    print(f"Processing {len(tasks)} tasks with {MAX_CONCURRENT} concurrent workers")

    results = await run_batch(tasks)
    elapsed = time.time() - stats["start"]

    print(f"\nCompleted in {elapsed:.0f}s")
    print(f"Submitted: {stats['submitted']}")
    print(f"Solved: {stats['solved']}")
    print(f"Failed: {stats['failed']}")
    print(f"Throughput: {stats['solved'] / (elapsed / 3600):.0f} solves/hour")

asyncio.run(main())

JavaScript: Eşzamanlı Boru Hattı

// high_throughput_solver.js
const axios = require('axios');
const https = require('https');

const API_KEY = process.env.CAPTCHAAI_KEY || 'YOUR_API_KEY';
const BASE = 'https://ocr.captchaai.com';
const MAX_CONCURRENT = 50;

const agent = new https.Agent({ keepAlive: true, maxSockets: MAX_CONCURRENT });
const api = axios.create({ baseURL: BASE, httpsAgent: agent, timeout: 30000 });

const stats = { submitted: 0, solved: 0, failed: 0 };

async function solveOne(sitekey, pageurl) {
  try {
    const submit = await api.get('/in.php', {
      params: { key: API_KEY, method: 'userrecaptcha', googlekey: sitekey, pageurl, json: '1' },
    });
    if (submit.data.status !== 1) { stats.failed++; return null; }
    stats.submitted++;

    await new Promise(r => setTimeout(r, 12000));

    for (let i = 0; i < 25; i++) {
      const poll = await api.get('/res.php', {
        params: { key: API_KEY, action: 'get', id: submit.data.request, json: '1' },
      });
      if (poll.data.status === 1) { stats.solved++; return poll.data.request; }
      if (poll.data.request !== 'CAPCHA_NOT_READY') { stats.failed++; return null; }
      await new Promise(r => setTimeout(r, 5000));
    }
    stats.failed++;
    return null;
  } catch { stats.failed++; return null; }
}

async function runWithConcurrency(tasks, limit) {
  const results = [];
  const executing = new Set();

  for (const task of tasks) {
    const p = solveOne(task.sitekey, task.pageurl).then(r => {
      executing.delete(p);
      return r;
    });
    executing.add(p);
    results.push(p);

    if (executing.size >= limit) {
      await Promise.race(executing);
    }
  }
  return Promise.all(results);
}

(async () => {
  const tasks = Array.from({ length: 100 }, () => ({
    sitekey: '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
    pageurl: 'https://www.google.com/recaptcha/api2/demo',
  }));

  const start = Date.now();
  console.log(`Processing ${tasks.length} tasks, ${MAX_CONCURRENT} concurrent`);

  await runWithConcurrency(tasks, MAX_CONCURRENT);
  const elapsed = (Date.now() - start) / 1000;

  console.log(`\nDone in ${elapsed.toFixed(0)}s`);
  console.log(`Solved: ${stats.solved}, Failed: ${stats.failed}`);
  console.log(`Throughput: ${(stats.solved / (elapsed / 3600)).toFixed(0)} solves/hour`);

  agent.destroy();
})();

Ayar Parametreleri

Parametre Muhafazakar Dengeli Agresif
MAX_CONCURRENT 20 50 100
INITIAL_WAIT 15'ler 12'li 10'lar
POLL_INTERVAL 7'ler 5'ler 3'ler
MAX_POLL_ATTEMPTS 30 25 20
Beklenen verim ~4,800/hr ~10.000/hr ~18.000/hr

İhtiyatlı başlayın ve azalan getirileri veya artan hata oranlarını görene kadar MAX_CONCURRENT'yi artırın.

Verimi İzleme

Bu ölçümleri gerçek zamanlı olarak izleyin:

  • Dakika başına çözer — 10K/hour hedefi için ~167'de kalmalı
  • Hata oranı – %5'in altında tutun. Yükselirse eşzamanlılığı azaltın
  • Kuyruk derinliği – Büyüyorsanız çalışan sayısını artırın. Boşsa, fazla provizyon almışsınız demektir
  • P90 çözüm süresi - Artıyorsa CaptchaAI hız sınırlayıcı olabilir

Sorun giderme

Sorun Sebep Düzeltme
~5K/hr'de üretim platoları Yetersiz eşzamanlılık MAX_CONCURRENT'yi 80-100'e yükseltin
Hata oranı > %10 API'nin veya hatalı proxy'lerin aşırı yüklenmesi Eşzamanlılığı azaltın, proxy sağlığını kontrol edin
Bellek kullanımı artıyor Sınırsız görev birikimi Sonuçları geldikçe işleyin, ara belleğe almayın
ERROR_NO_SLOT_AVAILABLE CaptchaAI sırası dolu Geri çekilin ve 5 saniye sonra yeniden deneyin

SSS

CaptchaAI eşzamanlılık sınırı nedir?

Eşzamanlı isteklerde kesin bir sınır yoktur, ancak aşırı yüksek eşzamanlılık (500+) hız sınırlamasını tetikleyebilir. 50'den başlayın ve ölçeği artırın.

Bunu birden fazla makinede çalıştırabilir miyim?

Evet. Paylaşılan bir kuyruk (Redis, RabbitMQ) kullanın ve çalışan komut dosyasını birden çok sunucuda çalıştırın. Her çalışan görevleri bağımsız olarak yerine getirir.

Bu gidişle denge tüketimi ne olacak?

10.000 çözün/hour'de bakiyenizi yakından izleyin. Bakiye kontrolü uç noktasını (res.php?action=getbalance) kullanın ve uyarıları ayarlayın.

Sonraki Adımlar

Yüksek verimli CAPTCHA ardışık düzeninizi oluşturun —CaptchaAI API anahtarınızı alın.

İlgili kılavuzlar:

Bu makale için yorumlar devre dışı bırakılmıştır.

İlgili Yazılar

DevOps & Scaling Otomatik Ölçeklendirme CAPTCHA Çözme Çalışanları
Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içeren Otomatik Ölçeklendirme CAPTCHA Çözme Çalışanla...

Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içe...

Apr 21, 2026
Troubleshooting CAPTCHA Çözme Oranı Düşüşleri: Performans Regresyon Teşhisi
CAPTCHA Çözme Oranı Düşüşleri için pratik kılavuz: Performans Regresyon Teşhisi, yaygın nedenler, teşhis adımları ve Captcha AI ile uygulanacak somut düzeltmele...

CAPTCHA Çözme Oranı Düşüşleri için pratik kılavuz: Performans Regresyon Teşhisi, yaygın nedenler, teşhis adıml...

May 07, 2026
DevOps & Scaling CAPTCHA Çözme Altyapısı için Mavi-Yeşil Dağıtım
Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içeren CAPTCHA Çözme Altyapısı için Mavi-Yeşil Dağıtı...

Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içe...

Apr 27, 2026