يتطلب كل حل reCAPTCHA من خلال CaptchaAI مفتاح الموقع الصحيح وعنوان URL للصفحة. تحتاج بعض أنواع CAPTCHA أيضًا إلى معلمات إضافية - الإجراء (الإصدار 3)، أو البيانات (مواقع Google)، أو علامة المؤسسة. يغطي هذا الدليل كل طريقة استخراج.
المعلمات حسب إصدار reCAPTCHA
| المعلمة | معيار الإصدار 2 | الإصدار 2 غير مرئي | v3 | المؤسسة |
|---|---|---|---|---|
googlekey (مفتاح الموقع) |
مطلوب | مطلوب | مطلوب | مطلوب |
pageurl |
مطلوب | مطلوب | مطلوب | مطلوب |
invisible |
— | 1 |
— | — |
action |
— | — | مطلوب | في بعض الأحيان |
data-s |
في بعض الأحيان | في بعض الأحيان | — | — |
enterprise |
— | — | — | 1 |
الأسلوب 1: استخراج سمة HTML
من سمة data-sitekey
import re
import requests
url = "https://example.com/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://example.com/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);
الطريقة الثانية: استخراج علامة البرنامج النصي
reCAPTCHA v3 ومفاتيح المواقع للمؤسسات
يتم تضمين مفاتيح الموقع v3 في عنوان URL للبرنامج النصي:
# 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}")
العثور على معلمة الإجراء
يتم تمرير الإجراء في كود JavaScript، وليس في سمات 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}")
الطريقة الثالثة: استخراج Iframe src
عندما يتم عرض reCAPTCHA داخل إطار 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}")
الطريقة الرابعة: استخراج عرض JavaScript
بالنسبة للصفحات التي تعرض reCAPTCHA ديناميكيًا باستخدام 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'}")
وظيفة الاستخراج كاملة
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://example.com/login")
for k, v in params.items():
print(f" {k}: {v}")
الناتج المتوقع:
pageurl: https://example.com/login
sitekey: 6Le-SITEKEY-abc123
invisible: True
callback: onCaptchaComplete
إرسال المعلمات المستخرجة إلى 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()
استكشاف الأخطاء وإصلاحها
| مشكلة | السبب | إصلاح |
|---|---|---|
| لم يتم العثور على مفتاح الموقع | تستخدم الصفحة العرض الديناميكي | استخدم Puppeteer/Selenium بدلاً من HTML الثابت |
| مفتاح الموقع خاطئ | مثيلات reCAPTCHA المتعددة | تحقق من تعيينات عناصر واجهة المستخدم للنموذج الذي ترسله |
| لم يتم العثور على الإجراء | تم تعريفه في ملف JS خارجي | جلب وبحث ملفات JavaScript المرتبطة |
يتغير data-s لكل طلب |
جوجل يجددها | قم باستخراج data-s الطازج لكل حل |
الأسئلة الشائعة
هل يمكنني استخراج المعلمات دون تحميل الصفحة في المتصفح؟
نعم، بالنسبة لمعظم المواقع، يكون مفتاح الموقع موجودًا في مصدر HTML. لكن اختبارات CAPTCHA التي يتم عرضها بواسطة JavaScript تتطلب متصفحًا أو متصفحًا بدون رأس.
هل مفتاح الموقع هو نفس مفتاح API؟
لا. مفتاح الموقع هو مفتاح عام مخصص لموقع الويب. إنها آمنة للمشاركة ويمكن رؤيتها في مصدر الصفحة.
استخدم المعلمات المستخرجة مع CaptchaAI لحل موثوق
احصل على مفتاح API الخاص بك علىcaptchaai.com.