Comparisons

reCAPTCHA v3 Enterprise vs Standard — Perbandingan

Untuk integrasi otomatisasi, satu-satunya perbedaan yang mengubah kode Anda adalah satu parameter: enterprise=1. Sisanya — kode alasan, ambang batas per action, account defender — berjalan di sisi pemilik situs dan tidak muncul di respons yang Anda terima.

Masalahnya, salah menebak versi berarti token ditolak tanpa pesan error yang jelas. Keduanya invisible, tanpa gambar untuk diklik, dan mengembalikan skor risiko 0.0 (bot) sampai 1.0 (manusia) — perbedaannya tidak terlihat dari tampilan halaman.


Cara mendeteksi versi reCAPTCHA v3 dari HTML

Jangan hardcode versinya: situs bisa pindah ke Enterprise kapan saja. Tandanya ada di tag <script>:

  • Standar memuat recaptcha/api.js?render=KEY dan memanggil grecaptcha.execute().
  • Enterprise memuat enterprise.js?render=KEY dan memanggil grecaptcha.enterprise.execute().

Sitekey v3 juga datang dari parameter render=, bukan dari data-sitekey seperti pada v2 — penyebab paling umum error ERROR_WRONG_GOOGLEKEY.

Fungsi berikut mengambil versi, sitekey, dan action sekaligus:

import requests
import re

def detect_v3_version(url):
    html = requests.get(url).text

    if "enterprise.js" in html:
        version = "enterprise"
    elif "recaptcha/api.js" in html and "render=" in html:
        version = "standard"
    else:
        return None

    # Extract sitekey
    key_match = re.search(r'render[=:]\s*["\']?([A-Za-z0-9_-]{40})', html)
    sitekey = key_match.group(1) if key_match else None

    # Extract action
    action_match = re.search(r'action["\']?\s*[:=]\s*["\'](\w+)', html)
    action = action_match.group(1) if action_match else None

    return {"version": version, "sitekey": sitekey, "action": action}

Versi Node.js dengan Axios, untuk worker berbasis JavaScript:

const axios = require("axios");

async function detectV3Version(url) {
  const { data: html } = await axios.get(url);

  const version = html.includes("enterprise.js")
    ? "enterprise"
    : html.includes("recaptcha/api.js") && html.includes("render=")
      ? "standard"
      : null;

  const keyMatch = html.match(/render[=:]\s*['"]?([A-Za-z0-9_-]{40})/);
  const actionMatch = html.match(/action['"]?\s*[:=]\s*['"](\w+)/);

  return {
    version,
    sitekey: keyMatch?.[1],
    action: actionMatch?.[1],
  };
}

Mengirim task: standar dan Enterprise

Alur kerjanya identik untuk kedua versi, sama seperti tipe CAPTCHA lain: kirim ke in.php, simpan task ID, polling res.php, pakai token.

Solve reCAPTCHA v3 standar

import requests
import time

resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "version": "v3",
    "googlekey": sitekey,
    "action": "login",
    "pageurl": page_url
})
task_id = resp.text.split("|")[1]

for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY", "action": "get", "id": task_id
    })
    if result.text.startswith("OK|"):
        token = result.text.split("|")[1]
        break

Solve reCAPTCHA v3 Enterprise

Perbedaannya hanya satu baris — "enterprise": 1:

import requests
import time

# Only difference: enterprise=1
resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "version": "v3",
    "enterprise": 1,
    "googlekey": sitekey,
    "action": "login",
    "pageurl": page_url
})
task_id = resp.text.split("|")[1]

for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY", "action": "get", "id": task_id
    })
    if result.text.startswith("OK|"):
        token = result.text.split("|")[1]
        break

Solver yang mendeteksi versi sendiri

Karena situs bisa berpindah versi, gabungkan deteksi dan pengiriman task dalam satu class:

class V3AutoSolver:
    def __init__(self, api_key):
        self.api_key = api_key

    def solve(self, page_url, action=None):
        import re
        html = requests.get(page_url).text

        is_enterprise = "enterprise.js" in html
        key_match = re.search(r'render[=:]\s*["\']?([A-Za-z0-9_-]{40})', html)
        if not key_match:
            raise Exception("No v3 sitekey found")

        if not action:
            act_match = re.search(r'action["\']?\s*[:=]\s*["\'](\w+)', html)
            action = act_match.group(1) if act_match else "verify"

        params = {
            "key": self.api_key,
            "method": "userrecaptcha",
            "version": "v3",
            "googlekey": key_match.group(1),
            "action": action,
            "pageurl": page_url
        }
        if is_enterprise:
            params["enterprise"] = 1

        resp = requests.get("https://ocr.captchaai.com/in.php", params=params)
        if not resp.text.startswith("OK|"):
            raise Exception(f"Submit failed: {resp.text}")

        task_id = resp.text.split("|")[1]
        for _ in range(60):
            time.sleep(5)
            result = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": self.api_key, "action": "get", "id": task_id
            })
            if result.text.startswith("OK|"):
                return result.text.split("|")[1]
            if result.text != "CAPCHA_NOT_READY":
                raise Exception(f"Solve error: {result.text}")
        raise Exception("Timed out")

Apa yang berubah pada penilaian skor

Standar v3 memakai satu model penilaian global milik Google. Enterprise menambahkan lapisan di atasnya, dan tiga di antaranya berdampak langsung ke otomatisasi:

  1. Ambang batas per action. Pada standar biasanya berlaku satu ambang batas untuk semua action. Pada Enterprise, login bisa lolos di 0.7 sementara checkout menuntut 0.9 — nilai action harus persis sama dengan yang dipanggil halaman.
  2. Pembelajaran adaptif. Enterprise membangun model dari pola trafik situs itu sendiri, bukan hanya model global, sehingga pola permintaan yang seragam lebih cepat menonjol.
  3. Analisis kode alasan. Positif palsu ditangani otomatis lewat kode alasan, bukan penyetelan ambang batas manual.

Rentang skornya tidak berubah: tetap 0.0–1.0 dengan dua desimal. Yang berubah adalah seberapa ketat angka itu dibaca.

Untuk pengguna CaptchaAI: kualitas token sama untuk kedua versi. Ketepatan parameter action yang menentukan hasil akhirnya.


Kode alasan Enterprise dan artinya

Kode alasan dikirim ke backend pemilik situs saat verifikasi token, bukan ke respons CaptchaAI. Tetap berguna dipahami: kode inilah yang menjelaskan mengapa token ditolak padahal solve-nya sukses.

Kode Artinya Dampak pada otomatisasi
AUTOMATION Perilaku otomatis terdeteksi Gunakan sinyal browser yang konsisten
UNEXPECTED_ENVIRONMENT Lingkungan browser tidak biasa Periksa konfigurasi browser headless
TOO_MUCH_TRAFFIC Volume permintaan tinggi dari satu sumber Terapkan pembatasan laju permintaan (rate limiting)
UNEXPECTED_USAGE_PATTERNS Pola interaksi tidak wajar Tambahkan jeda realistis antar tindakan
LOW_CONFIDENCE_SCORE Data tidak cukup untuk penilaian Kirim lebih banyak sinyal perilaku
SUSPECTED_CARDING Pola penipuan kartu kredit Tidak relevan untuk mayoritas otomatisasi
SUSPECTED_CHARGEBACK Pola penipuan tagihan balik Sama, tidak relevan

Ringkasan perbedaan fitur

Fitur Standar v3 Enterprise v3
Operasi invisible Ya Ya
Skor (0.0–1.0) Ya Ya
Parameter action Wajib Wajib
Kode alasan Tidak Ya
Ambang batas khusus per action Tidak Ya (via Cloud Console)
Deteksi kebocoran kata sandi Tidak Ya
Account defender Tidak Ya
Label pencegahan penipuan Tidak Ya
Integrasi autentikasi multi-faktor Tidak Ya
Endpoint verifikasi siteverify (gratis) recaptchaenterprise.googleapis.com
Kuota bulanan 1 juta penilaian gratis Bayar per penilaian
File JS api.js?render=KEY enterprise.js?render=KEY
Parameter CaptchaAI version=v3 version=v3 + enterprise=1

Baris kuota di atas adalah biaya pemilik situs ke Google, bukan biaya Anda sebagai pemanggil API.


Skenario: satu worker, dua versi sekaligus

Kasus yang sering muncul di pekerjaan kontrak otomatisasi dan tim data startup: satu worker memantau belasan halaman form milik beberapa klien. Sebagian masih v3 standar, sebagian sudah pindah ke Enterprise, tanpa pemberitahuan.

Kalau versinya di-hardcode, kegagalan muncul sebagai token yang ditolak di sisi situs — bukan error dari API — sehingga log Anda terlihat bersih padahal submit-nya gagal. Deteksi per permintaan seperti V3AutoSolver di atas karena itu bukan sekadar kerapian kode.

Sisi biayanya relevan untuk pasar yang sensitif harga seperti Indonesia. CaptchaAI menagih per thread bersamaan, bukan per solve, dengan solve tanpa batas selama bulan berjalan. Satu thread berarti satu CAPTCHA yang sedang diproses; begitu selesai, thread itu langsung dipakai task berikutnya. Paket BASIC ($15/bulan, 5 thread) memadai untuk pekerjaan freelance kecil, sementara ADVANCE ($90/bulan, 50 thread) menampung antrean pemantauan yang jauh lebih padat — dan tarifnya tidak berubah hanya karena situs targetnya memakai Enterprise.

Soal latensi, polling pada contoh kode berjalan tiap 5 detik. Baik dari ap-southeast-1 (Singapura) maupun ap-southeast-3 (Jakarta), jeda jaringan tidak mengubah pola ini secara berarti — penentunya tetap waktu penyelesaian di sisi solver.


Masalah umum dan perbaikannya

Masalah Kemungkinan penyebab Perbaikan
Token ditolak di situs Enterprise enterprise=1 tidak dikirim Cek keberadaan enterprise.js, lalu tambahkan parameternya
Skor rendah khusus di Enterprise Nilai action tidak cocok Ambil action persis dari pemanggilan grecaptcha.enterprise.execute()
Lolos saat pengujian, gagal di produksi Pembelajaran adaptif menandai pola Anda Variasikan jeda, hindari trafik seragam
ERROR_WRONG_GOOGLEKEY Sitekey diambil dari data-sitekey Cari render=KEY di URL skrip
CAPCHA_NOT_READY terus berulang Task memang belum siap Pertahankan jeda 5 detik, batasi percobaan ulang

Pertanyaan Umum

Perlukah saya mengubah kode kalau situs target pindah ke Enterprise?

Hanya satu parameter. Tambahkan "enterprise": 1 pada permintaan ke in.php; pengiriman, polling, dan pemakaian token tetap sama persis. Lebih aman lagi, pakai deteksi otomatis agar perpindahan versi tidak perlu diurus manual.

Bagaimana membedakan reCAPTCHA v3 Enterprise dan v2 di halaman yang sama?

v3 tidak punya kotak centang maupun tantangan gambar, dan sitekey-nya muncul di parameter render=. Kalau Anda menemukan atribut data-sitekey pada sebuah div, itu v2.

Apakah CaptchaAI mendukung reCAPTCHA v3 Enterprise?

Ya, lewat method userrecaptcha dengan parameter enterprise=1. Yang belum didukung adalah hCaptcha dan FunCaptcha (Arkose Labs); GeeTest v4 berstatus segera hadir.

Nilai action apa yang harus dikirim kalau halaman tidak menampilkannya?

Cari string action di JavaScript halaman sebelum menebak. Kalau tidak ditemukan, verify adalah cadangan yang wajar — tetapi di situs Enterprise dengan ambang batas per action, nilai yang salah adalah penyebab skor rendah yang paling sering terlewat.


Panduan terkait

Komentar dinonaktifkan untuk artikel ini.