Troubleshooting

Kesalahan Koordinat Grid Image CAPTCHA: Diagnosis dan Perbaikan

Task grid image CAPTCHA Anda balik dengan status sukses, tapi klik automation jatuh di kotak yang salah? Penyebabnya nyaris selalu satu dari empat hal: parameter grid_size yang tidak cocok dengan CAPTCHA asli, gambar yang sudah ter-crop atau resize, teks instructions yang meleset dari kata di CAPTCHA, atau indeks sel yang masih dibaca 0-based padahal CaptchaAI selalu mengembalikan 1-based. Artikel ini membedah keempatnya satu per satu, lengkap kode Python untuk mendiagnosis dan memperbaikinya.


Cara CaptchaAI Menentukan Nomor Sel Grid

CaptchaAI membaca grid image yang Anda kirim, menganalisis tiap sel, lalu mengembalikan array indeks yang cocok dengan instructions. Penomoran sel mengikuti urutan baca standar — kiri ke kanan, atas ke bawah:

3×3 Grid:          4×4 Grid:
1 2 3              1  2  3  4
4 5 6              5  6  7  8
7 8 9              9  10 11 12
                   13 14 15 16

Responsnya berbentuk array seperti [1, 3, 6, 9] — artinya sel 1, 3, 6, dan 9 berisi objek yang diminta instruksi.


Kenapa Kombinasi Error Ini Sering Muncul di Tim Scraping Indonesia

Tim automation dan price-monitoring lepas di Indonesia — banyak yang mengerjakan proyek lewat Upwork atau Sribulancer — biasanya menjalankan worker scraping di server yang di-deploy ke region seperti AWS ap-southeast-1 (Singapura) atau GCP asia-southeast2 (Jakarta) demi latensi rendah ke API CaptchaAI. Kombinasi jaringan yang tidak selalu stabil dan volume task tinggi bikin tiga dari empat penyebab di bagian bawah ini — grid_size yang salah begitu target berganti, screenshot ter-crop karena render belum selesai, dan instructions yang tidak sinkron dengan CAPTCHA yang aktif — jauh lebih sering muncul dibanding di lingkungan development lokal.

Sebelum menyalahkan CaptchaAI, cek dulu tiga hal ini:

  • Apakah grid_size yang dikirim memang hasil deteksi otomatis, bukan nilai hardcode dari CAPTCHA sebelumnya?
  • Apakah gambar diambil dari elemen iframe, bukan screenshot halaman penuh yang mungkin belum selesai render?
  • Apakah teks instructions disalin persis dari CAPTCHA yang sedang diproses, bukan dari cache task sebelumnya?

Penyebab Koordinat Grid Salah dan Cara Memperbaikinya

Parameter grid_size Tidak Cocok dengan CAPTCHA Asli

Ini penyebab paling sering muncul. Kalau CAPTCHA yang dirender adalah grid 4×4 tapi kode Anda mengirim grid_size=3x3, seluruh penomoran sel bergeser dan CaptchaAI memilih tile yang salah.

# WRONG — 4×4 grid sent as 3×3
data = {
    "key": "YOUR_API_KEY",
    "method": "post",
    "grid_size": "3x3",      # Wrong!
    "img_type": "recaptcha",
    "instructions": "traffic lights",
    "json": 1
}

# CORRECT — match the actual grid
data = {
    "key": "YOUR_API_KEY",
    "method": "post",
    "grid_size": "4x4",      # Correct
    "img_type": "recaptcha",
    "instructions": "traffic lights",
    "json": 1
}

Deteksi grid_size secara otomatis, jangan hardcode

from PIL import Image

img = Image.open("grid_captcha.png")
width, height = img.size

# reCAPTCHA grids are square. 3×3 tiles are ~100px each, 4×4 tiles are ~75px each
tile_width = width // 3
if width % 4 == 0 and (width // 4) < 100:
    grid_size = "4x4"
else:
    grid_size = "3x3"

print(f"Detected grid size: {grid_size}")

Screenshot Grid Ter-crop atau Ter-resize

Mengirim gambar yang sudah dipotong, di-resize, atau berupa screenshot satu halaman penuh mengubah alignment grid — CaptchaAI butuh gambar CAPTCHA asli, persis seperti yang dirender di browser.

Cara mengambil screenshot grid yang benar

Ambil elemen gambar langsung dari iframe reCAPTCHA, bukan screenshot dari seluruh halaman.

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")

# Switch to reCAPTCHA iframe
iframe = driver.find_element(By.CSS_SELECTOR, 'iframe[title*="recaptcha"]')
driver.switch_to.frame(iframe)

# Get the grid image element
grid_img = driver.find_element(By.CSS_SELECTOR, "img.rc-image-tile-wrapper img")
grid_img.screenshot("grid_captcha.png")  # Captures just the grid, not the whole page

Teks instructions Tidak Sama Persis dengan CAPTCHA

Nilai instructions yang Anda kirim harus sama persis dengan kata yang diminta CAPTCHA. Instruksi yang terlalu umum bikin CaptchaAI salah menafsirkan sel target.

# WRONG — too vague
data["instructions"] = "select images"

# CORRECT — specific instruction from the CAPTCHA
data["instructions"] = "crosswalks"

Instruksi yang sering dipakai

  • crosswalks, traffic lights, cars, buses
  • motorcycles, bicycles, fire hydrants
  • stairs, bridges, parking meters

Indeks Sel Meleset Satu Angka (0-based vs 1-based)

CaptchaAI selalu mengembalikan indeks sel berbasis 1. Kalau kode automation Anda memakai 0-based indexing — lazim di Selenium/Puppeteer — kurangi setiap angka dengan 1 sebelum dipakai untuk klik.

import json

# CaptchaAI returns 1-based indices
solution = json.loads(result["request"])  # e.g., [1, 3, 6, 9]

# Convert to 0-based for Selenium click automation
zero_based = [cell - 1 for cell in solution]

# Click grid cells using 0-based index
tiles = driver.find_elements(By.CSS_SELECTOR, ".rc-image-tile-wrapper img")
for idx in zero_based:
    tiles[idx].click()

Format File Ditolak dengan ERROR_WRONG_FILE_EXTENSION

Format gambar yang diterima CaptchaAI:

  • JPG / JPEG
  • PNG
  • GIF

Kirim format lain — WebP dari screenshot browser modern jadi penyebab paling sering — dan Anda dapat ERROR_WRONG_FILE_EXTENSION.

# WRONG — WebP or BMP
files = {"file": open("grid.webp", "rb")}  # Not supported

# CORRECT — convert to PNG first
from PIL import Image
img = Image.open("grid.webp")
img.save("grid.png", "PNG")
files = {"file": open("grid.png", "rb")}

Alur Diagnosis Cepat

Kalau tidak yakin harus mulai dari mana, ikuti urutan ini dari atas ke bawah:

Grid cells are wrong
    ↓
Is grid_size correct (3x3 or 4x4)? → No → Fix grid_size parameter
    ↓ Yes
Is the image the original CAPTCHA (not cropped)? → No → Capture directly from iframe
    ↓ Yes
Is instruction text specific? → No → Use exact CAPTCHA instruction text
    ↓ Yes
Using 1-based indexing for clicks? → No → Convert solution to 0-based
    ↓ Yes
Image in supported format (JPG/PNG)? → No → Convert image format
    ↓ Yes
Report tiles to CaptchaAI via reportbad

Lapor Balik Kalau Koordinat Tetap Salah

Laporkan solusinya lewat reportbad kalau:

  • Semua parameter di atas (grid_size, gambar, instructions, indeks) sudah benar
  • Koordinat yang dikembalikan tetap konsisten meleset, bukan cuma sesekali
requests.get("https://ocr.captchaai.com/res.php", params={
    "key": "YOUR_API_KEY",
    "action": "reportbad",
    "id": task_id,
    "json": 1
})

Melaporkan solusi yang salah membantu CaptchaAI menelusuri dan memperbaiki akurasi untuk pola sel semacam itu, dan pada sebagian kasus biaya solve yang gagal bisa dikembalikan — tapi ini bukan pengganti mengecek keempat penyebab di atas lebih dulu.


Pertanyaan Umum seputar Koordinat Grid Image CAPTCHA

Bagaimana cara memvalidasi ukuran grid secara otomatis, tanpa hardcode?

Baca dimensi gambar dengan PIL, lalu:

  • Bandingkan lebar tiap tile — grid 3×3 biasanya berukuran ubin ~100px, grid 4×4 ~75px
  • Cocokkan hasilnya dengan parameter grid_size sebelum dikirim ke API, persis seperti fungsi deteksi di bagian atas artikel ini

Kenapa ERROR_CAPTCHA_UNSOLVABLE tetap muncul walau grid_size sudah benar?

Biasanya karena kualitas gambar rendah, teks instructions tidak sesuai, atau gambar bukan grid CAPTCHA yang bisa dikenali. Cek dulu apakah gambar yang dikirim benar-benar utuh dan belum ter-crop sebelum menuduh parameter lain.

Apakah biaya solve dikembalikan kalau saya melaporkan koordinat salah lewat reportbad?

Pada sebagian kasus ya — reportbad membantu CaptchaAI menelusuri solusi yang keliru, dan solve yang terbukti salah bisa mendapat pengembalian biaya. Ini bukan jaminan otomatis untuk setiap laporan yang dikirim.

Apa penyebab paling sering screenshot grid ter-crop saat scraping di server?

Paling sering: mengambil screenshot dari seluruh halaman alih-alih elemen iframe reCAPTCHA saja, atau viewport belum selesai render saat screenshot diambil — kondisi yang lebih umum terjadi pada koneksi lambat atau deployment lintas region. Ambil gambar langsung dari elemen img.rc-image-tile-wrapper img, bukan dari halaman penuh.

Indeks sel dari CaptchaAI mulai dari 0 atau 1?

Selalu 1-based. Kalau framework automation Anda — misalnya find_elements di Selenium — memakai 0-based indexing, kurangi setiap angka pada array solusi dengan 1 sebelum dipakai untuk klik.


Panduan Terkait

Checklist Sebelum Submit Jawaban Grid

  • Cocokkan dimensi grid dengan jumlah sel yang benar-benar diharapkan sebelum mengirim jawaban apa pun.
  • Normalisasi scaling gambar dan viewport supaya koordinat klik tidak meleset akibat zoom browser atau perubahan device pixel ratio.
  • Tolak respons yang indeks-nya di luar rentang grid yang dinyatakan — jangan diam-diam meneruskan koordinat yang jelas salah.
Komentar dinonaktifkan untuk artikel ini.