Kedua versi menghadirkan kotak centang "Saya bukan robot" dan tantangan kisi gambar yang sama. Perbedaannya ada di backend: Enterprise menambahkan kode alasan, aturan khusus, dan integrasi Google Cloud. Untuk solvenya, satu-satunya perubahan adalah menambahkan enterprise=1 ke request CaptchaAI Anda — tetapi mendeteksi versi mana yang digunakan situs adalah bagian yang paling sering dilakukan kesalahan oleh pengembang.
Perbandingan fitur
| Fitur | Standar v2 | Enterprise v2 |
|---|---|---|
| Widget kotak centang | Ya — penampilan identik | Ya — penampilan identik |
| Tantangan citra | Grid 3×3 atau 4×4 | Grid 3×3 atau 4×4 |
| berkas JS | api.js |
enterprise.js |
| Jalankan fungsi | grecaptcha.execute() |
grecaptcha.enterprise.execute() |
| API Verifikasi | siteverify (gratis) |
recaptchaenterprise.googleapis.com (berbayar) |
| Kode alasan | Tidak | Ya (OTOMATISASI, TOO_MUCH_TRAFFIC, dll.) |
| Aturan adat | Tidak | Ya (ambang batas per tindakan) |
| Konsol Google Cloud | Tidak | Ya (manajemen berbasis proyek) |
| Deteksi kebocoran kata sandi | Tidak | Ya |
| Format token | Struktur yang sama | Struktur yang sama |
| Parameter CaptchaAI | — | enterprise=1 |
| Waktu solve yang umum | 10-30 detik | 10-30 detik |
Cara mendeteksi Enterprise v2
Perbedaan utamanya adalah file JavaScript mana yang dimuat halaman:
Periksa tag skrip:
<!-- Standard v2 -->
<script src="https://www.google.com/recaptcha/api.js"></script>
<!-- Enterprise v2 -->
<script src="https://www.google.com/recaptcha/enterprise.js"></script>
Deteksi otomatis (Python):
import requests
from bs4 import BeautifulSoup
def detect_recaptcha_version(url):
resp = requests.get(url)
soup = BeautifulSoup(resp.text, "html.parser")
enterprise_script = soup.find("script", src=lambda s: s and "enterprise.js" in s)
standard_script = soup.find("script", src=lambda s: s and "recaptcha/api.js" in s)
widget = soup.find(class_="g-recaptcha")
sitekey = widget["data-sitekey"] if widget else None
if enterprise_script:
return {"version": "enterprise_v2", "sitekey": sitekey}
elif standard_script:
return {"version": "standard_v2", "sitekey": sitekey}
return None
info = detect_recaptcha_version("https://staging.example.com/qa-login")
print(info)
Deteksi otomatis (Node.js):
const axios = require("axios");
const cheerio = require("cheerio");
async function detectRecaptchaVersion(url) {
const { data } = await axios.get(url);
const $ = cheerio.load(data);
const hasEnterprise = $('script[src*="enterprise.js"]').length > 0;
const hasStandard = $('script[src*="recaptcha/api.js"]').length > 0;
const sitekey = $(".g-recaptcha").attr("data-sitekey");
if (hasEnterprise) return { version: "enterprise_v2", sitekey };
if (hasStandard) return { version: "standard_v2", sitekey };
return null;
}
Pemeriksaan konsol browser:
// Quick check in DevTools
if (document.querySelector('script[src*="enterprise.js"]')) {
console.log("Enterprise v2");
} else if (document.querySelector('script[src*="recaptcha/api.js"]')) {
console.log("Standard v2");
}
Menyelesaikan dengan CaptchaAI
Standar v2
import requests
import time
# Submit task
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url
})
task_id = resp.text.split("|")[1]
# Poll for token
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 v2
import requests
import time
# Submit task — only difference is enterprise=1
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"enterprise": 1 # Required for Enterprise
})
task_id = resp.text.split("|")[1]
# Polling is identical
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 yang mendeteksi secara otomatis
import requests
import time
from bs4 import BeautifulSoup
class RecaptchaV2Solver:
def __init__(self, api_key):
self.api_key = api_key
def detect_and_solve(self, page_url, page_html=None):
if not page_html:
page_html = requests.get(page_url).text
soup = BeautifulSoup(page_html, "html.parser")
is_enterprise = bool(soup.find("script", src=lambda s: s and "enterprise.js" in s))
widget = soup.find(class_="g-recaptcha")
sitekey = widget["data-sitekey"] if widget else None
if not sitekey:
raise Exception("No reCAPTCHA sitekey found on page")
params = {
"key": self.api_key,
"method": "userrecaptcha",
"googlekey": sitekey,
"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 {
"token": result.text.split("|")[1],
"is_enterprise": is_enterprise,
"sitekey": sitekey
}
if result.text != "CAPCHA_NOT_READY":
raise Exception(f"Solve failed: {result.text}")
raise Exception("Solve timed out")
solver = RecaptchaV2Solver("YOUR_API_KEY")
result = solver.detect_and_solve("https://staging.example.com/qa-login")
print(f"Enterprise: {result['is_enterprise']}, Token: {result['token'][:40]}...")
Kesalahan umum
| Kesalahan | Apa yang terjadi | Perbaiki |
|---|---|---|
Menggunakan enterprise=1 pada standard v2 |
Dapat mengembalikan token yang tidak valid | Periksa enterprise.js sebelum menambahkan bendera |
Menghilangkan enterprise=1 di Enterprise v2 |
Token mungkin ditolak oleh backend situs | Selalu tambahkan enterprise=1 ketika enterprise.js ada |
| Menggunakan sitekey yang salah | ERROR_WRONG_GOOGLEKEY |
Ekstrak dari data-sitekey pada elemen .g-recaptcha |
| Membingungkan v2 Enterprise dengan v3 Enterprise | Parameter solve yang salah | v2 memiliki kotak centang; v3 tidak terlihat dengan skor |
pengaturan token — sama untuk keduanya
# Selenium injection — works for both standard and enterprise
driver.execute_script(
f'document.getElementById("g-recaptcha-response").value = "{token}";'
)
# If the page uses a callback function
callback = driver.find_element("css selector", ".g-recaptcha").get_attribute("data-callback")
if callback:
driver.execute_script(f'{callback}("{token}");')
// Puppeteer injection — works for both
await page.evaluate((token) => {
document.getElementById("g-recaptcha-response").value = token;
// Find and call callback if present
const widget = document.querySelector(".g-recaptcha");
const cb = widget?.getAttribute("data-callback");
if (cb && typeof window[cb] === "function") {
window[cb](token);
}
}, token);
Pertanyaan Umum
Apakah Enterprise v2 lebih sulit dipecahkan?
Mekanisme tantangannya sama — kotak centang yang sama, kisi-kisi gambar yang sama. Enterprise menambahkan analitik backend (kode alasan, ambang batas khusus) namun tidak mengubah tingkat kesulitan tantangan bagi pemecah masalah.
Bisakah saya menggunakan kode yang sama untuk kedua versi?
Hampir. Satu-satunya perbedaan parameter adalah enterprise=1. Gunakan pendekatan deteksi otomatis di atas untuk membangun satu basis kode yang menangani keduanya. Deteksi, polling, dan pengaturan token identik.
Apakah saya perlu menangani kode alasan Enterprise?
Tidak. Kode alasan dikembalikan oleh Google ke backend situs web selama verifikasi. Mereka tidak terlihat oleh pemecah CAPTCHA. Integrasi CaptchaAI Anda tidak memerlukan perubahan apa pun untuk kode alasan.
Apakah solve Enterprise v2 lebih mahal?
Periksa halaman harga CaptchaAI saat ini. Solusi enterprise mungkin diberi harga berbeda, namun upaya integrasi API tetap sama.
Bagaimana saya tahu jika deteksi berfungsi dengan benar?
Jika Anda mengirim enterprise=1 untuk situs standard, solvenya mungkin berhasil tetapi tokennya mungkin ditolak oleh situs target. Jika Anda menghilangkannya untuk situs Enterprise, hal yang sama dapat terjadi. Selalu verifikasi dengan memeriksa URL skrip terlebih dahulu.
Panduan terkait
- reCAPTCHA Enterprise vs Standar — Panduan Lengkap— perbandingan penuh di semua versi
- Cara Mengatasi reCAPTCHA v2 Menggunakan API— tutorial v2 standard
- Cara Mengatasi reCAPTCHA v2 Enterprise Menggunakan API— tutorial enterprise v2
- Cara Mengidentifikasi Implementasi reCAPTCHA Enterprise— deteksi penyelaman dalam
- Cara Mengidentifikasi Implementasi reCAPTCHA Enterprise