Troubleshooting

ERROR_WRONG_GOOGLEKEY: Panduan Diagnosis dan Perbaikan

Jika request solve Anda dibalas ERROR_WRONG_GOOGLEKEY, sitekey yang dikirim lewat parameter googlekey tidak cocok dengan yang benar-benar dimuat halaman target. Hampir selalu akar masalahnya ada di langkah ekstraksi sitekey, bukan di API-nya. Perbaikannya cepat: ambil sitekey yang tepat, cocokkan tipe reCAPTCHA-nya, lalu validasi formatnya sebelum kirim.

Poin pentingnya, CaptchaAI memvalidasi pasangan googlekey + pageurl terhadap halaman aslinya. Kalau salah satunya meleset — sitekey basi, key dari iframe pihak ketiga, atau tipe reCAPTCHA keliru dikenali — Anda dapat balasan error ini, bukan token. Jadi sebelum menyalahkan API, telusuri dulu dari mana sitekey itu Anda ambil.


Diagnosis cepat sebelum menyalahkan API

Sebelum menyentuh kode solve, jalankan tiga cek ini berurutan:

  1. Buka source halaman target dan pastikan sitekey yang Anda kirim benar-benar ada di sana, bukan hasil salin dari dokumentasi atau tab lama.
  2. Cek tipe reCAPTCHA-nya: apakah halaman memuat recaptcha/enterprise.js (Enterprise) atau memakai data-size="invisible" (invisible)? Keduanya butuh parameter tambahan.
  3. Pastikan sitekey diambil dari halaman yang sama dengan pageurl yang Anda kirim — bukan dari iframe, subdomain, atau CDN.

Sembilan dari sepuluh kasus selesai di langkah pertama. Tabel berikut memetakan sisa penyebabnya.

Tip: kerjakan tiga cek ini secara manual di browser dulu untuk satu URL contoh sebelum menuang logikanya ke worker. Menemukan sitekey yang salah dengan mata jauh lebih cepat daripada men-debug ratusan task yang gagal.


Kenapa error ini muncul

Penyebab Cara mengenalinya
Sitekey yang diekstraksi salah Key tidak cocok dengan source halaman
Sitekey Enterprise dikirim sebagai standar Perlu parameter enterprise=1
Mismatch reCAPTCHA invisible Perlu parameter invisible=1
Sitekey dinamis berubah Key di-rotate setelah ekstraksi
Sitekey dari halaman yang salah Diambil dari iframe atau domain lain
Sitekey lama yang di-hardcode Key dulu valid, sekarang tidak

Perhatikan bahwa pageurl juga ikut diperiksa: sitekey yang benar tapi diambil dari halaman yang salah tetap ditolak, karena CaptchaAI mencocokkan keduanya sebagai satu pasangan.


Cara mengambil sitekey yang benar

Metode 1: baca langsung dari source halaman

Untuk reCAPTCHA di HTML awal, fungsi ini mencoba empat pola umum:

import re
import requests


def extract_sitekey(page_url):
    """Extract reCAPTCHA sitekey from page source."""
    resp = requests.get(page_url, timeout=15)
    html = resp.text

    # Pattern 1: data-sitekey attribute
    match = re.search(r'data-sitekey="([^"]+)"', html)
    if match:
        return match.group(1)

    # Pattern 2: grecaptcha.render call
    match = re.search(r"grecaptcha\.render\([^,]+,\s*\{[^}]*sitekey['\"]?\s*:\s*['\"]([^'\"]+)", html)
    if match:
        return match.group(1)

    # Pattern 3: grecaptcha.execute call
    match = re.search(r"grecaptcha\.execute\(['\"]([^'\"]+)", html)
    if match:
        return match.group(1)

    # Pattern 4: reCAPTCHA script src
    match = re.search(r"recaptcha/api\.js\?render=([^&\"]+)", html)
    if match:
        return match.group(1)

    return None


sitekey = extract_sitekey("https://staging.example.com/qa-login")
print(f"Sitekey: {sitekey}")

Metode 2: lewat Developer Tools browser

Untuk verifikasi manual, pakai Chrome DevTools:

  1. Buka halaman target di Chrome
  2. Tekan F12 lalu buka tab Elements
  3. Tekan Ctrl+F dan cari sitekey
  4. Temukan atribut data-sitekey="..."
  5. Salin nilainya (string alfanumerik 40 karakter)

Metode 3: dari tab Network

  1. Buka F12 lalu buka tab Network
  2. Filter dengan kata recaptcha
  3. Cari request ke google.com/recaptcha/api2/anchor
  4. Ambil nilai parameter k= di URL — itulah sitekey-nya

Validasi format sebelum kirim

Pemeriksaan format kecil menghemat solve terbuang. Sitekey valid berupa string alfanumerik plus tanda hubung, bukan kosong atau potongan HTML.

import re


def validate_sitekey(sitekey):
    """Validate sitekey format before API call."""
    if not sitekey:
        raise ValueError("Sitekey is empty")

    # Standard format: 40 alphanumeric + hyphens/underscores
    if not re.match(r'^[a-zA-Z0-9_-]{20,60}$', sitekey):
        raise ValueError(f"Invalid sitekey format: {sitekey}")

    return True


# Use before solving
sitekey = extract_sitekey("https://staging.example.com/qa-login")
validate_sitekey(sitekey)

Kasus khusus: reCAPTCHA Enterprise

Sitekey Enterprise terlihat identik dengan yang standar, tetapi memuat script recaptcha/enterprise.js, bukan recaptcha/api.js. Deteksi itu, lalu tambahkan enterprise=1.

Jangan menebak. Menambahkan enterprise=1 pada sitekey standar sama-sama memicu ERROR_WRONG_GOOGLEKEY, jadi kirim flag ini hanya setelah deteksi memastikannya.

import requests

# Standard reCAPTCHA — loads via recaptcha/api.js
# Enterprise reCAPTCHA — loads via recaptcha/enterprise.js

def detect_enterprise(page_url):
    """Detect if page uses reCAPTCHA Enterprise."""
    resp = requests.get(page_url, timeout=15)
    return "recaptcha/enterprise.js" in resp.text


# Submit with enterprise flag
is_enterprise = detect_enterprise("https://example.com")

data = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": "https://example.com",
    "json": 1,
}

if is_enterprise:
    data["enterprise"] = 1

resp = requests.post("https://ocr.captchaai.com/in.php", data=data)

Kasus khusus: reCAPTCHA invisible

Versi invisible tidak menampilkan checkbox sehingga mudah salah kira sebagai v2 biasa. Cari penanda data-size="invisible" atau grecaptcha.execute(, lalu kirim dengan invisible=1.

def detect_invisible(html):
    """Detect invisible reCAPTCHA."""
    indicators = [
        'data-size="invisible"',
        "grecaptcha.execute(",
        "recaptcha/api.js?render=",
    ]
    return any(i in html for i in indicators)


# Submit with invisible flag
data = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": "https://example.com",
    "invisible": 1,
    "json": 1,
}

Sitekey yang dimuat lewat JavaScript

Sebagian situs menyisipkan sitekey setelah render, jadi requests hanya menangkap HTML kosong. Ini yang sering menjebak worker headless — misalnya skrip price-monitoring di region AWS ap-southeast-1 (Singapura) atau ap-southeast-3 (Jakarta) yang menarik HTML mentah sebelum reCAPTCHA termuat. Render dulu dengan Selenium, baru ekstrak.

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


def extract_dynamic_sitekey(url):
    """Extract sitekey from JavaScript-rendered page."""
    driver = webdriver.Chrome()
    driver.get(url)

    # Wait for reCAPTCHA to load
    import time
    time.sleep(3)

    # Try data-sitekey attribute
    elements = driver.find_elements(By.CSS_SELECTOR, "[data-sitekey]")
    if elements:
        sitekey = elements[0].get_attribute("data-sitekey")
        driver.quit()
        return sitekey

    # Try iframe src parameter
    iframes = driver.find_elements(By.CSS_SELECTOR, "iframe[src*='recaptcha']")
    for iframe in iframes:
        src = iframe.get_attribute("src")
        import re
        match = re.search(r'[?&]k=([^&]+)', src)
        if match:
            driver.quit()
            return match.group(1)

    driver.quit()
    return None

Alur perbaikan dari error ke token

Kalau Anda ingin satu urutan yang bisa langsung diikuti saat error muncul, jalankan lima langkah ini:

  1. Ekstrak ulang sitekey dari halaman target yang persis sama dengan pageurl Anda.
  2. Jalankan validate_sitekey untuk menyingkirkan string kosong atau potongan HTML.
  3. Deteksi tipe reCAPTCHA-nya, lalu set enterprise=1 atau invisible=1 bila perlu.
  4. Kirim satu task percobaan dan tunggu token, bukan langsung seluruh batch.
  5. Jika masih ERROR_WRONG_GOOGLEKEY, ganti ke ekstraksi berbasis Selenium — halaman kemungkinan me-render sitekey lewat JavaScript.

Tabel diagnosis cepat

Gejala Penyebab Perbaikan
Key terlihat benar tapi error tetap muncul Sitekey Enterprise Tambahkan enterprise=1
Key berubah antar kunjungan Sitekey dinamis Ekstrak sitekey baru setiap kali
Ada beberapa sitekey di satu halaman Key yang salah dipilih Cocokkan key dengan form yang tepat
Key berasal dari iframe CDN Sitekey domain yang salah Ambil dari halaman utama, bukan iframe
Sitekey kosong saat diekstraksi Di-render lewat JavaScript Gunakan Selenium untuk mengekstrak

Kesalahan yang sering bikin error ini balik lagi

Setelah sitekey benar, error yang sama kadang muncul lagi karena hal-hal berikut:

  • Menyimpan sitekey sebagai konstanta di kode lalu lupa bahwa situs merotasinya. Ekstrak ulang begitu solve mulai gagal.
  • Mengirim pageurl hasil redirect (misalnya setelah login) alih-alih halaman tempat CAPTCHA benar-benar tampil.
  • Menambahkan enterprise=1 pada sitekey standar "untuk jaga-jaga" — flag yang salah justru memicu error yang sama, jadi kirim hanya bila Enterprise benar-benar terdeteksi.
  • Meng-cache sitekey terlalu lama di worker yang berjalan berhari-hari tanpa refresh.

Untuk pipeline scraping berskala besar, patuhi juga UU Pelindungan Data Pribadi (UU 27/2022): ekstrak dan proses hanya data yang memang Anda berhak olah.


Pertanyaan umum

Kenapa sitekey terlihat benar tapi error tetap muncul?

Biasanya tipe reCAPTCHA-nya salah dikenali: halaman memakai Enterprise atau invisible, tetapi request dikirim sebagai standar. Tambahkan enterprise=1 atau invisible=1 sesuai deteksi.

Apakah pageurl yang salah bisa memicu ERROR_WRONG_GOOGLEKEY?

Bisa. Sitekey dan pageurl diperiksa sebagai pasangan. Pastikan pageurl menunjuk ke halaman tempat CAPTCHA tampil, bukan hasil redirect atau subdomain lain.

Bagaimana kalau ada beberapa reCAPTCHA di satu halaman?

Ambil sitekey dari form yang memang ingin diselesaikan, bukan yang pertama ditemukan regex. Cocokkan berdasarkan container atau id form terkait.

Apakah error ini berarti API key CaptchaAI saya bermasalah?

Tidak. ERROR_WRONG_GOOGLEKEY menunjuk ke sitekey atau pageurl, bukan ke API key Anda. Masalah pada API key memunculkan kode error yang berbeda seperti ERROR_KEY_DOES_NOT_EXIST.

Bagaimana memastikan sitekey masih valid sebelum mengirim ribuan task?

Jalankan validate_sitekey di atas sebagai cek murah, lalu solve satu task percobaan lebih dulu. Kalau task itu balik dengan token, baru lepas seluruh batch — cara ini menghemat saldo pada pipeline scraping bervolume tinggi.


Panduan terkait


Ambil sitekey yang tepat sekali jalan — selesaikan dengan CaptchaAI.

Komentar dinonaktifkan untuk artikel ini.