أداة حل الكابتشا لـ
Selenium
حلّ التحدي داخل التشغيل بدلًا من إفشال المهمة. مثال عملي بلغة Python، والعوامل الثلاثة التي تحدد قبول الرمز token.
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
- مرّر البروكسي الخاص بك. يجب أن يُنشأ الرمز token خلف عنوان IP الخروج نفسه الذي يرسله. وفي الأنظمة التي تقيّم الجلسة، يكون هذا إلزاميًا، وليس مجرد تحسين.
- طابِق وكيل المستخدم. يربط Turnstile وعدة أنظمة حماية من الروبوتات الرمز token بوكيل مستخدم. نُعيد لك الوكيل المستخدَم كي تعيد استخدامه كما هو تمامًا.
- اطلب متأخرًا. تنتهي صلاحية الرموز token خلال 120 ثانية تقريبًا. اطلب رمزًا عندما تكون مستعدًا للإرسال.
الانتظار المتزامن أم الاستطلاع الدوري
يستخدم المثال ?wait=60، فيُعيد الاستدعاء عملية الحل مكتملة وتبقى خطوة Selenium لديك خطية. وإن كنت تفضّل عدم إبقاء الاتصال مفتوحًا، فاحذف المعامل، واحتفظ بالمعرّف id المُعاد، واستطلع GET /v1/task/{id} كل خمس ثوانٍ. يبقى الرمز token الذي دفعت ثمنه قابلًا للاسترجاع لمدة عشر دقائق، لذا فإن انقطاع الاتصال لا يُفقدك عملية الحل.
التكلفة
$0.00598 لكل عملية حل ناجحة لـ reCAPTCHA v2، ولا تُحتسب عمليات الحل الفاشلة أبدًا. راجع الأسعار لكل أنواع التحديات، أو مرجع API للاطلاع على شكل الطلب الكامل.
كيف تندمج عملية الحل في Selenium
يتحكم Selenium في متصفح حقيقي، لذا يظهر التحدي تمامًا كما يراه المستخدم. اقرأ sitekey من DOM، واطلب رمز token، ثم اكتبه مجددًا باستخدام execute_script قبل النقر على زر الإرسال.
- 01حمّل الصفحة
افتح الصفحة المستهدفة بالبروكسي ووكيل المستخدم اللذين سترسل منهما.
- 02اقرأ sitekey
استخدم find_element مع [data-sitekey] واقرأ السمة، إضافة إلى data-callback إن وُجدت.
- 03الحل
أرسل بطلب POST كلًّا من type وsitekey وdriver.current_url إلى /v1/solve?wait=60 مع البروكسي ووكيل المستخدم نفسيهما.
- 04الإدراج والإرسال
استخدم execute_script لملء حقل الاستجابة وتشغيل callback، ثم انقر على زر الإرسال.
إدراج الرمز token في الصفحة
يضبط driver.execute_script الحقل المخفي g-recaptcha-response أو cf-turnstile-response، ويستدعي 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 أيام، ثم ادفع مقابل كل عملية حل ناجحة مع نمو حركة المرور لديك. لا حاجة إلى بطاقة للفترة التجريبية.