Karşılaştırmalar

Standart ve Kurumsal reCAPTCHA v3 Çözüm Kılavuzu

Her iki sürüm de görünmez bir şekilde çalışır ve bir risk puanı verir (0,0 ila 1,0). Enterprise, neden kodları, uyarlanabilir eşikler ve Google Cloud proje yönetimi ekler; ancak CaptchaAI çözüm perspektifinden bakıldığında tek parametre farkı enterprise=1'dir. Her ikisi de görünmez olduğundan, zorluk bir sitenin hangi sürümü kullandığını tespit etmektir.


Özellik karşılaştırması

Özellik Standart v3 Kurumsal v3
Görünmez operasyon Evet Evet
Puan (0,0–1,0) Evet Evet
Eylem parametresi Gerekli Gerekli
JS dosyası api.js?render=KEY enterprise.js?render=KEY
İşlevi yürüt grecaptcha.execute() grecaptcha.enterprise.execute()
Sebep kodları Hayır Evet (OTOMASYON, TOO_MUCH_TRAFFIC vb.)
İşlem başına özel eşikler Hayır Evet (Bulut Konsolu aracılığıyla)
Şifre sızıntısı tespiti Hayır Evet
Hesap savunucusu Hayır Evet
Doğrulama uç noktası siteverify (ücretsiz) recaptchaenterprise.googleapis.com (ücretli)
CaptchaAI parametreleri version=v3 version=v3 + enterprise=1
Tipik çözüm süresi 10-20 saniye 10-20 saniye

Bir sitenin hangi sürümü kullandığını tespit etme

Her iki sürüm de görünmez olduğundan (görünür bir widget olmadığından), algılamanın JavaScript'e dayanması gerekir:

Python tespiti:

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://staging.example.com/qa-login")
print(info)

Node.js tespiti:

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,
  };
}

Tarayıcı konsolu hızlı kontrolü:

// 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 ile çözme

Standart 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

Kurumsal 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

Otomatik algılamalı evrensel çözücü

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://staging.example.com/qa-login", action="login")
print(f"Token: {token[:40]}...")

Yaygın hatalar

hata Sonuç Düzeltme
enterprise=1'yi standart v3'te kullanma Jeton geçersiz olabilir Bayrak eklemeden önce enterprise.js'yi kontrol edin
Enterprise v3'te enterprise=1'nin atlanması Jeton arka uç tarafından reddedildi Her zaman enterprise.js mevcut olduğunda ekle
Yanlış action parametresi Düşük puan, jeton reddedildi Tam eylem dizesini sayfa JavaScript'inden çıkarın
version=v3'nin atlanması Çözücü bunu v2 olarak ele alır Puana dayalı reCAPTCHA için her zaman version=v3'yi ekleyin
V3 çözümü için v2 site anahtarını kullanma ERROR_WRONG_GOOGLEKEY v3 site anahtarları render=KEY parametresinden gelir

Eylem parametresinin çıkarılması

action parametresi hem standart hem de kurumsal v3 için kritik öneme sahiptir. Yanlış eylemi gönderirseniz puan düşük olur ve jeton reddedilebilir.

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"

Jeton enjeksiyonu

Her iki versiyon için de aynı yaklaşım:

# 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",
}));

SSS

Enterprise v3 farklı puanlar veriyor mu?

Puanlama modeli benzerdir ancak Kuruluş ek sinyaller ve özel eşikler kullanabilir. CaptchaAI her ikisini de aynı şekilde ele alır; döndürülen jeton, Google'ın kullandığı modelden bağımsız olarak çalışır.

Bir sayfada Enterprise v3'ü nasıl tespit ederim?

Komut dosyası etiketinde api.js yerine enterprise.js'yi ve JavaScript'te grecaptcha.enterprise.execute()'yi arayın. Her ikisi de görünmez, dolayısıyla görsel bir fark yoktur.

Enterprise v3'ün çözümü daha mı pahalı?

CaptchaAI'nin mevcut fiyatını kontrol edin. Kurumsal çözümler farklı şekilde fiyatlandırılabilir ancak API entegrasyon çabası standartla aynıdır.

Eylem parametresini bulamazsam ne olur?

Ortak değerleri deneyin: "verify", "submit", "homepage", "login". Belirteç hâlâ reddediliyorsa sayfa komut dosyalarında execute('yi aramak ve tam eylem dizesini bulmak için tarayıcı DevTools'u kullanın.

Bir site standart ve kurumsal arasında bildirimde bulunmadan geçiş yapabilir mi?

Evet. Siteler herhangi bir zamanda Enterprise'a geçebilir. Sürümü sabit kodlamak yerine her sayfa yüklemesinde çalışacak şekilde algılamanızı oluşturun.


İlgili kılavuzlar

SSS

Yanlış kurumsal bayrağın kullanılması hatalara neden olur mu?

Çoğu zaman evet. Kurumsal kullanan siteler, kurumsal belirteçleri bekleyen Kurumsal API'ye göre belirteçleri doğrular. Standart belirteçler doğrulamada başarısız olabilir veya bunun tersi de geçerlidir.

Enterprise v3'ü programlı olarak nasıl algılarım?

enterprise.js için sayfa kaynağını arayın:

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

Performans farkı var mı?

Hayır. Her iki versiyonda da çözüm süresi ve başarı oranları benzerdir.


İlgili kılavuzlar

Bu makale için yorumlar devre dışı bırakılmıştır.