Alasannya biasanya hanya dua: target yang dulu aman tiba-tiba memunculkan halaman Cloudflare Challenge, dan biaya per solve membengkak saat volume scraping naik. Anti-Captcha tetap layanan matang — persoalannya ada di dua titik itu. Perbandingan berikut memakai tiga sudut pandang: kode yang berubah, tipe yang tertangani, dan pergerakan biaya.
Ringkasnya: kapan pindah masuk akal
- Target Anda memunculkan Cloudflare Challenge, bukan sekadar widget Turnstile.
- Anda butuh BLS CAPTCHA untuk portal pemerintah atau janji temu visa.
- Anda ingin biaya bulanan datar, bukan tagihan yang mengikuti jumlah solve.
Format API: dari task JSON ke gaya 2Captcha
Perbedaan terbesar ada pada bentuk request. Anti-Captcha memakai task JSON:
# Anti-Captcha — custom JSON format
import requests
resp = requests.post("https://api.anti-captcha.com/createTask", json={
"clientKey": "ANTICAPTCHA_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com",
"websiteKey": "SITE_KEY",
}
})
task_id = resp.json()["taskId"]
# Poll with different endpoint and format
result = requests.post("https://api.anti-captcha.com/getTaskResult", json={
"clientKey": "ANTICAPTCHA_KEY",
"taskId": task_id,
})
CaptchaAI memakai format kompatibel 2Captcha lewat in.php dan res.php:
# CaptchaAI — standard 2Captcha-compatible format
import requests
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "SITE_KEY",
"pageurl": "https://example.com",
"json": 1,
})
task_id = resp.json()["request"]
# Standard polling
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "get",
"id": task_id,
"json": 1,
})
Alurnya identik — kirim, simpan task ID, polling, pakai token — hanya parameter dan endpoint yang berbeda. Karena format 2Captcha dipakai ratusan library, wrapper yang sudah ada umumnya cukup diganti base URL dan API key-nya.
BLS CAPTCHA untuk portal pemerintah
Otomatisasi portal pemerintah dan janji temu visa sering berhenti di BLS CAPTCHA:
# CaptchaAI — BLS with a high success rate
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "bls",
"pageurl": "https://bls-portal.example.com",
"sitekey": "BLS_SITE_KEY",
"json": 1,
})
Anti-Captcha tidak punya metode BLS.
Cakupan Cloudflare: Turnstile saja tidak cukup
Anti-Captcha menangani token Turnstile, tetapi tidak halaman Cloudflare Challenge penuh:
| Jenis Cloudflare | Anti-Captcha | CaptchaAI |
|---|---|---|
| Turnstile (managed) | ✅ | ✅ |
| Turnstile (invisible) | Sebagian | ✅ |
| Cloudflare Challenge | ❌ | ✅ |
Ini yang paling sering menjatuhkan job yang tadinya stabil: situs mengaktifkan mode challenge, worker menerima HTML interstitial, dan parser mengembalikan nol baris.
Kualitas skor reCAPTCHA v3 dan posisi GeeTest
Skor v3 rendah memicu verifikasi tambahan di sisi situs, dan pendekatan berbantuan manusia cenderung menghasilkan skor naik-turun.
Angka berikut bersumber dari pengamatan dan laporan pengguna. Hasil dapat berbeda tergantung lingkungan, volume, dan waktu pengujian.
| Penyedia | Rata-rata skor v3 | Kontrol skor |
|---|---|---|
| Anti-Captcha | 0.3–0.5 | Terbatas |
CaptchaAI mendukung GeeTest v3 lewat method=geetest. GeeTest v4 belum didukung — statusnya masih "segera hadir".
Perbandingan fitur
| Fitur | Anti-Captcha | CaptchaAI |
|---|---|---|
| reCAPTCHA v2 | ✅ | ✅ |
| reCAPTCHA v3 | ✅ (skor rendah) | ✅ Kontrol skor |
| reCAPTCHA Enterprise dan invisible | ✅ | ✅ |
| Turnstile | ✅ | ✅ |
| Cloudflare Challenge | ❌ | ✅ |
| GeeTest v3 | ✅ | ✅ |
| GeeTest v4 | Ya | ❌ (segera hadir) |
| hCaptcha | Ya | ❌ belum didukung |
| FunCaptcha (Arkose Labs) | Ya | ❌ belum didukung |
| BLS | ❌ | ✅ |
| Gambar/OCR | ✅ | ✅ 27.500+ varian |
| Format API | JSON khusus | Kompatibel 2Captcha |
| Dukungan proxy dan callback | ✅ | ✅ |
Kalau beban kerja Anda didominasi hCaptcha atau FunCaptcha, CaptchaAI bukan penggantinya.
Kecepatan penyelesaian
Kolom CaptchaAI adalah batas atas resmi per tipe, bukan rata-rata:
| Jenis CAPTCHA | Anti-Captcha | CaptchaAI |
|---|---|---|
| reCAPTCHA v2 | 15–45 detik | <60 detik |
| reCAPTCHA v3 | 10–30 detik | <4 detik |
| Gambar CAPTCHA | 5–15 detik | <0.5 detik |
| Turnstile | 10–30 detik | <10 detik |
| GeeTest v3 | 15–40 detik | <12 detik |
Pada worker di AWS ap-southeast-1 (Singapura) atau ap-southeast-3 (Jakarta), latensi jaringan kecil sehingga waktu penyelesaian jadi faktor dominan — sesuaikan batas waktu polling dengan kolom kanan.
Biaya: per solve vs berbasis thread
Untuk freelancer dan agensi price-monitoring di Indonesia yang marginnya ketat, ini bagian paling menentukan. Anti-Captcha menagih per solve, jadi biaya mengikuti volume harian. CaptchaAI menagih per thread bersamaan, solve tanpa batas per thread: BASIC ($15/bulan, 5 thread), lalu ADVANCE ($90/bulan, 50 thread) saat job berjalan paralel.
Wrapper transisi untuk dua penyedia
Selama peralihan, jaga kedua penyedia di balik satu antarmuka:
import requests
import time
class CaptchaSolver:
"""Unified solver — supports Anti-Captcha and CaptchaAI."""
def __init__(self, provider="captchaai", api_key="YOUR_API_KEY"):
self.provider = provider
self.api_key = api_key
def solve_recaptcha_v2(self, sitekey, pageurl):
if self.provider == "captchaai":
return self._solve_captchaai("userrecaptcha", sitekey, pageurl)
else:
return self._solve_anticaptcha(sitekey, pageurl)
def _solve_captchaai(self, method, sitekey, pageurl):
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": self.api_key,
"method": method,
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1,
})
task_id = resp.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": self.api_key, "action": "get",
"id": task_id, "json": 1,
})
data = result.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Solve timeout")
def _solve_anticaptcha(self, sitekey, pageurl):
resp = requests.post("https://api.anti-captcha.com/createTask", json={
"clientKey": self.api_key,
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": pageurl,
"websiteKey": sitekey,
},
})
task_id = resp.json()["taskId"]
for _ in range(60):
time.sleep(5)
result = requests.post(
"https://api.anti-captcha.com/getTaskResult",
json={"clientKey": self.api_key, "taskId": task_id},
)
data = result.json()
if data["status"] == "ready":
return data["solution"]["gRecaptchaResponse"]
raise TimeoutError("Solve timeout")
Proyek baru pakai provider="captchaai"; proyek lama cukup ubah parameter konstruktor.
Masalah umum saat migrasi
| Masalah | Sebab | Perbaikan |
|---|---|---|
| Request ditolak | Anti-Captcha memakai task JSON | Kirim form data ke in.php |
Field method tidak ada |
Anti-Captcha memakai type di dalam task |
Ganti ke method=userrecaptcha |
| Polling tidak mengembalikan hasil | Endpoint hasil berbeda | Pakai GET ke res.php dengan action=get |
| Nama tipe task tidak dikenali | Penamaan metode berbeda | Pakai userrecaptcha, turnstile, bls |
Pertanyaan yang sering muncul
Berapa lama migrasi kode dari Anti-Captcha biasanya memakan waktu?
Untuk satu integrasi reCAPTCHA v2, umumnya 15–30 menit: ganti endpoint, ubah payload jadi form data, sesuaikan pembacaan respons polling.
Bagaimana status hCaptcha dan FunCaptcha di CaptchaAI?
Belum. Kedua tipe itu tidak didukung, begitu pula GeeTest v4. Beban kerja yang bertumpu di sana tetap memerlukan layanan lain.
Bisakah saya menjalankan kedua layanan bersamaan selama transisi?
Bisa, dan itu cara paling aman: wrapper di atas membandingkan keberhasilan keduanya pada trafik yang sama. Parameter proxy dan proxytype tetap tersedia.
Bagaimana cara memperkirakan jumlah thread yang saya butuhkan?
Hitung dari solve yang berjalan bersamaan pada jam puncak, bukan total bulanan. Satu thread menangani satu CAPTCHA, lalu mengambil antrean berikutnya.
Panduan Terkait
Uji satu target Cloudflare Challenge milik Anda — ambil API key CaptchaAI dan bandingkan hasilnya dengan integrasi sekarang.