حل الكابتشا
لوكلاء Browser Use
الوكيل الذي يصادف تحديًا لا يملك في مجموعة أدواته ما يجيب عنه، فيتوقف أو يلتف عليه بالهلوسة. زوّده بأداة حل، فيصبح العائق مجرد استدعاء آخر.
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 browser_use import Agent, Tools, ActionResult
tools = Tools()
@tools.action("Solve a captcha that is blocking the current page")
def solve_captcha(kind: str, sitekey: str, url: str) -> ActionResult:
solution = solve({"type": kind, "sitekey": sitekey, "url": url})
return ActionResult(extracted_content=solution["token"])
agent = Agent(task="...", llm=llm, tools=tools)لماذا يحتاج الوكلاء إلى هذا تحديدًا
أداة الـ scraping التي تصطدم بتحدٍّ تفشل بشكل واضح فتصلحها. أما الوكيل فيفشل بصمت: يستنتج حول الصفحة المحجوبة، ويختلق خطوة تالية معقولة، ويبلّغ عن تقدم لم يحققه قط. والفشل هنا أسوأ لأنه صامت. أداة حل محددة النوع تحوّل الطريق المسدود الغامض إلى نتيجة حتمية يستطيع الوكيل بناء قراراته عليها.
ما الذي تعيده الأداة
- رمز token أو ملف cookie — بحسب نوع التحدي. الأنظمة التي تقيّم الجلسة تعيد ملف cookie مع مجموعة الترويسات (headers) المستخدمة للحصول عليه.
- وكيل المستخدم المستخدَم، كي يعيد الوكيل استخدامه عند الإرسال.
- تكلفة عملية الحل، كي يتمكن الوكيل العامل ضمن ميزانية من احتسابها بدلًا من الإنفاق دون رؤية.
إبقاء الحلقة محدودة
امنح الوكيل ميزانية حل لكل تشغيل. تبلّغ كل استجابة عن تكلفتها، لذا يمكن لجهة الإشراف قطع الحلقة عندما يتجاوز الإنفاق حدًا معينًا بدلًا من اكتشاف ذلك في الفاتورة. بسعر $0.00598 لكل عملية حل، تكلف عملية تشغيل الوكيل المعتادة بضعة سنتات أو أقل، لكن حلقة إعادة المحاولة غير المحدودة تبقى حلقة غير محدودة.
اجعل استدعاء الأداة متزامنًا (blocking)
تستدعي الأمثلة ?wait=60، فتعيد الأداة رمز token جاهزًا في خطوة واحدة. وهذا أهم للوكلاء منه للسكربتات: الأداة التي تعيد "ما زال الحل جاريًا" تجبر النموذج على التفكير في الاستطلاع الدوري (polling)، وهو ما يجيده بشكل سيئ. إذا احتجت إلى سقف أطول، فارفع wait حتى 120 ثانية. أشكال الطلبات لكل أنواع التحديات موجودة في مرجع API.
كيف تندمج عملية الحل في Browser Use
يتيح لك Browser Use تسجيل إجراءات مخصصة. يقرأ إجراء الحل sitekey من الصفحة الحالية، ويحصل على رمز token ويدرجه، فيتابع الوكيل عمله في المتصفح نفسه.
- 01سجّل إجراءً
أضف إجراء حل إلى أدوات الوكيل مع وصف واضح.
- 02اقرأ الصفحة الحالية
يقرأ الإجراء sitekey وعنوان URL من جلسة المتصفح المتوفرة لديه بالفعل.
- 03الحل والإدراج
استدعِ API، ثم أدرج الرمز token في الصفحة نفسها.
- 04أبلغ بالنتيجة
أعِد نتيجة قصيرة كي يعرف الوكيل أنه يستطيع المتابعة.
إدخال الرمز token في الصفحة
يشغّل الإجراء JavaScript في صفحة الوكيل نفسها لملء الحقل وتشغيل callback.
أين تخطئ عمليات التكامل عادةً
أرسل البروكسي الذي يستخدمه متصفح الوكيل كي يتشارك الرمز token والصفحة عنوان IP نفسه.
أخبر الوكيل في وصف الإجراء ألا ينقر على الأداة بنفسه؛ فالإجراء يتولى ذلك.
الأسئلة الشائعة حول الكابتشا في Browser Use
هل يحل Browser Use الكابتشا بنفسه؟
يستطيع النقر على مربع اختيار، لكنه لا يستطيع الإجابة عن تحديات الصور، والمتصفحات المؤتمتة كثيرًا ما تُعرض عليها. إجراء حل مخصص يجعل النتيجة حتمية.
هل يعمل مع Browser Use cloud؟
لا يحتاج الإجراء إلا إلى اتصال HTTPS صادر والقدرة على تشغيل JavaScript في الصفحة، لذا يعمل أينما يعمل وكيلك.
ماذا عن Turnstile؟
الإجراء نفسه بنوع مختلف. اقرأ sitekey الخاص بـ Turnstile وأرسل type بقيمة turnstile.
كيف أمنع الوكيل من الدخول في حلقة؟
احسب عمليات الحل لكل مهمة وأوقف الوكيل بعد تجاوز حد معين. تتضمن كل نتيجة تكلفتها إن كنت تفضّل ميزانية إنفاق.
أدلة مفيدة
هل أنت مستعد للبناء؟
ابدأ بفترة تجريبية مجانية لمدة 3 أيام، ثم ادفع مقابل كل عملية حل ناجحة مع نمو حركة المرور لديك. لا حاجة إلى بطاقة للفترة التجريبية.