Solve grid image CAPTCHA bisa gagal karena kualitas gambar, ketidakcocokan format, atau penerapan solusi yang salah. Berikut error paling umum dan cara mengatasinya.
Error Pengiriman Gambar
ERROR_WRONG_FILE_EXTENSION
Penyebab: File yang diupload bukan format gambar yang valid.
Perbaikan:
- Gunakan format PNG atau JPEG saja
- Pastikan string base64 dikodekan dengan benar
- Hapus prefix
data:image/...;base64,sebelum mengirim
# WRONG — includes data URI prefix
body = "data:image/png;base64,iVBORw0KGgo..."
# CORRECT — raw base64 only
body = "iVBORw0KGgo..."
ERROR_TOO_BIG_CAPTCHA_FILESIZE
Penyebab: Gambar melebihi ukuran file maksimum (biasanya 600KB). Perbaikan:
from PIL import Image
import io
import base64
# Resize if too large
img = Image.open("captcha.png")
if img.width > 600:
ratio = 600 / img.width
img = img.resize((600, int(img.height * ratio)), Image.LANCZOS)
buffer = io.BytesIO()
img.save(buffer, format="PNG")
b64 = base64.b64encode(buffer.getvalue()).decode()
ERROR_ZERO_CAPTCHA_FILESIZE
Penyebab: File kosong atau ekstraksi gambar gagal.
Perbaikan:
- Verifikasi elemen gambar sudah dimuat sebelum mengekstraksi
- Periksa apakah atribut
srctidak kosong - Tunggu lazy-loaded image
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Wait for image to load
WebDriverWait(driver, 10).until(
lambda d: d.find_element(By.CSS_SELECTOR, ".captcha img").get_attribute("complete") == "true"
)
Error Saat Solving
ERROR_CAPTCHA_UNSOLVABLE
Penyebab: Gambar terlalu buram, terdistorsi, atau objek tidak dapat dikenali.
Perbaikan:
- Ambil gambar dengan resolusi penuh — jangan perkecil
- Pastikan tidak ada overlay atau watermark yang mengaburkan grid
- Coba lagi dengan captcha baru (beberapa challenge pada dasarnya ambigu)
Sel yang Salah Teridentifikasi
Penyebab: Kualitas gambar rendah atau pengambilan sebagian.
Perbaikan:
- Screenshot seluruh elemen captcha, termasuk border
- Jangan crop terlalu rapat — sertakan beberapa piksel margin
- Verifikasi dengan menyimpan gambar yang diambil dan memeriksa secara manual
# Take a proper element screenshot
captcha_el = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
captcha_el.screenshot("debug_captcha.png")
# Open and check manually
from PIL import Image
Image.open("debug_captcha.png").show()
Error Penerapan Solusi
Error Index Off-by-One
Penyebab: Ketidakcocokan antara respons API berbasis 1 dan pengindeksan array berbasis 0.
# API returns "1,3,5" (1-based)
solution = "1,3,5"
indices = [int(i) for i in solution.split(",")]
# DON'T: use directly as array index
# cells[1], cells[3], cells[5] ← WRONG (off by one)
# DO: convert to 0-based
for idx in indices:
cells[idx - 1].click() # 1→0, 3→2, 5→4
Sel Tidak Merespons Klik
Penyebab: Target klik salah — overlay, iframe, atau shadow DOM.
Perbaikan:
# Check if captcha is in an iframe
iframes = driver.find_elements(By.TAG_NAME, "iframe")
for iframe in iframes:
if "captcha" in iframe.get_attribute("src").lower():
driver.switch_to.frame(iframe)
break
# Now find and click cells
cells = driver.find_elements(By.CSS_SELECTOR, ".grid-cell")
Grid Dinamis — Tile Berubah Setelah Diklik
Penyebab: Grid dinamis bergaya reCAPTCHA mengganti tile.
Perbaikan: Gunakan metode token daripada metode gambar untuk reCAPTCHA:
# Token method handles dynamic grids automatically
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "SITE_KEY",
"pageurl": "https://example.com",
"json": 1
})
Error Timeout
Captcha Kedaluwarsa Sebelum Solusi Kembali
Penyebab: Grid CAPTCHA biasanya kedaluwarsa dalam 2–3 menit.
Perbaikan:
- Submit gambar segera setelah pengambilan
- Jika solve membutuhkan lebih dari 60 detik, refresh dan coba lagi
CAPCHA_NOT_READY Terus Berputar
Penyebab: Task mungkin gagal secara diam-diam.
Perbaikan: Tetapkan jumlah percobaan ulang maksimum dan tangani kegagalan:
for attempt in range(30):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") not in ["CAPCHA_NOT_READY"]:
break # Actual error, stop polling
raise Exception("Grid captcha solve failed — refresh and retry")
Checklist Debug
| Periksa | Tindakan |
|---|---|
| Format gambar? | PNG atau JPEG, dikodekan dengan benar |
| Ukuran gambar? | Di bawah 600KB |
| Grid penuh tertangkap? | Sertakan seluruh grid dengan margin |
| Kualitas gambar? | Jelas, tidak buram atau diperkecil |
| Format solusi? | Parse indeks yang dipisahkan koma dengan benar |
| Basis indeks? | Konversikan basis-1 ke basis-0 untuk array |
| Konteks iframe? | Switch ke captcha iframe jika ada |
| Captcha sudah kedaluwarsa? | Submit segera setelah ditangkap |
Pertanyaan Umum
Format gambar apa yang memberikan hasil terbaik?
PNG memberikan hasil terbaik karena lossless. JPEG berfungsi tetapi kompresi berat dapat mengaburkan batas sel dan mengurangi akurasi.
Haruskah saya menyertakan teks instruksi dengan grid image?
Untuk method=post dengan recaptcha=1, instruksi tidak diperlukan — solver mengidentifikasi objek secara visual. Untuk method=bls, selalu sertakan teks instruksi.
Bisakah saya solve beberapa grid CAPTCHA secara paralel?
Ya. Setiap solve bersifat independen. Submit beberapa task dan polling masing-masing secara terpisah.
Bagaimana jika grid memiliki dimensi non-standar?
CaptchaAI menganalisis gambar apa adanya. Grid non-standar (misalnya, 5×3, 2×4) ditangani berdasarkan analisis visual, bukan asumsi grid tetap.
Panduan terkait
- Cara Mengatasi Grid Image CAPTCHA Secara Otomatis
- Bagaimana Tantangan Grid Image CAPTCHA Bekerja
- Referensi Kode Kesalahan CaptchaAI