Setiap solve reCAPTCHA melalui CaptchaAI memerlukan sitekey dan URL halaman yang benar. Beberapa tipe CAPTCHA juga memerlukan parameter tambahan — action (v3), data-s (Google), atau flag enterprise. Panduan ini mencakup setiap metode ekstraksi.
Parameter per Versi reCAPTCHA
| Parameter | v2 Standard | v2 Invisible | v3 | Enterprise |
|---|---|---|---|---|
googlekey (sitekey) |
Wajib | Wajib | Wajib | Wajib |
pageurl |
Wajib | Wajib | Wajib | Wajib |
invisible |
– | 1 |
– | – |
action |
– | – | Wajib | Kadang |
data-s |
Kadang | Kadang | – | – |
enterprise |
– | – | – | 1 |
Metode 1: Ekstraksi Atribut HTML
Dari Atribut data-sitekey
import re
import requests
url = "https://staging.example.com/qa-login"
html = requests.get(url).text
# Find data-sitekey
match = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)["\']', html)
if match:
sitekey = match.group(1)
print(f"Sitekey: {sitekey}")
# Check if invisible
invisible_match = re.search(r'data-size=["\']invisible["\']', html)
is_invisible = bool(invisible_match)
print(f"Invisible: {is_invisible}")
# Find callback
callback_match = re.search(r'data-callback=["\'](\w+)["\']', html)
callback = callback_match.group(1) if callback_match else None
print(f"Callback: {callback}")
# Check for data-s (Google-owned sites)
data_s_match = re.search(r'data-s=["\']([^"\']+)["\']', html)
data_s = data_s_match.group(1) if data_s_match else None
print(f"data-s: {data_s}")
JavaScript (Puppeteer)
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://staging.example.com/qa-login', { waitUntil: 'networkidle2' });
const params = await page.evaluate(() => {
const widget = document.querySelector('.g-recaptcha');
if (!widget) return null;
return {
sitekey: widget.getAttribute('data-sitekey'),
size: widget.getAttribute('data-size'),
callback: widget.getAttribute('data-callback'),
dataS: widget.getAttribute('data-s'),
invisible: widget.getAttribute('data-size') === 'invisible',
};
});
console.log(params);
Metode 2: Ekstraksi Script Tag
reCAPTCHA v3 dan Sitekey Enterprise
Sitekey v3 tertanam di URL script:
# Find sitekey from script src
v3_match = re.search(
r'recaptcha/(?:api|enterprise)\.js\?.*?render=([A-Za-z0-9_-]+)',
html
)
if v3_match:
sitekey = v3_match.group(1)
print(f"v3 Sitekey: {sitekey}")
# Check enterprise
is_enterprise = 'enterprise.js' in html
print(f"Enterprise: {is_enterprise}")
Menemukan Parameter Action
Action diteruskan dalam kode JavaScript, bukan dalam atribut HTML:
# Search for grecaptcha.execute calls
action_match = re.search(
r'grecaptcha\.execute\s*\([^,]+,\s*\{[^}]*action\s*:\s*["\']([^"\']+)',
html
)
if action_match:
action = action_match.group(1)
print(f"Action: {action}")
Metode 3: Ekstraksi Iframe src
Saat reCAPTCHA di-render di dalam iframe:
# Find reCAPTCHA iframe
iframe_match = re.search(
r'<iframe[^>]+src=["\']([^"\']*recaptcha/api2/anchor[^"\']*)["\']',
html
)
if iframe_match:
iframe_src = iframe_match.group(1)
sitekey_match = re.search(r'k=([A-Za-z0-9_-]+)', iframe_src)
if sitekey_match:
sitekey = sitekey_match.group(1)
print(f"Iframe sitekey: {sitekey}")
Metode 4: Ekstraksi Rendering JavaScript
Untuk halaman yang me-render reCAPTCHA secara dinamis dengan grecaptcha.render():
# Find grecaptcha.render calls
render_match = re.search(
r'grecaptcha\.render\s*\([^,]*,\s*\{([^}]+)\}',
html
)
if render_match:
config = render_match.group(1)
sk = re.search(r'sitekey\s*:\s*["\']([A-Za-z0-9_-]+)', config)
cb = re.search(r'callback\s*:\s*["\']?(\w+)', config)
sz = re.search(r'size\s*:\s*["\'](\w+)', config)
print(f"Sitekey: {sk.group(1) if sk else 'not found'}")
print(f"Callback: {cb.group(1) if cb else 'not found'}")
print(f"Size: {sz.group(1) if sz else 'not found'}")
Fungsi Ekstraksi Lengkap
import re
import requests
def extract_recaptcha_params(url):
html = requests.get(url, timeout=15).text
params = {"pageurl": url}
# Sitekey from data-sitekey
sk = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)', html)
if sk:
params["sitekey"] = sk.group(1)
# Sitekey from script render parameter (v3)
if "sitekey" not in params:
v3 = re.search(r'render=([A-Za-z0-9_-]{20,})', html)
if v3:
params["sitekey"] = v3.group(1)
# Sitekey from iframe
if "sitekey" not in params:
iframe = re.search(r'recaptcha.*?k=([A-Za-z0-9_-]+)', html)
if iframe:
params["sitekey"] = iframe.group(1)
# Sitekey from grecaptcha.render
if "sitekey" not in params:
render = re.search(r'sitekey\s*:\s*["\']([A-Za-z0-9_-]+)', html)
if render:
params["sitekey"] = render.group(1)
# Version detection
if re.search(r'data-size=["\']invisible', html):
params["invisible"] = True
if 'enterprise.js' in html:
params["enterprise"] = True
# Action (v3)
action = re.search(
r'action\s*:\s*["\']([^"\']+)',
html[html.find('grecaptcha.execute'):] if 'grecaptcha.execute' in html else ''
)
if action:
params["action"] = action.group(1)
# data-s
ds = re.search(r'data-s=["\']([^"\']+)', html)
if ds:
params["data_s"] = ds.group(1)
# Callback
cb = re.search(r'data-callback=["\'](\w+)', html)
if cb:
params["callback"] = cb.group(1)
return params
# Usage
params = extract_recaptcha_params("https://staging.example.com/qa-login")
for k, v in params.items():
print(f" {k}: {v}")
Hasil yang diharapkan:
pageurl: https://staging.example.com/qa-login
sitekey: 6Le-SITEKEY-abc123
invisible: True
callback: onCaptchaComplete
Submit Parameter yang Diekstraksi ke CaptchaAI
data = {
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": params["sitekey"],
"pageurl": params["pageurl"],
"json": "1",
}
if params.get("invisible"):
data["invisible"] = "1"
if params.get("enterprise"):
data["enterprise"] = "1"
if params.get("action"):
data["action"] = params["action"]
if params.get("data_s"):
data["data-s"] = params["data_s"]
resp = requests.post("https://ocr.captchaai.com/in.php", data=data).json()
Pemecahan Masalah
| Masalah | Penyebab | Perbaikan |
|---|---|---|
| Tidak ada sitekey yang ditemukan | Halaman menggunakan dynamic rendering | Gunakan Puppeteer/Selenium, bukan HTML statis |
| Sitekey salah | Beberapa instance reCAPTCHA | Periksa widget mana yang terhubung ke form yang di-submit |
| Action tidak ditemukan | Didefinisikan di file JS eksternal | Fetch dan cari file JavaScript yang terhubung |
data-s berubah per request |
Google me-regenerate-nya | Ekstrak data-s baru untuk setiap solve |
Pertanyaan Umum
Bisakah saya mengekstrak parameter tanpa memuat halaman di browser?
Ya, untuk sebagian besar situs — sitekey ada dalam source HTML. Namun CAPTCHA yang di-render via JavaScript memerlukan browser atau headless browser.
Apakah sitekey sama dengan API key?
Tidak. Sitekey adalah kunci publik yang ditetapkan ke situs web. Aman untuk dibagikan dan terlihat di source halaman.
Mulai Sekarang
Dapatkan API key Anda di captchaai.com dan gunakan parameter yang diekstraksi untuk solve yang andal.
Panduan Terkait
- Mekanisme Callback reCAPTCHA v2
- reCAPTCHA v2 Invisible: Deteksi Trigger