يعمل كلا الإصدارين بشكل غير مرئي ويعيدان درجة المخاطرة (0.0 إلى 1.0). تضيف المؤسسة رموز الأسباب والحدود التكيفية وإدارة مشروع Google Cloud - ولكن من منظور حل CaptchaAI، فإن اختلاف المعلمة الوحيد هو enterprise=1. ويتمثل التحدي في اكتشاف الإصدار الذي يستخدمه الموقع، حيث أن كلاهما غير مرئي.
مقارنة الميزات
| ميزة | قياسي v3 | المؤسسة v3 |
|---|---|---|
| عملية غير مرئية | نعم | نعم |
| النتيجة (0.0-1.0) | نعم | نعم |
| معلمة الإجراء | مطلوب | مطلوب |
| ملف شبيبة | api.js?render=KEY |
enterprise.js?render=KEY |
| تنفيذ الوظيفة | grecaptcha.execute() |
grecaptcha.enterprise.execute() |
| رموز السبب | لا | نعم (تلقائي، TOO_MUCH_TRAFFIC، وما إلى ذلك) |
| الحدود المخصصة لكل إجراء | لا | نعم (عبر وحدة التحكم السحابية) |
| كشف تسرب كلمة المرور | لا | نعم |
| مدافع الحساب | لا | نعم |
| نقطة نهاية التحقق | siteverify (مجاني) |
recaptchaenterprise.googleapis.com (مدفوع) |
| معلمات CaptchaAI | version=v3 |
version=v3 + enterprise=1 |
| وقت الحل النموذجي | 10-20 ثانية | 10-20 ثانية |
كيفية اكتشاف الإصدار الذي يستخدمه الموقع
نظرًا لأن كلا الإصدارين غير مرئيين (لا توجد أداة مرئية)، يجب أن يعتمد الاكتشاف على JavaScript:
** كشف بايثون: **
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://example.com/login")
print(info)
كشف 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,
};
}
فحص سريع لوحدة تحكم المتصفح:
// 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);
}
الحل باستخدام CaptchaAI
قياسي 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
المؤسسة 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
حلال عالمي مع الكشف التلقائي
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://example.com/login", action="login")
print(f"Token: {token[:40]}...")
الأخطاء الشائعة
| خطأ | النتيجة | إصلاح |
|---|---|---|
استخدام enterprise=1 على الإصدار القياسي v3 |
قد يكون الرمز غير صالح | تحقق من وجود enterprise.js قبل إضافة العلم |
حذف enterprise=1 على الإصدار Enterprise v3 |
تم رفض الرمز المميز من قبل الواجهة الخلفية | أضف دائمًا عند وجود enterprise.js |
معلمة action خاطئة |
درجة منخفضة، تم رفض الرمز المميز | قم باستخراج سلسلة الإجراء الدقيقة من صفحة JavaScript |
حذف version=v3 |
يعامله Solver على أنه v2 | قم دائمًا بتضمين version=v3 لـ reCAPTCHA المستندة إلى النتائج |
| استخدام مفتاح الموقع v2 لحل v3 | ERROR_WRONG_GOOGLEKEY |
تأتي مفاتيح المواقع v3 من معلمة render=KEY |
استخراج معلمة العمل
تعتبر المعلمة action ضرورية للإصدار 3 - سواء القياسي أو المؤسسي. إذا قمت بإرسال إجراء خاطئ، ستكون النتيجة منخفضة وقد يتم رفض الرمز المميز.
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"
حقن الرمز
نفس الطريقة لكلا الإصدارين:
# 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",
}));
الأسئلة الشائعة
هل يعطي Enterprise v3 درجات مختلفة؟
نموذج التسجيل مشابه، لكن Enterprise قد تستخدم إشارات إضافية وحدود مخصصة. يتعامل CaptchaAI مع كليهما بشكل متماثل — يعمل الرمز المميز الذي تم إرجاعه بغض النظر عن النموذج الذي تستخدمه Google.
كيف يمكنني اكتشاف الإصدار Enterprise v3 على الصفحة؟
ابحث عن enterprise.js بدلاً من api.js في علامة البرنامج النصي، وgrecaptcha.enterprise.execute() في JavaScript. كلاهما غير مرئي، لذلك لا يوجد فرق بصري.
هل حل Enterprise v3 أكثر تكلفة؟
تحقق من أسعار CaptchaAI الحالية. قد يتم تسعير حلول المؤسسات بشكل مختلف، ولكن جهد تكامل واجهة برمجة التطبيقات (API) مطابق للمعايير.
ماذا لو لم أتمكن من العثور على معلمة الإجراء؟
جرب القيم المشتركة: "verify"، "submit"، "homepage"، "login". إذا ظل الرمز المميز مرفوضًا، فاستخدم DevTools في المتصفح للبحث عن execute( في البرامج النصية للصفحة وابحث عن سلسلة الإجراء الدقيقة.
هل يمكن للموقع التبديل بين المعيار والمؤسسة دون سابق إنذار؟
نعم. يمكن ترحيل المواقع إلى Enterprise في أي وقت. أنشئ الكشف الخاص بك ليتم تشغيله عند كل تحميل للصفحة بدلاً من ترميز الإصدار.
أدلة ذات صلة
- البدء السريع مع CaptchaAI: حلّ أول كابتشا في 5 دقائق
- كيفية حلّ reCAPTCHA v2 عبر الـ API: دليل خطوة بخطوة
الأسئلة الشائعة
هل سيؤدي استخدام علامة المؤسسة الخاطئة إلى حدوث أعطال؟
في كثير من الأحيان نعم. تقوم المواقع التي تستخدم رموز Enterprise بالتحقق من الرموز المميزة مقابل Enterprise API، والتي تتوقع رموز Enterprise المميزة. قد تفشل الرموز المميزة القياسية في التحقق، والعكس صحيح.
كيف يمكنني اكتشاف الإصدار Enterprise v3 برمجياً؟
ابحث في مصدر الصفحة عن enterprise.js:
page_source = driver.page_source
is_enterprise = "enterprise.js" in page_source
هل هناك فرق في الأداء؟
لا، وقت الحل ومعدلات النجاح متشابهة في كلا الإصدارين.