Tutorial API

Cara Solve Grid Image CAPTCHA Secara Otomatis

Grid image CAPTCHA menampilkan gambar besar yang dibagi menjadi beberapa sel grid (biasanya 3×3 atau 4×4) dan meminta pengguna memilih sel yang cocok dengan deskripsi. Meski reCAPTCHA menggunakan format ini, banyak situs juga menggunakan custom grid challenge yang bukan bagian dari sistem Google.

Panduan ini mencakup cara solve non-reCAPTCHA grid image challenge menggunakan endpoint method=grid CaptchaAI.


Prasyarat

Item Nilai
API key CaptchaAI Dari captchaai.com
Gambar grid Screenshot atau base64 dari grid penuh
Bahasa Python 3.7+ atau Node.js 14+

Langkah 1: Ambil gambar grid

Metode A: Screenshot elemen captcha

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

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

# Screenshot just the captcha container
captcha_element = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
captcha_element.screenshot("captcha_grid.png")

Metode B: Ekstrak gambar dari atribut src

import base64
import requests

captcha_img = driver.find_element(By.CSS_SELECTOR, ".grid-captcha img")
src = captcha_img.get_attribute("src")

if src.startswith("data:image"):
    image_b64 = src.split(",")[1]
else:
    image_data = requests.get(src).content
    image_b64 = base64.b64encode(image_data).decode()

Langkah 2: Kirimkan gambar ke CaptchaAI

Menggunakan unggahan file (Python)

import requests
import time

API_KEY = "YOUR_API_KEY"

with open("captcha_grid.png", "rb") as f:
    response = requests.post("https://ocr.captchaai.com/in.php",
        data={
            "key": API_KEY,
            "method": "post",
            "recaptcha": 1,
            "json": 1
        },
        files={"file": f}
    )

data = response.json()
task_id = data["request"]
print(f"Task: {task_id}")

Menggunakan base64 (Python)

response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "post",
    "body": image_b64,
    "recaptcha": 1,
    "json": 1
})

task_id = response.json()["request"]

Node.js

const axios = require('axios');
const fs = require('fs');

async function submitGridCaptcha(imagePath) {
  const imageB64 = fs.readFileSync(imagePath).toString('base64');

  const { data } = await axios.post('https://ocr.captchaai.com/in.php', null, {
    params: {
      key: 'YOUR_API_KEY',
      method: 'post',
      body: imageB64,
      recaptcha: 1,
      json: 1
    }
  });

  return data.request;
}

Langkah 3: Poll Solusi

def get_grid_solution(task_id):
    for _ 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") != "CAPCHA_NOT_READY":
            raise Exception(f"Error: {result['request']}")

    raise Exception("Timeout")

solution = get_grid_solution(task_id)
print(f"Solution: {solution}")
# Returns click coordinates or cell indices

Langkah 4: Terapkan solusinya

Klik berdasarkan indeks sel

# If solution returns cell indices (e.g., "2,5,6")
selected = [int(i) for i in solution.split(",")]
cells = driver.find_elements(By.CSS_SELECTOR, ".grid-cell")

for idx in selected:
    cells[idx - 1].click()
    time.sleep(0.2)

driver.find_element(By.CSS_SELECTOR, ".verify-button").click()

Klik berdasarkan koordinat

from selenium.webdriver.common.action_chains import ActionChains

# If solution returns coordinates (e.g., "x=120,y=80;x=250,y=200")
captcha_element = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
actions = ActionChains(driver)

for coord in solution.split(";"):
    parts = dict(p.split("=") for p in coord.split(","))
    x, y = int(parts["x"]), int(parts["y"])
    actions.move_to_element_with_offset(captcha_element, x, y).click()

actions.perform()

Pemecahan Masalah

Error Penyebab Solusi
ERROR_WRONG_FILE_EXTENSION Format gambar tidak valid Gunakan PNG atau JPEG; verifikasi base64 valid
ERROR_CAPTCHA_UNSOLVABLE Gambar terlalu kecil atau buram Ambil gambar dengan resolusi penuh
Sel yang salah dipilih Ketidakcocokan format solusi Periksa apakah solusi berupa indeks vs koordinat
ERROR_TOO_BIG_CAPTCHA_FILESIZE Gambar melebihi batas ukuran Resize di bawah 600KB

Contoh lengkap yang dapat dijalankan

Butuh proyek kerja lengkap dengan pengaturan lingkungan, polling, percobaan ulang, dan penanganan kesalahan?

Lihat contoh lengkap yang dapat dijalankan di GitHub →


Pertanyaan Umum

Kapan menggunakan grid solve vs token solve?

Gunakan token solve (method=userrecaptcha) untuk reCAPTCHA standar — lebih sederhana dan lebih andal. Gunakan grid solve (method=post dengan recaptcha=1) untuk non-reCAPTCHA grid challenge atau standalone image grid.

Ukuran grid apa yang didukung?

CaptchaAI menangani grid 3×3, 4×4, dan tata letak non-standar. Gambar dianalisis secara keseluruhan, terlepas dari struktur grid-nya.

Seberapa akurat grid solve?

Akurasi tergantung pada kualitas gambar. Gambar beresolusi tinggi dan jernih memberikan hasil terbaik. Waktu solve rata-rata 15–30 detik.

Bisakah saya solve dynamic grid yang tile-nya berubah?

Untuk dynamic reCAPTCHA grid (tile yang diklik diganti), gunakan metode token (method=userrecaptcha). Metode grid hanya solve satu gambar statis.


Panduan Terkait

  • Error dan Perbaikan Grid Image CAPTCHA Umum
Komentar dinonaktifkan untuk artikel ini.