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_sizeyang 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
instructionsdisalin 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,busesmotorcycles,bicycles,fire hydrantsstairs,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_sizesebelum 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
- Tutorial lengkap solve Grid Image CAPTCHA lewat API
- Semua kode error CaptchaAI dan artinya
- Kenapa jawaban Image CAPTCHA sering salah — dan cara memperbaikinya
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.