Pemecahan Masalah

Kesalahan dan Perbaikan Umum Grid Image CAPTCHA

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 src tidak 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

Komentar dinonaktifkan untuk artikel ini.