Troubleshooting

Penurunan Tingkat Penyelesaian CAPTCHA: Diagnosis Regresi Kinerja

Hampir setiap penurunan tingkat penyelesaian yang mendadak berujung pada satu dari empat penyebab — dan Anda bisa mengerucutkannya dalam hitungan menit, sebelum repot membuka tiket dukungan. Keempat tersangka utamanya:

  1. Kode error dari API CaptchaAI (saldo habis, thread penuh, API key salah).
  2. Sitekey atau parameter situs target yang berubah semalam.
  3. Proxy yang mulai diblokir atau melambat.
  4. Token yang kedaluwarsa sebelum sempat dikirim ke form.

Triase cepat: cocokkan gejala dengan tindakan pertama

Cocokkan pola yang Anda lihat dengan tindakan pertama yang paling mungkin berhasil. Sebagian besar kasus berhenti di baris pertama yang cocok.

Skenario Kemungkinan penyebab Tindakan pertama
Gagal total, semua ERROR_WRONG_USER_KEY API key tidak valid Periksa ulang API key
Menurun bertahap selama beberapa hari Degradasi proxy Rotasi proxy
Tiba-tiba jatuh ke 0% Sitekey atau halaman berubah Ekstrak ulang parameter CAPTCHA
Solve berhasil tapi token ditolak situs Token kedaluwarsa atau domain tidak cocok Cek timing dan pageurl
Jalan di test site, gagal di target Pembatasan spesifik situs Bandingkan parameter antar situs

Pastikan dulu penurunannya nyata: bandingkan dengan baseline

Buktikan dulu penurunannya nyata. Tanpa angka pembanding, "terasa lebih lambat" hanya firasat. Sandingkan metrik sekarang dengan baseline benchmark Anda.

Metrik Baseline Saat ini Delta Perlu diselidiki?
Tingkat penyelesaian 95% ? Turun > 5% = selidiki
Waktu penyelesaian median 15 detik ? Naik > 50% = selidiki
Tingkat error 2% ? > 5% = selidiki
Tingkat penerimaan token 98% ? Turun > 3% = situs berubah

Pohon keputusan: dari gejala ke akar masalah

Kalau angkanya memang turun, mulai dari gejala lalu ikuti cabangnya. Sebagian besar kasus berhenti di satu cabang saja.

Solve rate dropped
├── Is the API returning errors? → Check error codes
│   ├── ERROR_WRONG_USER_KEY → API key issue
│   ├── ERROR_ZERO_BALANCE → Balance depleted
│   ├── ERROR_NO_SLOT_AVAILABLE → Rate limiting
│   └── ERROR_CAPTCHA_UNSOLVABLE → CAPTCHA changed
├── Are tokens returned but rejected by the target site?
│   ├── Token expired before submission → Speed up injection
│   ├── Sitekey changed → Re-extract from page
│   └── Domain mismatch → Check pageurl parameter
├── Are proxies failing?
│   ├── Proxy banned by target → Rotate proxies
│   └── Proxy timeout → Check proxy health
└── Did the target site change?
    ├── New CAPTCHA type → Update method parameter
    ├── JavaScript changes → Re-analyze page
    └── Rate limiting by site → Reduce frequency

Contoh umum: tim price-monitoring dengan worker scraping di AWS ap-southeast-3 (Jakarta) melihat tingkat penyelesaian anjlok dari 94% ke 61% pagi hari — penyebabnya ketemu di Langkah 3, situs target mengganti sitekey semalam sebelumnya.

Langkah 1: jalankan skrip diagnostik CaptchaAI

Sebelum menyalahkan situs target, pastikan API-nya sehat. Skrip berikut mengecek saldo lalu menjalankan beberapa solve percobaan sambil mengumpulkan statistik error:

# diagnose_solve_rate.py
import os
import requests
from collections import Counter

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

def check_balance():
    """Verify API key and balance."""
    resp = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "getbalance", "json": "1",
    })
    result = resp.json()
    print(f"Balance: {result}")
    return result

def test_solve(sitekey, pageurl, runs=5):
    """Run test solves and collect error statistics."""
    errors = Counter()
    successes = 0

    for i in range(runs):
        # Submit
        resp = requests.get("https://ocr.captchaai.com/in.php", params={
            "key": API_KEY,
            "method": "userrecaptcha",
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": "1",
        })
        result = resp.json()

        if result.get("status") != 1:
            errors[result.get("request", "UNKNOWN")] += 1
            print(f"  Run {i+1}: Submit error: {result.get('request')}")
            continue

        task_id = result["request"]
        import time
        time.sleep(15)

        # Poll
        for _ in range(25):
            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:
                successes += 1
                print(f"  Run {i+1}: Solved")
                break
            if poll_result.get("request") != "CAPCHA_NOT_READY":
                errors[poll_result.get("request", "UNKNOWN")] += 1
                print(f"  Run {i+1}: Error: {poll_result.get('request')}")
                break
            time.sleep(5)
        else:
            errors["TIMEOUT"] += 1
            print(f"  Run {i+1}: Timeout")

    print(f"\nResults: {successes}/{runs} solved")
    if errors:
        print(f"Errors: {dict(errors)}")

# Run diagnostics
print("=== Balance Check ===")
check_balance()

print("\n=== Test Solves ===")
test_solve("YOUR_SITEKEY", "https://your-staging.example.com", runs=5)

Langkah 2: baca dan urutkan kode error berdasarkan frekuensi

Setelah skrip mengumpulkan distribusi error, urutkan dari yang paling sering — error dominan biasanya menunjuk ke akar masalah.

Kesalahan Artinya Tindakan
ERROR_ZERO_BALANCE Kredit habis Isi ulang saldo dan selesai
ERROR_NO_SLOT_AVAILABLE Semua thread terpakai (kena batas) Kurangi concurrency atau naikkan paket
ERROR_CAPTCHA_UNSOLVABLE CAPTCHA terlalu rumit atau berubah Laporkan ke CaptchaAI; pastikan sitekey benar
ERROR_WRONG_CAPTCHA_ID Polling pada task ID yang salah Perbaiki pelacakan task ID di kode Anda
CAPCHA_NOT_READY (timeout) Solve terlalu lama Naikkan timeout polling; cek validitas sitekey

Kalau ERROR_NO_SLOT_AVAILABLE mendominasi, Anda menabrak batas thread. CaptchaAI menagih per thread bersamaan, bukan per solve — naik dari STANDARD ($30/bulan, 15 thread) ke ADVANCE ($90/bulan, 50 thread) menambah throughput tanpa biaya tambahan.

Langkah 3: pastikan sitekey dan parameter situs target

Penyebab tersering bukan di sisi API, melainkan sitekey atau struktur halaman target yang berubah. Buka target, aktifkan DevTools (F12), lalu cocokkan tiap parameter dengan kode Anda — selisih satu karakter menggagalkan semua solve:

  • reCAPTCHA: atribut data-sitekey atau pemanggilan grecaptcha.render
  • Cloudflare Turnstile: data-sitekey pada widget-nya
  • GeeTest: parameter gt di inisialisasinya
  • Tipe berpindah (reCAPTCHA v2→v3, reCAPTCHA→Turnstile, gambar→Enterprise): sesuaikan parameter method

Langkah 4: nilai kesehatan proxy

Kualitas proxy berpengaruh langsung ke tingkat penyelesaian, terutama untuk CAPTCHA berbasis token yang memakai proxy Anda.

Masalah proxy Gejala Solusi
Proxy diblokir target Token berhasil solve tapi ditolak Rotasi ke egress jaringan yang diotorisasi baru
Proxy mengembalikan error ERROR_PROXY_NOT_FOUND Verifikasi proxy masih hidup dan accessible
Proxy datacenter terdeteksi Tingkat penyelesaian menurun Beralih ke egress jaringan yang diotorisasi
Geo proxy tidak cocok Hasil tidak konsisten Samakan negara proxy dengan situs target

Untuk isolasi cepat, jalankan tanpa proxy dulu jika tipe CAPTCHA mendukung; kalau langsung pulih, proxy biang keroknya.

Langkah 5: periksa masa berlaku token

Token CAPTCHA hanya valid untuk waktu terbatas. Kalau pipeline terlalu lama antara menerima token dan mengirimkannya ke form, token keburu kedaluwarsa dan ditolak situs.

Jenis CAPTCHA Masa berlaku token
reCAPTCHA v2 ~120 detik
reCAPTCHA v3 ~120 detik
Cloudflare Turnstile ~300 detik
GeeTest v3 ~60 detik

Masalah ini sering muncul pada deployment dengan latency tinggi dan antrean internal panjang — lazim pada worker lintas region.

Perbaikan: ukur jeda antara getTaskResult dan pengiriman form. Jika lebih dari 60 detik, rampingkan pipeline.

Kapan waktunya menghubungi dukungan

Hubungi dukungan CaptchaAI jika:

  • Semua langkah diagnostik lolos tetapi tingkat penyelesaian tetap rendah
  • ERROR_CAPTCHA_UNSOLVABLE melebihi 20% pada sitekey yang sebelumnya normal
  • Saldo tampak benar tetapi solve tetap gagal
  • Masalah bertahan lebih dari 2 jam

Sertakan dalam laporan Anda:

  1. Jenis CAPTCHA dan sitekey
  2. URL situs target
  3. Distribusi error dari skrip diagnostik
  4. Kapan masalah mulai muncul
  5. Perubahan apa pun yang Anda buat pada kode

Pertanyaan umum

Bagaimana cara memastikan masalahnya di kode saya atau di CaptchaAI?

Jalankan skrip diagnostik pada sitekey yang tadinya normal. Kalau berhasil di situs uji tapi gagal di target, masalahnya di parameter atau situs target — bukan di layanan.

Berapa penurunan tingkat penyelesaian yang wajar sebelum perlu diselidiki?

Fluktuasi harian beberapa persen itu normal. Mulai selidiki jika tingkat penyelesaian turun lebih dari 5% dari baseline, atau tingkat error konsisten melewati 5%.

Apakah proxy datacenter menurunkan tingkat penyelesaian?

Bisa, terutama pada CAPTCHA berbasis token yang sensitif terhadap reputasi IP. Kalau hasilnya tidak stabil, uji tanpa proxy dulu untuk memastikan sumbernya.

Apakah menambah thread membantu saat tingkat penyelesaian turun karena rate limit?

Jika error dominannya ERROR_NO_SLOT_AVAILABLE, ya. Itu tanda semua thread Anda terpakai; menaikkan paket menambah thread bersamaan, dengan solve tanpa batas per thread.

Artikel terkait

Langkah selanjutnya

Jaga pipeline CAPTCHA Anda tetap sehat — ambil kunci API CaptchaAI Anda.

Panduan terkait:

Komentar dinonaktifkan untuk artikel ini.