CaptchaNo
[ التكامل ]

أداة حل الكابتشا لـ
Selenium

حلّ التحدي داخل التشغيل بدلًا من إفشال المهمة. مثال عملي بلغة ⁦Python⁩، والعوامل الثلاثة التي تحدد قبول الرمز token.

Selenium · Python
import time
import requests

CAPTCHANO_KEY = "cn-YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {CAPTCHANO_KEY}"}

def solve(task: dict) -> dict:
    """Block until solved; returns e.g. {"token": "...", "userAgent": "..."}."""
    r = requests.post(
        "https://api.captchano.com/v1/solve",
        params={"wait": 60},
        json=task,
        headers=HEADERS,
        timeout=75,
    )
    data = r.json()
    # A solve can outlast the 60 s wait: poll the task until it finishes.
    while data.get("status") in ("queued", "solving"):
        time.sleep(5)
        data = requests.get(
            f"https://api.captchano.com/v1/task/{data['id']}",
            headers=HEADERS,
            timeout=30,
        ).json()
    if data.get("status") != "ready":
        raise RuntimeError(data.get("error") or data)
    return data["solution"]

from selenium import webdriver
from selenium.webdriver.common.by import By

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

sitekey = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-sitekey")
solution = solve({"type": "recaptcha_v2", "sitekey": sitekey, "url": driver.current_url})

driver.execute_script(
    "document.getElementById('g-recaptcha-response').value = arguments[0]",
    solution["token"],
)
driver.find_element(By.CSS_SELECTOR, "form").submit()

ما الذي يحدد قبول الرمز token

  1. مرّر البروكسي الخاص بك. يجب أن يُنشأ الرمز token خلف عنوان IP الخروج نفسه الذي يرسله. وفي الأنظمة التي تقيّم الجلسة، يكون هذا إلزاميًا، وليس مجرد تحسين.
  2. طابِق وكيل المستخدم. يربط Turnstile وعدة أنظمة حماية من الروبوتات الرمز token بوكيل مستخدم. نُعيد لك الوكيل المستخدَم كي تعيد استخدامه كما هو تمامًا.
  3. اطلب متأخرًا. تنتهي صلاحية الرموز token خلال 120 ثانية تقريبًا. اطلب رمزًا عندما تكون مستعدًا للإرسال.

الانتظار المتزامن أم الاستطلاع الدوري

يستخدم المثال ?wait=60، فيُعيد الاستدعاء عملية الحل مكتملة وتبقى خطوة ⁦Selenium⁩ لديك خطية. وإن كنت تفضّل عدم إبقاء الاتصال مفتوحًا، فاحذف المعامل، واحتفظ بالمعرّف id المُعاد، واستطلع GET /v1/task/{id} كل خمس ثوانٍ. يبقى الرمز token الذي دفعت ثمنه قابلًا للاسترجاع لمدة عشر دقائق، لذا فإن انقطاع الاتصال لا يُفقدك عملية الحل.

التكلفة

⁦$0.00598⁩ لكل عملية حل ناجحة لـ reCAPTCHA v2، ولا تُحتسب عمليات الحل الفاشلة أبدًا. راجع الأسعار لكل أنواع التحديات، أو مرجع API للاطلاع على شكل الطلب الكامل.

[ موقعه في سير العمل ]

كيف تندمج عملية الحل في ⁦Selenium⁩

يتحكم Selenium في متصفح حقيقي، لذا يظهر التحدي تمامًا كما يراه المستخدم. اقرأ sitekey من DOM، واطلب رمز token، ثم اكتبه مجددًا باستخدام execute_script قبل النقر على زر الإرسال.

  1. 01
    حمّل الصفحة

    افتح الصفحة المستهدفة بالبروكسي ووكيل المستخدم اللذين سترسل منهما.

  2. 02
    اقرأ sitekey

    استخدم find_element مع [data-sitekey] واقرأ السمة، إضافة إلى data-callback إن وُجدت.

  3. 03
    الحل

    أرسل بطلب POST كلًّا من type وsitekey وdriver.current_url إلى /v1/solve?wait=60 مع البروكسي ووكيل المستخدم نفسيهما.

  4. 04
    الإدراج والإرسال

    استخدم execute_script لملء حقل الاستجابة وتشغيل callback، ثم انقر على زر الإرسال.

إدراج الرمز token في الصفحة

يضبط driver.execute_script الحقل المخفي g-recaptcha-response أو cf-turnstile-response، ويستدعي callback الخاص بالأداة إذا كانت الصفحة تستخدم واحدًا.

[ المزالق ]

أين تخطئ عمليات التكامل عادةً

لم يُستدعَ callback قط

كثير من الصفحات تفعّل زر الإرسال من خلال callback الخاص بالأداة. ملء الحقل وحده يترك الزر معطّلًا.

لم يُعثر على الحقل المخفي

يُنشأ حقل textarea الخاص بالاستجابة عند عرض الأداة. انتظر ظهور iframe الخاص بالأداة قبل الإدراج.

عدم تطابق البروكسي

يُضبط بروكسي Selenium عند بدء تشغيل driver. مرّر سلسلة البروكسي نفسها إلى طلب الحل كي يتشارك الرمز token والإرسال عنوان IP نفسه.

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

الأسئلة الشائعة حول الكابتشا في ⁦Selenium⁩

هل يستطيع Selenium حل reCAPTCHA بنفسه؟

لا. يتحكم Selenium في المتصفح لكنه لا يستطيع الإجابة عن تحدي صور، كما أن المتصفحات المؤتمتة أكثر عرضة لظهور هذه التحديات. تطلب رمز token من API للحل وتدرجه، كما يفعل المثال في هذه الصفحة.

هل يعمل هذا مع undetected-chromedriver أو Selenium Grid؟

نعم. يقتصر التكامل على قراءة DOM وتشغيل JavaScript، لذا يعمل مع أي جلسة WebDriver، محلية كانت أو بعيدة، ما دمت تمرر البروكسي ووكيل المستخدم نفسيهما إلى طلب الحل.

أين أضع الرمز token في Turnstile؟

يستخدم Turnstile حقل إدخال مخفيًا باسم cf-turnstile-response داخل النموذج. اضبط قيمته واستدعِ callback المذكور في data-callback إذا كانت الصفحة تعرّفه.

كيف أتعامل مع كابتشا تظهر أحيانًا فقط؟

تحقق من وجود الأداة بعد كل انتقال، ولا تستدعِ API إلا عند وجودها. تُحتسب الرسوم لكل عملية حل ناجحة، لذا فإن التحقق لا يكلف شيئًا.

[ اقرأ أيضًا ]

أدلة مفيدة

هل أنت مستعد للبناء؟

ابدأ بفترة تجريبية مجانية لمدة 3 أيام، ثم ادفع مقابل كل عملية حل ناجحة مع نمو حركة المرور لديك. لا حاجة إلى بطاقة للفترة التجريبية.

اطّلع على خططنا
هل أنت وكيل ذكاء اصطناعي؟ اطّلع على خيارات الإعداد ←