Referensi

Perbandingan Waktu Penyelesaian CAPTCHA per Jenis di CaptchaAI

Selesaikan masalah waktu. Perbedaan 10 detik untuk setiap penyelesaian digabungkan menjadi beberapa jam penundaan di ribuan tugas. Panduan ini memberikan tolok ukur yang dapat direproduksi untuk setiap jenis CAPTCHA yang didukung CaptchaAI, ditambah skrip untuk menjalankan pengukuran Anda sendiri.

Catatan: Angka-angka di bawah adalah estimasi berdasarkan pengujian tipikal. Waktu aktual bervariasi tergantung kondisi jaringan, beban server, dan kompleksitas CAPTCHA. Selalu jalankan benchmark Anda sendiri sebelum menggunakan data ini untuk pengaturan timeout produksi.

Waktu Penyelesaian Khas

Tolok ukur ini mencerminkan waktu median dari 100 penyelesaian berturut-turut per jenis, diukur dari penyerahan API hingga pengambilan hasil:

Jenis CAPTCHA Penyelesaian Median P90 Selesaikan P99 Selesaikan Tingkat Keberhasilan
reCAPTCHA v2 12–18 detik 25 detik 40an tinggi (indikatif)
reCAPTCHA v2 Tak Terlihat 10–15 detik 20an 35 detik tinggi (indikatif)
reCAPTCHA v3 8–12 detik 18 detik 30an 90%+
reCAPTCHA Perusahaan 15–25 detik 35 detik 50an 90%+
Cloudflare Turnstile 5–10 detik 15 detik 25 detik 99%+
GeeTest v3 10–18 detik 25 detik 40an 90%+
Gambar/OCR 3–8 detik 12 detik 20an 85%+
BLS CAPTCHA 5–10 detik 15 detik 20an 100%

Waktu bervariasi berdasarkan kualitas proxy, beban server, dan kompleksitas CAPTCHA.

Faktor-Faktor yang Mempengaruhi Waktu Penyelesaian

Latensi Jaringan

Jarak Anda dari titik akhir API CaptchaAI menambah waktu pulang pergi. RTT 200 md menambahkan total ~1 detik (kirim + 3–4 jajak pendapat × 200 md).

Proksi

Saat menggunakan proxy, egress jaringan yang diotorisasi biasanya menghasilkan penyelesaian yang lebih cepat dibandingkan proxy datacenter karena memicu lebih sedikit tantangan sekunder.

Kompleksitas CAPTCHA

Tantangan gambar reCAPTCHA v2 memiliki tingkat kesulitan yang bervariasi. Tantangan "pilih lampu lalu lintas" dengan gambar memudar membutuhkan waktu lebih lama daripada verifikasi kotak centang sederhana.

Strategi Polling

Polling agresif (setiap 2 detik) mendeteksi hasil lebih cepat tetapi meningkatkan panggilan API. Polling konservatif (setiap 10 detik) mengurangi beban tetapi menambah latensi.

Skrip Tolok Ukur Python

# benchmark_captchaai.py
import os
import time
import statistics
import requests

API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")

def benchmark_solve(method, params, runs=10):
    """Benchmark a CAPTCHA type over multiple runs."""
    times = []
    successes = 0

    for i in range(runs):
        start = time.time()

        # Submit
        submit_params = {"key": API_KEY, "json": "1", **params}
        resp = requests.get("https://ocr.captchaai.com/in.php",
                            params=submit_params)
        result = resp.json()

        if result.get("status") != 1:
            print(f"  Run {i+1}: Submit failed - {result.get('request')}")
            continue

        task_id = result["request"]

        # Poll
        time.sleep(10)
        solved = False
        for _ in range(30):
            poll = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": API_KEY, "action": "get",
                "id": task_id, "json": "1",
            })
            poll_result = poll.json()

            if poll_result.get("status") == 1:
                elapsed = time.time() - start
                times.append(elapsed)
                successes += 1
                solved = True
                print(f"  Run {i+1}: {elapsed:.1f}s")
                break
            if poll_result.get("request") != "CAPCHA_NOT_READY":
                print(f"  Run {i+1}: Error - {poll_result.get('request')}")
                break

            time.sleep(5)

        if not solved and poll_result.get("request") == "CAPCHA_NOT_READY":
            print(f"  Run {i+1}: Timeout")

    if times:
        return {
            "runs": runs,
            "successes": successes,
            "success_rate": f"{successes/runs*100:.0f}%",
            "median": f"{statistics.median(times):.1f}s",
            "p90": f"{sorted(times)[int(len(times)*0.9)]:.1f}s" if len(times) >= 10 else "N/A",
            "min": f"{min(times):.1f}s",
            "max": f"{max(times):.1f}s",
        }
    return {"error": "No successful solves"}

# Benchmark reCAPTCHA v2
print("=== reCAPTCHA v2 ===")
recaptcha_v2 = benchmark_solve("userrecaptcha", {
    "method": "userrecaptcha",
    "googlekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "pageurl": "https://www.google.com/recaptcha/api2/demo",
})
print(recaptcha_v2)

# Benchmark Image/OCR
print("\n=== Image CAPTCHA ===")
# Submit a base64-encoded test image
import base64
# Use a test image for benchmarking
image_result = benchmark_solve("post", {
    "method": "base64",
    "body": "BASE64_ENCODED_CAPTCHA_IMAGE",
})
print(image_result)

Skrip Tolok Ukur JavaScript

// benchmark_captchaai.js
const axios = require('axios');

const API_KEY = process.env.CAPTCHAAI_KEY || 'YOUR_API_KEY';

async function benchmarkSolve(params, runs = 10) {
  const times = [];
  let successes = 0;

  for (let i = 0; i < runs; i++) {
    const start = Date.now();

    // Submit
    const submit = await axios.get('https://ocr.captchaai.com/in.php', {
      params: { key: API_KEY, json: '1', ...params },
    });

    if (submit.data.status !== 1) {
      console.log(`  Run ${i + 1}: Submit failed - ${submit.data.request}`);
      continue;
    }

    // Poll
    await new Promise(r => setTimeout(r, 10000));
    let solved = false;

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

      if (poll.data.status === 1) {
        const elapsed = (Date.now() - start) / 1000;
        times.push(elapsed);
        successes++;
        solved = true;
        console.log(`  Run ${i + 1}: ${elapsed.toFixed(1)}s`);
        break;
      }
      if (poll.data.request !== 'CAPCHA_NOT_READY') {
        console.log(`  Run ${i + 1}: Error - ${poll.data.request}`);
        break;
      }
      await new Promise(r => setTimeout(r, 5000));
    }

    if (!solved) console.log(`  Run ${i + 1}: Timeout`);
  }

  if (times.length === 0) return { error: 'No successful solves' };

  times.sort((a, b) => a - b);
  return {
    runs, successes,
    successRate: `${((successes / runs) * 100).toFixed(0)}%`,
    median: `${times[Math.floor(times.length / 2)].toFixed(1)}s`,
    min: `${times[0].toFixed(1)}s`,
    max: `${times[times.length - 1].toFixed(1)}s`,
  };
}

(async () => {
  console.log('=== reCAPTCHA v2 ===');
  const v2 = await benchmarkSolve({
    method: 'userrecaptcha',
    googlekey: '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
    pageurl: 'https://www.google.com/recaptcha/api2/demo',
  });
  console.log(v2);

  console.log('\n=== Cloudflare Turnstile ===');
  const turnstile = await benchmarkSolve({
    method: 'turnstile',
    sitekey: 'YOUR_TURNSTILE_SITEKEY',
    pageurl: 'https://example.com',
  });
  console.log(turnstile);
})();

Menafsirkan Hasil

Median vs P90

  • Median — Pengalaman yang khas. Gunakan ini untuk perencanaan kapasitas.
  • P90 — "Kasus terburuk" untuk 9 dari 10 penyelesaian. Gunakan ini untuk pengaturan batas waktu.
  • P99 — Kasus edge sebenarnya. Tetapkan batas waktu maksimum Anda lebih tinggi dari ini.

Interval Pemungutan Suara Optimal

Berdasarkan tolok ukur di atas, konfigurasikan polling per jenis CAPTCHA:

Jenis CAPTCHA Tunggu Awal Interval Polling Upaya Maks
Gambar/OCR 5 detik 3 detik 15
Cloudflare Turnstile 5 detik 3 detik 15
BLS CAPTCHA 5 detik 3 detik 15
reCAPTCHA v2 15 detik 5 detik 20
reCAPTCHA v3 10 detik 5 detik 20
GeeTest v3 12 detik 5 detik 20
reCAPTCHA Perusahaan 15 detik 5 detik 25

Pemecahan Masalah

Masalah Penyebab Solusi
Waktu solve lebih tinggi dari yang tercantum Latensi jaringan atau proxy Uji dari region yang lebih dekat dengan server CaptchaAI
Hasil tidak konsisten antar eksekusi Variasi kesulitan CAPTCHA Tingkatkan ukuran sampel menjadi 50+ eksekusi
Banyak timeout Sitekey atau URL halaman tidak valid Verifikasi parameter dengan satu tes manual
ERROR_ZERO_BALANCE saat benchmark Saldo tidak cukup Isi ulang sebelum menjalankan benchmark besar

Pertanyaan Umum

Apakah waktu penyelesaian berbeda-beda menurut waktu?

Ya. Jam sibuk (jam kerja AS) mungkin menunjukkan waktu penyelesaian yang sedikit lebih lama karena permintaan yang lebih tinggi. Jalankan benchmark pada waktu yang berbeda untuk mendapatkan gambaran yang lengkap.

Haruskah saya menggunakan data ini untuk pengaturan batas waktu produksi?

Gunakan nilai P90 untuk batas waktu standar dan P99 untuk batas waktu maksimum. Tambahkan buffer 20% untuk memperhitungkan variabilitas jaringan.

Bagaimana pengaturan proxy mempengaruhi waktu penyelesaian?

Jika Anda menyediakan proxy, CaptchaAI merutekan penyelesaian melalui proxy tersebut. Proksi yang lambat atau jauh dapat menambahkan 5–15 detik ke total waktu penyelesaian. Untuk pembandingan, uji dengan dan tanpa proxy secara terpisah.

Artikel Terkait

  • Optimasi Latensi API CaptchaAI
  • Pemecahan CAPTCHA Paralel vs Sekuensial

Langkah Selanjutnya

Jalankan skrip benchmark terhadap akun Anda sendiri dan target CAPTCHA — dapatkan kunci API CaptchaAI Anda.

Komentar dinonaktifkan untuk artikel ini.