أداة حل الكابتشا لـ
Scrapy
حلّ التحدي داخل التشغيل بدلًا من إفشال المهمة. مثال عملي بلغة Python، والعوامل الثلاثة التي تحدد قبول الرمز token.
# middlewares.py
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"]
class CaptchaNoMiddleware:
def process_response(self, request, response, spider):
sitekey = response.css("[data-sitekey]::attr(data-sitekey)").get()
if not sitekey:
return response
solution = solve({"type": "recaptcha_v2", "sitekey": sitekey, "url": response.url})
return request.replace(
method="POST",
body=f"g-recaptcha-response={solution['token']}",
headers={"Content-Type": "application/x-www-form-urlencoded"},
dont_filter=True,
)ما الذي يحدد قبول الرمز token
- مرّر البروكسي الخاص بك. يجب أن يُنشأ الرمز token خلف عنوان IP الخروج نفسه الذي يرسله. وفي الأنظمة التي تقيّم الجلسة، يكون هذا إلزاميًا، وليس مجرد تحسين.
- طابِق وكيل المستخدم. يربط Turnstile وعدة أنظمة حماية من الروبوتات الرمز token بوكيل مستخدم. نُعيد لك الوكيل المستخدَم كي تعيد استخدامه كما هو تمامًا.
- اطلب متأخرًا. تنتهي صلاحية الرموز token خلال 120 ثانية تقريبًا. اطلب رمزًا عندما تكون مستعدًا للإرسال.
الانتظار المتزامن أم الاستطلاع الدوري
يستخدم المثال ?wait=60، فيُعيد الاستدعاء عملية الحل مكتملة وتبقى خطوة Scrapy لديك خطية. وإن كنت تفضّل عدم إبقاء الاتصال مفتوحًا، فاحذف المعامل، واحتفظ بالمعرّف id المُعاد، واستطلع GET /v1/task/{id} كل خمس ثوانٍ. يبقى الرمز token الذي دفعت ثمنه قابلًا للاسترجاع لمدة عشر دقائق، لذا فإن انقطاع الاتصال لا يُفقدك عملية الحل.
التكلفة
$0.00598 لكل عملية حل ناجحة لـ reCAPTCHA v2، ولا تُحتسب عمليات الحل الفاشلة أبدًا. راجع الأسعار لكل أنواع التحديات، أو مرجع API للاطلاع على شكل الطلب الكامل.
كيف تندمج عملية الحل في Scrapy
لا يحتوي Scrapy على متصفح، لذا تُعالج الكابتشا في downloader middleware: اكتشف التحدي في الاستجابة، وحلّه، ثم أعد الطلب مع الرمز token أو ملف cookie.
- 01الاكتشاف في process_response
ابحث عن data-sitekey أو صفحة تحدٍّ معروفة في جسم الاستجابة.
- 02الحل
استدعِ API مع sitekey وresponse.url والبروكسي من request.meta.
- 03إعادة المحاولة مع الرمز token
أعِد FormRequest يحمل الرمز token، أو الطلب الأصلي مع ملف cookie الناتج عن الحل.
- 04احتفظ بمخزن ملفات cookie
دع cookie middleware في Scrapy يحتفظ بالجلسة المجتازة للطلبات التالية.
إدراج الرمز token في الصفحة
تضيف الـ middleware الرمز token إلى بيانات النموذج أو تضبط ملف cookie المُعاد، ثم تُعيد Request جديدًا.
أين تخطئ عمليات التكامل عادةً
استدعاء HTTP متزامن داخل middleware يعطّل كل الطلبات. استخدم عميلًا غير متزامن أو خيط تنفيذ (thread) منفصلًا لعملية الحل.
إذا كانت proxy middleware تدوّر عناوين IP مع كل طلب، فثبّت عنوان IP لإعادة المحاولة كي يطابق طلب الحل.
حدّد سقفًا لإعادة المحاولة لكل عنوان URL. الصفحة التي تعرض تحديًا في كل مرة تخبرك بأن تبطئ.
الأسئلة الشائعة حول الكابتشا في Scrapy
هل يستطيع Scrapy حل تحديات JavaScript؟
لا يشغّل Scrapy لغة JavaScript. في تحديات الرموز token لا تحتاج إلا إلى sitekey وعنوان URL؛ أما في الأنظمة التي تقيّم الجلسة مثل DataDome فترسل عنوان URL للتحدي وتتلقى ملف cookie يستطيع Scrapy إعادة استخدامه.
هل يجب أن أستخدم scrapy-playwright بدلًا من ذلك؟
فقط إذا كانت الصفحة تحتاج إلى JavaScript لعرض محتواها. في الكابتشا القائمة على الرموز token، يكون أسلوب الـ middleware أخف وأسرع من تشغيل متصفح لكل طلب.
أين يجب أن توضع الـ middleware؟
بعد proxy middleware وقبل retry middleware، كي ترى البروكسي الذي سيُستخدم ولا تُحتسب إعادة محاولاتها الخاصة مرتين.
كيف أتجنب الدفع مقابل عمليات حل متكررة؟
احتفظ بملفات cookie بين الطلبات ونظّم وتيرة الزحف. غالبًا ما تبقى الجلسة المجتازة صالحة لصفحات كثيرة، ولا تُحتسب الرسوم إلا على عمليات الحل الناجحة.
أدلة مفيدة
هل أنت مستعد للبناء؟
ابدأ بفترة تجريبية مجانية لمدة 3 أيام، ثم ادفع مقابل كل عملية حل ناجحة مع نمو حركة المرور لديك. لا حاجة إلى بطاقة للفترة التجريبية.