المقارنات

دليل حل Standard vs Enterprise reCAPTCHA v3

يعمل كلا الإصدارين بشكل غير مرئي ويعيدان درجة المخاطرة (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 في أي وقت. أنشئ الكشف الخاص بك ليتم تشغيله عند كل تحميل للصفحة بدلاً من ترميز الإصدار.


أدلة ذات صلة

الأسئلة الشائعة

هل سيؤدي استخدام علامة المؤسسة الخاطئة إلى حدوث أعطال؟

في كثير من الأحيان نعم. تقوم المواقع التي تستخدم رموز Enterprise بالتحقق من الرموز المميزة مقابل Enterprise API، والتي تتوقع رموز Enterprise المميزة. قد تفشل الرموز المميزة القياسية في التحقق، والعكس صحيح.

كيف يمكنني اكتشاف الإصدار Enterprise v3 برمجياً؟

ابحث في مصدر الصفحة عن enterprise.js:

page_source = driver.page_source
is_enterprise = "enterprise.js" in page_source

هل هناك فرق في الأداء؟

لا، وقت الحل ومعدلات النجاح متشابهة في كلا الإصدارين.


أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.