Tutorial API

Cara Solve reCAPTCHA v2 dengan API

reCAPTCHA v2 masih jadi salah satu rintangan paling umum di alur login, registrasi, checkout, dan submit form. Jika otomasi Anda menabrak checkbox atau image challenge reCAPTCHA v2, Anda bisa solve-nya via API dalam empat langkah: ekstrak sitekey dan pageurl dari halaman, kirim ke CaptchaAI reCAPTCHA v2 solver, tunggu hasilnya, lalu inject token ke alur yang dilindungi.

Panduan ini ditujukan untuk developer yang butuh integrasi yang jalan, bukan tinjauan teori.

Belum yakin versi reCAPTCHA-nya? Baca dulu Cara Mengenali Versi reCAPTCHA.


Yang dibutuhkan sebelum mulai

Kebutuhan Detail
API key CaptchaAI Ambil dari captchaai.com/api.php. 32 karakter.
URL halaman lengkap URL persis tempat widget reCAPTCHA v2 dimuat.
sitekey Kunci publik widget di halaman tersebut.
HTTP client requests, axios, fetch, curl — bebas.
Thread aktif Akun harus punya thread tersedia.

Langkah 1: ekstrak sitekey dan pageurl

pageurl adalah URL lengkap halaman tempat reCAPTCHA muncul. Selalu sertakan https://.

Tiga cara dapat sitekey:

1. Dari HTML — cari <div class="g-recaptcha" data-sitekey="...">:

<div class="g-recaptcha" data-sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"></div>

2. Dari URL iframehttps://www.google.com/recaptcha/api2/anchor?ar=1&k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&... — parameter k= adalah sitekey.

3. Dari traffic jaringan — DevTools → Network, filter recaptcha, parameter k muncul di request mana pun.


Langkah 2: kirim task

import requests

API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://staging.example.com/qa-login"

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": SITEKEY,
    "pageurl": PAGEURL,
    "json": 1,
}).json()

assert submit["status"] == 1, submit
task_id = submit["request"]
print("task id:", task_id)

Versi Node.js:

const r = await fetch("https://ocr.captchaai.com/in.php", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: new URLSearchParams({
    key: API_KEY,
    method: "userrecaptcha",
    googlekey: SITEKEY,
    pageurl: PAGEURL,
    json: "1",
  }),
});
const { status, request: taskId } = await r.json();
if (status !== 1) throw new Error(taskId);

reCAPTCHA invisible? Tambah invisible=1. Detail di Cara Kerja reCAPTCHA Invisible.


Langkah 3: polling hasil

reCAPTCHA v2 biasanya butuh 15–60 detik. Tunggu 20 detik, lalu polling tiap 5 detik.

import time

time.sleep(20)
while True:
    res = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if res.get("request") == "CAPCHA_NOT_READY":
        time.sleep(5)
        continue

    if res.get("status") == 1:
        token = res["request"]
        print("token:", token[:60], "…")
        break

    raise RuntimeError(res)

Token yang dikembalikan adalah string panjang, biasanya diawali 03AGdBq25....


Langkah 4: injeksikan token ke halaman

Cara tergantung situs. Yang paling umum: textarea g-recaptcha-response:

document.querySelector('textarea[name="g-recaptcha-response"]').value = token;
document.querySelector("form").submit();

Selenium:

driver.execute_script(
    "document.querySelector('[name=\"g-recaptcha-response\"]').value = arguments[0];",
    token,
)
driver.find_element(By.CSS_SELECTOR, "form").submit()

Playwright:

await page.evaluate((t) => {
  document.querySelector('[name="g-recaptcha-response"]').value = t;
}, token);
await page.click('button[type="submit"]');

Jika widget punya data-callback, panggil juga fungsinya:

const callback = document.querySelector(".g-recaptcha").dataset.callback;
if (callback && window[callback]) window[callback](token);

Contoh lengkap (Python)

import time
import requests

API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://staging.example.com/qa-login"

def solve_recaptcha_v2():
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": SITEKEY, "pageurl": PAGEURL, "json": 1,
    }).json()
    if submit["status"] != 1:
        raise RuntimeError(submit)
    task_id = submit["request"]

    time.sleep(20)
    for _ in range(40):
        res = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id, "json": 1,
        }).json()
        if res.get("request") == "CAPCHA_NOT_READY":
            time.sleep(5)
            continue
        if res.get("status") == 1:
            return res["request"]
        raise RuntimeError(res)
    raise TimeoutError("solve timed out")

if __name__ == "__main__":
    token = solve_recaptcha_v2()
    print("token:", token[:80])

Error umum dan solusinya

Error Penyebab Tindakan
ERROR_GOOGLEKEY sitekey kosong/salah Ekstrak ulang sitekey dari halaman saat ini
ERROR_PAGEURL pageurl hilang Kirim URL lengkap dengan skema
ERROR_ZERO_BALANCE Tidak ada thread Top up atau tunggu thread bebas
ERROR_CAPTCHA_UNSOLVABLE Situs memperketat tantangan Coba lagi setelah beberapa detik; lihat error umum saat memecahkan reCAPTCHA v2
Situs menolak token Token kedaluwarsa Pakai dalam ~110 detik setelah diterima

Saat tidak ada yang jalan

  • Token sudah ada, situs tetap memblokir — form punya handler sendiri. Cari callback dan panggil, jangan hanya isi textarea.
  • Wajib pertahankan sinyal browser sama — kirim cookie dan User-Agent yang sama saat token diminta.
  • reCAPTCHA bergantung proxy — tambahkan proxy dan proxytype di submit agar solver pakai pool IP Anda.

Langkah selanjutnya

  • CaptchaAI Quickstart: Pemecahan CAPTCHA Pertama Anda dalam 5 Menit
  • How To Identify Recaptcha Version
  • Cara Menyelesaikan Cloudflare Turnstile dengan API
  • Kesalahan dan Perbaikan Umum Penyelesaian reCAPTCHA v2
Komentar dinonaktifkan untuk artikel ini.