Perbandingan

reCAPTCHA v3 Standard vs Enterprise — Panduan Solve

Kedua versi berjalan tanpa terlihat dan mengembalikan skor risiko (0,0 hingga 1,0). Enterprise menambahkan kode alasan, ambang batas adaptif, dan manajemen proyek Google Cloud — tetapi dari perspektif solve CaptchaAI, satu-satunya perbedaan parameter adalah enterprise=1. Tantangannya adalah mendeteksi versi mana yang digunakan situs, karena keduanya tidak terlihat.


Perbandingan fitur

Fitur Standar v3 Enterprise v3
Operasi tak terlihat Ya Ya
Skor (0,0–1,0) Ya Ya
Parameter tindakan Diperlukan Diperlukan
berkas JS api.js?render=KEY enterprise.js?render=KEY
Jalankan fungsi grecaptcha.execute() grecaptcha.enterprise.execute()
Kode alasan Tidak Ya (OTOMATISASI, TOO_MUCH_TRAFFIC, dll.)
Ambang batas khusus per tindakan Tidak Ya (melalui Cloud Console)
Deteksi kebocoran kata sandi Tidak Ya
Pembela akun Tidak Ya
Titik akhir verifikasi siteverify (gratis) recaptchaenterprise.googleapis.com (berbayar)
Parameter CaptchaAI version=v3 version=v3 + enterprise=1
Waktu solve yang umum 10-20 detik 10-20 detik

Cara mendeteksi versi mana yang digunakan situs

Karena kedua versi tidak terlihat (tidak ada widget yang terlihat), deteksi harus bergantung pada JavaScript:

Deteksi ular piton:

import requests
import re

def detect_v3_type(url):
    resp = requests.get(url)
    html = resp.text

    # Check for enterprise.js
    if "enterprise.js" in html:
        version = "enterprise_v3"
        execute_fn = "grecaptcha.enterprise.execute"
    elif "recaptcha/api.js" in html and "render=" in html:
        version = "standard_v3"
        execute_fn = "grecaptcha.execute"
    else:
        return None

    # Extract sitekey from render parameter
    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 parameter
    action_match = re.search(r'action["\']?\s*[:=]\s*["\'](\w+)', html)
    action = action_match.group(1) if action_match else "unknown"

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

info = detect_v3_type("https://staging.example.com/qa-login")
print(info)

Deteksi Node.js:

const axios = require("axios");

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

  let version, executeFn;
  if (html.includes("enterprise.js")) {
    version = "enterprise_v3";
    executeFn = "grecaptcha.enterprise.execute";
  } else if (html.includes("recaptcha/api.js") && html.includes("render=")) {
    version = "standard_v3";
    executeFn = "grecaptcha.execute";
  } else {
    return 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] || null,
    action: actionMatch?.[1] || "unknown",
    executeFn,
  };
}

Pemeriksaan cepat konsol browser:

// Paste in DevTools console
if (document.querySelector('script[src*="enterprise.js"]')) {
  console.log("Enterprise v3");
  console.log("Execute:", typeof grecaptcha?.enterprise?.execute);
} else if (document.querySelector('script[src*="api.js"][src*="render="]')) {
  console.log("Standard v3");
  console.log("Execute:", typeof grecaptcha?.execute);
}

Menyelesaikan dengan CaptchaAI

Standar v3

import requests
import time

# Submit
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]

# Poll
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

Enterprise v3

import requests
import time

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

# Polling is identical to standard
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

Pemecah universal dengan deteksi otomatis

import requests
import time
import re

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

    def detect_and_solve(self, page_url, action=None):
        """Auto-detect standard vs enterprise and solve."""
        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")
        sitekey = key_match.group(1)

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

        params = {
            "key": self.api_key,
            "method": "userrecaptcha",
            "version": "v3",
            "googlekey": sitekey,
            "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 failed: {result.text}")

        raise Exception("Timed out")

solver = RecaptchaV3Solver("YOUR_API_KEY")
token = solver.detect_and_solve("https://staging.example.com/qa-login", action="login")
print(f"Token: {token[:40]}...")

Kesalahan umum

Kesalahan Hasil Perbaiki
Menggunakan enterprise=1 pada standard v3 Token mungkin tidak valid Periksa enterprise.js sebelum menambahkan tanda
Menghilangkan enterprise=1 di Enterprise v3 Token ditolak oleh backend Selalu tambahkan ketika enterprise.js ada
Parameter action salah Skor rendah, token ditolak Ekstrak string tindakan yang tepat dari halaman JavaScript
Menghilangkan version=v3 Solver memperlakukannya sebagai v2 Selalu sertakan version=v3 untuk reCAPTCHA berbasis skor
Menggunakan sitekey v2 untuk solve v3 ERROR_WRONG_GOOGLEKEY sitekey v3 berasal dari parameter render=KEY

Mengekstrak parameter tindakan

Parameter action sangat penting untuk v3 — baik standard maupun enterprise. Jika Anda mengirimkan tindakan yang salah, skornya akan rendah dan token mungkin ditolak.

import re

def find_v3_actions(html):
    """Extract all action parameters from page JavaScript."""
    # Look for grecaptcha.execute(key, {action: '...'})
    pattern = r"(?:grecaptcha\.(?:enterprise\.)?execute|action)\s*[(:]\s*['\"](\w+)"
    actions = re.findall(pattern, html)
    return list(set(actions))

# Common actions: "login", "submit", "register", "checkout", "homepage"

pengaturan token

Pendekatan yang sama untuk kedua versi:

# For browser-based workflows (Selenium)
driver.execute_script(
    f'document.getElementById("g-recaptcha-response").value = "{token}";'
)

# For pure HTTP workflows
requests.post(page_url, data={
    "g-recaptcha-response": token,
    "username": "user",
    "password": "pass"
})
// Puppeteer
await page.evaluate((tok) => {
  document.getElementById("g-recaptcha-response").value = tok;
}, token);

// Pure HTTP (axios)
await axios.post(pageUrl, new URLSearchParams({
  "g-recaptcha-response": token,
  username: "user",
  password: "pass",
}));

Pertanyaan Umum

Apakah Enterprise v3 memberikan skor yang berbeda?

Model penilaiannya serupa, namun Enterprise mungkin menggunakan sinyal tambahan dan ambang batas khusus. CaptchaAI menangani keduanya secara identik — token yang dikembalikan berfungsi apa pun model yang digunakan Google.

Bagaimana cara mendeteksi Enterprise v3 di halaman?

Cari enterprise.js, bukan api.js di tag skrip, dan grecaptcha.enterprise.execute() di JavaScript. Keduanya tidak terlihat, sehingga tidak ada perbedaan visual.

Apakah Enterprise v3 lebih mahal untuk dipecahkan?

Periksa harga CaptchaAI saat ini. Solusi enterprise mungkin diberi harga berbeda, namun upaya integrasi API identik dengan standard.

Bagaimana jika saya tidak dapat menemukan parameter tindakan?

Coba nilai umum: "verify", "submit", "homepage", "login". Jika token masih ditolak, gunakan DevTools browser untuk mencari execute( di skrip halaman dan temukan string tindakan yang tepat.

Bisakah situs beralih antara standard dan enterprise tanpa pemberitahuan?

Ya. Situs dapat bermigrasi ke Enterprise kapan saja. Bangun deteksi Anda agar berjalan pada setiap pemuatan halaman, bukan melakukan hardcoding pada versinya.


Panduan terkait

Pertanyaan Umum

Apakah penggunaan tanda enterprise yang salah akan menyebabkan kegagalan?

Seringkali ya. Situs yang menggunakan token Verifikasi Enterprise terhadap API Enterprise, yang mengharapkan token Enterprise. Token standard mungkin gagal dalam verifikasi, dan sebaliknya.

Bagaimana cara mendeteksi Enterprise v3 secara terprogram?

Cari sumber halaman untuk enterprise.js:

page_source = driver.page_source
is_enterprise = "enterprise.js" in page_source

Apakah ada perbedaan kinerja?

Tidak. Waktu solve dan tingkat keberhasilan serupa untuk kedua versi.


Panduan terkait

Komentar dinonaktifkan untuk artikel ini.