استكشاف الأخطاء

أخطاء وإصلاحات reCAPTCHA Invisible الشائعة

يقوم اختبار reCAPTCHA غير المرئي بإزالة مربع الاختيار - ولكنه يضيف أوضاع فشل جديدة للأتمتة. أكبر المشكلات هي عدم اكتشاف الأداة غير المرئية على الإطلاق، فقدان وظيفة رد الاتصال، إرسال الرموز المميزة منتهية الصلاحية، و استخدام المعلمات القياسية v2 عندما تكون المعلمات غير المرئية مطلوبة.

يغطي هذا الدليل كل نمط خطأ شائع مع الإصلاح الدقيق. إذا كنت بحاجة إلى معلومات أساسية حول كيفية عمل reCAPTCHA غير المرئي، فاقرأكيف يعمل reCAPTCHA Invisible وكيفية حلهاأولاً.


مرجع خطأ سريع

خطأ السبب إصلاح
ERROR_WRONG_GOOGLEKEY مفتاح الموقع أو مفتاح الموقع خاطئ من مجال مختلف قم باستخراج مفتاح الموقع من div لعنصر واجهة المستخدم غير المرئي أو استدعاء grecaptcha.render()
ERROR_PAGEURL عدم تطابق عنوان URL - تم إرسال عنوان URL للصفحة الرئيسية بدلاً من عنوان URL لإطار iframe استخدم عنوان URL الدقيق حيث يتم تحميل الأداة غير المرئية
ERROR_CAPTCHA_UNSOLVABLE وضعت جوجل علامة على المهمة على أنها مستحيلة أعد المحاولة باستخدام الوكيل وملفات تعريف الارتباط الجديدة؛ تحقق مما إذا كان الموقع قد تحول إلى الإصدار 3
ERROR_BAD_TOKEN_OR_PAGEURL تم رفض الرمز المميز بواسطة الموقع المستهدف التحقق من تطابق عنوان URL الخاص بالصفحة تمامًا؛ الحقن عبر رد الاتصال، وليس الحقل المخفي
CAPCHA_NOT_READY المهمة لا تزال قيد المعالجة استمر في الاقتراع كل 5 ثوانٍ؛ تستغرق الحلول غير المرئية من 10 إلى 30 ثانية
ERROR_KEY_DOES_NOT_EXIST مفتاح CaptchaAI API غير صالح تحقق من المفتاح فيcaptchaai.com/account
تم قبول الرمز ولكن فشل النموذج لم يتم تنفيذ رد الاتصال بعد حقن الرمز المميز ابحث عن الدالة data-callback واستدعها باستخدام الرمز المميز

الخطأ 1: عدم اكتشاف reCAPTCHA غير المرئي على الصفحة

لا يحتوي اختبار reCAPTCHA غير المرئي على مربع اختيار مرئي. إذا لم تكتشف أداة الكشط الخاصة بك ذلك، فستفشل الطلبات المحمية برمز التحقق (captcha) بصمت بسبب أخطاء إرسال النموذج أو عمليات إعادة التوجيه.

كيفية اكتشاف reCAPTCHA غير المرئية

ابحث عن هذه الأنماط في صفحة HTML:

<!-- Pattern 1: div with data-size="invisible" -->
<div class="g-recaptcha" data-sitekey="6LdKlZEU..."
     data-size="invisible"
     data-callback="onSubmit"></div>

<!-- Pattern 2: button with data-sitekey and invisible size -->
<button class="g-recaptcha"
        data-sitekey="6LdKlZEU..."
        data-callback="onSubmit"
        data-action="submit">Submit</button>

<!-- Pattern 3: programmatic render with size: invisible -->
<script>
  grecaptcha.render('submit-btn', {
    sitekey: '6LdKlZEU...',
    callback: onSubmit,
    size: 'invisible'
  });
</script>

** نص الكشف (Python): **

import requests
from bs4 import BeautifulSoup
import re

def detect_invisible_recaptcha(url):
    resp = requests.get(url)
    soup = BeautifulSoup(resp.text, "html.parser")

    # Check for data-size="invisible"
    widget = soup.find("div", {"data-size": "invisible", "class": "g-recaptcha"})
    if widget:
        return {
            "type": "invisible",
            "sitekey": widget.get("data-sitekey"),
            "callback": widget.get("data-callback")
        }

    # Check for programmatic render with invisible
    scripts = soup.find_all("script")
    for script in scripts:
        if script.string and "size" in str(script.string) and "invisible" in str(script.string):
            key_match = re.search(r"sitekey['\"]?\s*[:=]\s*['\"]([^'\"]+)", script.string)
            if key_match:
                return {
                    "type": "invisible-programmatic",
                    "sitekey": key_match.group(1),
                    "callback": "check grecaptcha.render() call"
                }

    return None

البرنامج النصي للكشف (Node.js):

const axios = require("axios");
const cheerio = require("cheerio");

async function detectInvisibleRecaptcha(url) {
  const { data } = await axios.get(url);
  const $ = cheerio.load(data);

  // Check for data-size="invisible"
  const widget = $(".g-recaptcha[data-size='invisible']");
  if (widget.length) {
    return {
      type: "invisible",
      sitekey: widget.attr("data-sitekey"),
      callback: widget.attr("data-callback"),
    };
  }

  // Check script tags for programmatic invisible render
  const scriptContent = $("script")
    .map((_, el) => $(el).html())
    .get()
    .join("\n");
  if (scriptContent.includes("invisible")) {
    const keyMatch = scriptContent.match(/sitekey['"]?\s*[:=]\s*['"]([^'"]+)/);
    if (keyMatch) {
      return {
        type: "invisible-programmatic",
        sitekey: keyMatch[1],
        callback: "check grecaptcha.render() call",
      };
    }
  }

  return null;
}

الخطأ 2: مفتاح الموقع الخاطئ — ERROR_WRONG_GOOGLEKEY

يحدث هذا عندما ترسل مفتاح موقع لا يتطابق مع أداة reCAPTCHA غير المرئية في الصفحة المستهدفة. الأسباب الشائعة:

  • نسخ مفتاح الموقع من مربع الاختيار v2 في صفحة مختلفة
  • تم استخدام مفتاح موقع من عنوان URL الأساسي لإصدار reCAPTCHA مختلف
  • تحتوي الصفحة على أدوات reCAPTCHA متعددة وقد اخترت الأداة الخاطئة

الإصلاح: قم باستخراج مفتاح الموقع غير المرئي الصحيح

import requests
from bs4 import BeautifulSoup

def get_invisible_sitekey(url):
    resp = requests.get(url)
    soup = BeautifulSoup(resp.text, "html.parser")

    # Priority 1: invisible widget
    widget = soup.find(attrs={"data-size": "invisible", "class": "g-recaptcha"})
    if widget:
        return widget["data-sitekey"]

    # Priority 2: any g-recaptcha div (may be invisible without data-size)
    widget = soup.find(class_="g-recaptcha")
    if widget and widget.get("data-sitekey"):
        return widget["data-sitekey"]

    return None

sitekey = get_invisible_sitekey("https://example.com/login")
print(f"Sitekey: {sitekey}")

الخطأ 3: لم يتم تنفيذ رد الاتصال - يتم إرسال النموذج ولكن لم يحدث شيء

هذا هو الفشل غير المرئي رقم واحد في reCAPTCHA الذي يفتقده المطورون. على عكس مربع الاختيار v2 حيث يكون إدخال الرمز المميز في g-recaptcha-response كافيًا، يستخدم reCAPTCHA غير المرئي دائمًا وظيفة رد اتصال JavaScript. إذا قمت بإدخال الرمز المميز ولكن لم تقم باستدعاء رد الاتصال، فلن تتم معالجة النموذج أبدًا.

كيف يعمل تدفق رد الاتصال

  1. grecaptcha.execute() يطلق التحدي غير المرئي
  2. بعد الحل، يستدعي Google الوظيفة المحددة في data-callback
  3. تقوم وظيفة رد الاتصال هذه بإرسال النموذج أو إجراء استدعاء API

إصلاح: البحث عن رد الاتصال وتنفيذه

الخطوة 1 — تحديد اسم رد الاتصال:

# From HTML: data-callback="onSubmit"
# From JS: callback: onSubmit
# From grecaptcha.render: second argument with callback property

الخطوة 2 — حقن الرمز المميز واستدعاء رد الاتصال (السيلينيوم):

from selenium import webdriver
import requests
import time

driver = webdriver.Chrome()
driver.get("https://example.com/form")

# Get sitekey
sitekey = driver.find_element("css selector", ".g-recaptcha").get_attribute("data-sitekey")
callback_name = driver.find_element("css selector", ".g-recaptcha").get_attribute("data-callback")

# Solve with CaptchaAI
task_id = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": driver.current_url,
    "invisible": 1
}).text.split("|")[1]

# Poll for result
token = None
for _ in range(60):
    time.sleep(5)
    resp = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY",
        "action": "get",
        "id": task_id
    }).text
    if resp.startswith("OK|"):
        token = resp.split("|")[1]
        break

# Inject token into the response field
driver.execute_script(
    f'document.getElementById("g-recaptcha-response").value = "{token}";'
)

# CRITICAL: Call the callback function
driver.execute_script(f'{callback_name}("{token}");')

الخطوة 2 — إدخال الرمز المميز واستدعاء رد الاتصال (Puppeteer):

const puppeteer = require("puppeteer");
const axios = require("axios");

(async () => {
  const browser = await puppeteer.launch({ headless: "new" });
  const page = await browser.newPage();
  await page.goto("https://example.com/form");

  // Get sitekey and callback
  const { sitekey, callback } = await page.evaluate(() => {
    const el = document.querySelector(".g-recaptcha[data-size='invisible']");
    return {
      sitekey: el?.getAttribute("data-sitekey"),
      callback: el?.getAttribute("data-callback"),
    };
  });

  // Submit to CaptchaAI
  const submitResp = await axios.get("https://ocr.captchaai.com/in.php", {
    params: {
      key: "YOUR_API_KEY",
      method: "userrecaptcha",
      googlekey: sitekey,
      pageurl: page.url(),
      invisible: 1,
    },
  });
  const taskId = submitResp.data.split("|")[1];

  // Poll for result
  let token;
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: "YOUR_API_KEY", action: "get", id: taskId },
    });
    if (result.data.startsWith("OK|")) {
      token = result.data.split("|")[1];
      break;
    }
  }

  // Inject token and fire callback
  await page.evaluate(
    (tok, cb) => {
      document.getElementById("g-recaptcha-response").value = tok;
      if (cb && typeof window[cb] === "function") {
        window[cb](tok);
      }
    },
    token,
    callback,
  );

  await browser.close();
})();

الخطأ 4: المعلمة invisible=1 مفقودة

عند حل اختبار reCAPTCHA غير المرئي من خلال CaptchaAI، يجب عليك تضمين invisible=1 في طلبك. وبدون ذلك، يتعامل الحل مع المهمة على أنها تحدي خانة اختيار قياسي v2، مما قد يؤدي إلى ERROR_CAPTCHA_UNSOLVABLE أو الرموز المميزة التي يرفضها الموقع المستهدف.

الطلب الخاطئ مقابل الطلب الصحيح

# WRONG — missing invisible=1
params = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": page_url
}

# CORRECT — includes invisible=1
params = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": page_url,
    "invisible": 1  # Required for invisible reCAPTCHA
}

response = requests.get("https://ocr.captchaai.com/in.php", params=params)

الخطأ 5: انتهت صلاحية الرمز المميز قبل الإرسال

تنتهي صلاحية رموز reCAPTCHA المميزة خلال 120 ثانية — وهو نفس الإصدار الثاني القياسي. لكن سير العمل غير المرئي غالبًا ما يشتمل على خطوات معالجة إضافية بين الحل والتقديم، مما يجعل انتهاء الصلاحية أكثر احتمالاً.

الأعراض

  • يقوم النموذج بإرجاع خطأ عام بعد حقن الرمز المميز
  • يقوم siteverify من جانب الخادم بإرجاع timeout-or-duplicate
  • كان الرمز صالحًا ولكنه استغرق وقتًا طويلاً للوصول إلى خطوة الإرسال

الإصلاح: الحل في الوقت المناسب

اطلب الحل فقط عندما تكون مستعدًا لتقديمه على الفور:

import requests
import time

def solve_invisible_recaptcha(api_key, sitekey, page_url):
    # Submit task
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": page_url,
        "invisible": 1
    })
    if not resp.text.startswith("OK|"):
        raise Exception(f"Submit failed: {resp.text}")
    task_id = resp.text.split("|")[1]

    # Poll for result
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": 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("Solve timed out after 5 minutes")

# Usage: solve JUST before you need to submit
# 1. Navigate to page and prepare form data first
# 2. THEN solve the captcha
# 3. Inject token and submit immediately
token = solve_invisible_recaptcha("YOUR_API_KEY", sitekey, page_url)
# Submit within 120 seconds of receiving the token

الخطأ 6: تم رفض الرمز المميز — ERROR_BAD_TOKEN_OR_PAGEURL

قام الموقع المستهدف بالتحقق من الرمز المميز مع Google وفشل. الأسباب الشائعة:

السبب كيفية التعرف على إصلاح
خطأ pageurl عنوان URL لا يتطابق مع النطاق الموجود في تسجيل مفتاح الموقع استخدم عنوان URL الدقيق الذي يتم تحميل الأداة فيه
الرمز المستخدم في مجال مختلف إعادة استخدام الرمز المميز عبر المجال حل باستخدام pageurl للمجال الصحيح
الرمز المميز مستخدم بالفعل تقديم نفس الرمز مرتين طلب حل جديد لكل إرسال
عدم تطابق IP IP الخاص بك يختلف عن IP الخاص بالحلال أضف معلمة proxy الخاصة بك لمطابقة عنوان IP للجلسة
العلم غير المرئي مفقود تم حلها كمعيار v2، وتستخدم على صفحة غير مرئية أضف invisible=1 إلى طلب الحل

قائمة التحقق من التصحيح

def debug_invisible_solve(api_key, sitekey, page_url, proxy=None):
    """Run a diagnostic solve with detailed logging."""
    print(f"Sitekey: {sitekey}")
    print(f"Page URL: {page_url}")
    print(f"Proxy: {proxy or 'none'}")

    params = {
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": page_url,
        "invisible": 1
    }
    if proxy:
        params["proxy"] = proxy
        params["proxytype"] = "HTTP"

    # Submit
    resp = requests.get("https://ocr.captchaai.com/in.php", params=params)
    print(f"Submit response: {resp.text}")
    if not resp.text.startswith("OK|"):
        return None

    task_id = resp.text.split("|")[1]
    print(f"Task ID: {task_id}")

    # Poll with timing
    start = time.time()
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get", "id": task_id
        })
        elapsed = time.time() - start
        print(f"  [{elapsed:.0f}s] {result.text[:50]}")
        if result.text.startswith("OK|"):
            token = result.text.split("|")[1]
            print(f"Token received after {elapsed:.0f}s")
            print(f"Token length: {len(token)} characters")
            print(f"Token starts with: {token[:30]}...")
            return token
        if result.text != "CAPCHA_NOT_READY":
            print(f"FAILED: {result.text}")
            return None

    print("TIMEOUT after 5 minutes")
    return None

الخطأ 7: أدوات reCAPTCHA المتعددة في صفحة واحدة

تحتوي بعض الصفحات على مربع اختيار v2 مرئي وreCAPTCHA غير مرئي. إذا قمت بحل المشكلة الخاطئة، فسيكون الرمز صالحًا ولكنه لا يتطابق مع عنصر واجهة المستخدم الذي يحمي الإجراء الذي تحتاجه.

الإصلاح: استهدف الأداة الصحيحة

from bs4 import BeautifulSoup

def find_all_recaptcha_widgets(html):
    soup = BeautifulSoup(html, "html.parser")
    widgets = []

    for el in soup.find_all(class_="g-recaptcha"):
        widgets.append({
            "sitekey": el.get("data-sitekey"),
            "size": el.get("data-size", "normal"),
            "callback": el.get("data-callback"),
            "tag": el.name,
            "id": el.get("id")
        })

    return widgets

# Example output:
# [
#   {"sitekey": "6LdA...", "size": "normal", "callback": None, "tag": "div", "id": "recaptcha-login"},
#   {"sitekey": "6LdB...", "size": "invisible", "callback": "onRegister", "tag": "div", "id": "recaptcha-register"}
# ]
# Use the widget with size="invisible" for the invisible solve

استكمال حل reCAPTCHA غير المرئي مع معالجة الأخطاء

يعالج هذا المجمع الجاهز للإنتاج جميع الأخطاء المذكورة أعلاه:

import requests
import time
import logging

logger = logging.getLogger(__name__)

class InvisibleRecaptchaSolver:
    def __init__(self, api_key, max_retries=3):
        self.api_key = api_key
        self.max_retries = max_retries
        self.base_url = "https://ocr.captchaai.com"

    def solve(self, sitekey, page_url, proxy=None):
        """Solve invisible reCAPTCHA with automatic retry on transient errors."""
        for attempt in range(1, self.max_retries + 1):
            try:
                token = self._attempt_solve(sitekey, page_url, proxy)
                if token:
                    return token
            except Exception as e:
                logger.warning(f"Attempt {attempt} failed: {e}")
                if attempt < self.max_retries:
                    time.sleep(2 ** attempt)
        raise Exception(f"Failed to solve after {self.max_retries} attempts")

    def _attempt_solve(self, sitekey, page_url, proxy):
        params = {
            "key": self.api_key,
            "method": "userrecaptcha",
            "googlekey": sitekey,
            "pageurl": page_url,
            "invisible": 1
        }
        if proxy:
            params["proxy"] = proxy
            params["proxytype"] = "HTTP"

        # Submit task
        resp = requests.get(f"{self.base_url}/in.php", params=params)

        if "ERROR" in resp.text:
            error = resp.text.strip()
            if error in ("ERROR_WRONG_GOOGLEKEY", "ERROR_KEY_DOES_NOT_EXIST"):
                raise Exception(f"Configuration error (do not retry): {error}")
            if error == "ERROR_ZERO_BALANCE":
                raise Exception("Account balance is zero — add funds")
            raise Exception(f"Submit error: {error}")

        if not resp.text.startswith("OK|"):
            raise Exception(f"Unexpected submit response: {resp.text}")

        task_id = resp.text.split("|")[1]

        # Poll for result
        for _ in range(60):
            time.sleep(5)
            result = requests.get(f"{self.base_url}/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":
                continue

            if result.text == "ERROR_CAPTCHA_UNSOLVABLE":
                logger.warning("Captcha unsolvable — will retry with new task")
                return None

            raise Exception(f"Poll error: {result.text}")

        raise Exception("Solve timed out after 5 minutes")


# Usage
solver = InvisibleRecaptchaSolver("YOUR_API_KEY")
token = solver.solve(
    sitekey="6LdKlZEU...",
    page_url="https://example.com/login"
)
print(f"Token: {token[:50]}...")
const axios = require("axios");

class InvisibleRecaptchaSolver {
  constructor(apiKey, maxRetries = 3) {
    this.apiKey = apiKey;
    this.maxRetries = maxRetries;
    this.baseUrl = "https://ocr.captchaai.com";
  }

  async solve(sitekey, pageUrl, proxy) {
    for (let attempt = 1; attempt <= this.maxRetries; attempt++) {
      try {
        const token = await this._attemptSolve(sitekey, pageUrl, proxy);
        if (token) return token;
      } catch (err) {
        console.warn(`Attempt ${attempt} failed: ${err.message}`);
        if (attempt < this.maxRetries) {
          await new Promise((r) => setTimeout(r, 2 ** attempt * 1000));
        }
      }
    }
    throw new Error(`Failed to solve after ${this.maxRetries} attempts`);
  }

  async _attemptSolve(sitekey, pageUrl, proxy) {
    const params = {
      key: this.apiKey,
      method: "userrecaptcha",
      googlekey: sitekey,
      pageurl: pageUrl,
      invisible: 1,
    };
    if (proxy) {
      params.proxy = proxy;
      params.proxytype = "HTTP";
    }

    // Submit task
    const submitResp = await axios.get(`${this.baseUrl}/in.php`, { params });
    if (submitResp.data.includes("ERROR")) {
      const error = submitResp.data.trim();
      if (["ERROR_WRONG_GOOGLEKEY", "ERROR_KEY_DOES_NOT_EXIST"].includes(error)) {
        throw new Error(`Configuration error (do not retry): ${error}`);
      }
      throw new Error(`Submit error: ${error}`);
    }

    const taskId = submitResp.data.split("|")[1];

    // Poll for result
    for (let i = 0; i < 60; i++) {
      await new Promise((r) => setTimeout(r, 5000));
      const result = await axios.get(`${this.baseUrl}/res.php`, {
        params: { key: this.apiKey, action: "get", id: taskId },
      });

      if (result.data.startsWith("OK|")) {
        return result.data.split("|")[1];
      }
      if (result.data === "CAPCHA_NOT_READY") continue;
      if (result.data === "ERROR_CAPTCHA_UNSOLVABLE") return null;
      throw new Error(`Poll error: ${result.data}`);
    }
    throw new Error("Solve timed out after 5 minutes");
  }
}

// Usage
const solver = new InvisibleRecaptchaSolver("YOUR_API_KEY");
solver.solve("6LdKlZEU...", "https://example.com/login").then((token) => {
  console.log(`Token: ${token.substring(0, 50)}...`);
});

قائمة التحقق من استكشاف الأخطاء وإصلاحها

قم بتشغيل قائمة التحقق هذه عند فشل حل reCAPTCHA غير المرئي:

خطوة تحقق كوماند/Action
1 تأكد من أنه غير مرئي، وليس الإصدار الثاني القياسي ابحث عن data-size="invisible" أو size: 'invisible' في استدعاء العرض
2 تحقق من صحة مفتاح الموقع قارن مع data-sitekey على القطعة غير المرئية على وجه التحديد
3 قم بتأكيد invisible=1 في طلب API تحقق من معلمات in.php الخاصة بك
4 تحقق من تطابق pageurl تمامًا استخدم عنوان URL الخاص بـ DevTools للمتصفح، وليس عنوان URL لإعادة التوجيه
5 ابحث عن اسم وظيفة رد الاتصال ابحث عن سمة data-callback أو callback في grecaptcha.render()
6 التحقق من حقن الرمز المميز + مكالمة رد الاتصال كلتا الخطوتين مطلوبتان، فالرمز المميز وحده لا يكفي
7 التحقق من نضارة الرمز المميز يجب استخدام الرمز خلال 120 ثانية
8 اختبر باستخدام الوكيل إذا كان IP مهمًا أضف معلمات proxy وproxytype

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

كيف يختلف اختبار reCAPTCHA غير المرئي عن معيار الإصدار الثاني في الحل؟

طريقة API هي نفسها (method=userrecaptcha)، ولكن يجب عليك إضافة invisible=1 إلى طلبك. يكمن الاختلاف الحاسم في جانب الحقن: يتطلب اختبار reCAPTCHA غير المرئي دائمًا استدعاء وظيفة رد اتصال JavaScript بعد حقن الرمز المميز، بينما يعمل معيار v2 عادةً مع الحقل المخفي فقط.

لماذا يعمل الرمز المميز الخاص بي في الاختبار ولكنه يفشل في الإنتاج؟

على الأرجح عدم تطابق IP. في الاختبار، قد يتشارك كل من أداة الحل والمتصفح الخاص بك في عناوين IP مماثلة. في الإنتاج، يختلف عنوان IP الخاص بالحلال وعنوان IP الخاص بخادمك. أضف معلمة وكيل تطابق عنوان IP الخاص بجلستك لإصلاح هذه المشكلة.

ما المدة التي يستغرقها حل اختبار reCAPTCHA غير المرئي؟

أوقات الحل النموذجية هي 10-30 ثانية حتى CaptchaAI. تعد التحديات غير المرئية بشكل عام أسرع من تحديات مربع الاختيار v2 لأنها لا تتطلب التعرف على الصور - فهي تعتمد على تحليل المخاطر.

هل يمكنني حل اختبار reCAPTCHA غير المرئي بدون متصفح؟

نعم. نظرًا لأن الحل يحدث من جانب الخادم من خلال واجهة برمجة التطبيقات، فأنت تحتاج فقط إلى مفتاح الموقع وعنوان URL للصفحة. المتصفح مطلوب فقط إذا كان يجب عليك تنفيذ وظيفة رد الاتصال على الصفحة الفعلية. للحصول على سير عمل API خالص، قم باستخراج مفتاح الموقع وحل المشكلة عبر CaptchaAI وإرسال الرمز المميز مع طلب HTTP الخاص بك.


الخطوات التالية

أدلة ذات صلة

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