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
- reCAPTCHA v3 Enterprise vs Standar— sudut perbandingan alternatif
- reCAPTCHA Enterprise vs Standar — Panduan Lengkap— mencakup semua versi
- Cara Mengatasi reCAPTCHA v3 Menggunakan API— tutorial v3 standard
- Cara Mengatasi reCAPTCHA v3 Enterprise Menggunakan API— tutorial v3 enterprise
- Parameter Tindakan reCAPTCHA v3 Dijelaskan— parameter tindakan menyelam lebih dalam
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
- reCAPTCHA v3 Enterprise vs Standar
- reCAPTCHA Enterprise vs Standar — Panduan Lengkap
- Cara Mengatasi reCAPTCHA v3 Enterprise Menggunakan API