الانتقال إلى المحتوى
الأدلة

مرحّل المتصفح في OpenClaw

قيادة متصفح حقيقي من الوكيل

مدة القراءة: ⁨7⁩ د

يستطيع وكيلك جلب صفحة، لكن الجلب ليس كالاستخدام. علامة التبويب المهمة مسجّل الدخول فيها أصلًا، وهي على حاسوب محمول في غرفة أخرى، وGateway يعمل على خادم في مكان آخر تمامًا. وجواب OpenClaw هو ترحيل إجراءات المتصفح إلى الجهاز الذي يوجد عليه المتصفح فعلًا، ثم إبقاؤها هناك.

أربعة أماكن يمكن أن يوجد فيها المتصفح

  • التحكم المحلي، وهو الافتراضي. يبدأ Gateway خدمة التحكم على loopback ويمكنه تشغيل متصفح محلي. والإجراءات التي لا تستهدف علامة تبويب بعينها، مثل open أو navigate أو openclaw browser start، يمكنها تشغيله؛ أما الإجراء الذي يسمّي علامة تبويب بواسطة targetId أو معرّف علامة التبويب أو تسميتها فلا يبدأ أبدًا متصفحًا متوقفًا، لأن المتصفح الجديد لا يمكن أن يحتوي تلك العلامة.
  • التحكم عن بعد عبر مضيف عقدة. تشغّل مضيف عقدة على الجهاز الذي يوجد عليه المتصفح، ويمرر Gateway إجراءات المتصفح إليه. وتعرض العقدة خادم التحكم المحلي بالمتصفح الخاص بها عبر أمر proxy، لذا لا يحتاج Gateway إلى الملف التنفيذي للمتصفح إطلاقًا.
  • بروتوكول CDP عن بعد. اضبط المفتاح cdpUrl تحت ملف التعريف الخاص بك في browser.profiles، أو المفتاح القديم browser.cdpUrl الخاص بملف التعريف الواحد، للاتصال بمتصفح بعيد مبني على Chromium. وفي هذه الحالة لن يشغّل OpenClaw متصفحًا محليًا خاصًا به.
  • خدمات loopback في وضع الاتصال فقط. بالنسبة إلى خدمة CDP مدارة خارجيًا ومنشورة على 127.0.0.1، والحالة الشائعة هي Browserless داخل Docker، اضبط أيضًا attachOnly: true. أما CDP على loopback دون attachOnly فيُعامل كملف تعريف محلي يديره OpenClaw، وقد يبلغ OpenClaw بأن المنفذ مستخدم لكنه ليس مملوكًا لـ OpenClaw.
بمجرد أن يصل إجراء إلى العقدة، تبقى اللقطة أو الإعدادات التالية له على تلك العقدة بدلًا من التبديل بين المتصفحات.

يُحسم التوجيه مرة واحدة، لا مع كل إجراء

يفضّل التوجيه التلقائي المضيف، بما في ذلك متصفح مدار متوقف يكون ملفه التنفيذي مثبتًا فقط. أما الهدف الصريح node، أو محدد العقدة، أو gateway.nodes.browser.node، فيتجاوز هذا التفضيل، بينما يبقى target=host دائمًا على المضيف. وأيًّا كان المالك المختار، فإنه يحتفظ بكل شيء بعد ذلك: اتصالات existing-session وextension وattach-only وCDP عن بعد تنتمي إليه حتى في غياب ملف تنفيذي لمتصفح مدار، وإخفاقات التشغيل، وإعدادات الملف التنفيذي غير الصالحة، وأخطاء الأذونات، وإخفاقات إجراءات الصفحة تبقى لدى ذلك المالك بدلًا من إعادة تنفيذها على جهاز آخر. ولا يُسمح بالرجوع التلقائي إلى المضيف من عقدة مختارة إلا قبل أن تعالج تلك العقدة أي طلب، وهذا هو معنى الجملة أعلاه عمليًا. وهذا ما يجعل مهمة المتصفح متعددة الخطوات متماسكة: فاللقطة التي تتصرف بناءً عليها ومراجع العناصر (refs) التي أعادتها تصف متصفحًا واحدًا، لا اثنين.

حدود يحافظ عليها المرحّل

  • تأتي ملفات التعريف من إعدادات browser.profiles الخاصة بالعقدة نفسها، تمامًا كما لو كنت جالسًا أمام ذلك الجهاز. ولا يفرض Gateway قائمة ملفات التعريف الخاصة به على العقدة.
  • تُرفض التعديلات الدائمة على ملفات التعريف عبر أمر proxy أيًّا كانت إعداداته: فالأوامر create-profile وdelete-profile وreset-profile محظورة بغض النظر عن allowProfiles. نفّذ هذه التغييرات على العقدة مباشرة.
  • الإعداد nodeHost.browserProxy.allowProfiles اختياري. إذا تُرك فارغًا، تبقى كل ملفات التعريف المهيأة قابلة للوصول عبر proxy، وهو السلوك الافتراضي القديم. وإذا ضبطته، يعامله OpenClaw كحد لأقل الامتيازات يقيّد أسماء ملفات التعريف التي سيستهدفها proxy. ولإيقاف المسار كله، استخدم nodeHost.browserProxy.enabled=false على العقدة، أو gateway.nodes.browser.mode=off على Gateway، الذي يقبل أيضًا auto وmanual.

يرى الوكيل أداة واحدة للترتيبات الأربعة كلها: أداة browser واحدة تغطي doctor، status، start، stop، tabs، open، focus، close، snapshot، screenshot، navigate، act، requests، errors، text وemulate، مع وسيط profile لتحديد المتصفح ووسيط target قيمته sandbox أو host أو node لتحديد الجهاز. وقد يعني الفعل نفسه أشياء مختلفة حسب الوضع. فالإجراء stop على ملف تعريف محلي مدار ينهي العملية التي شغّلها OpenClaw، بينما على ملفات التعريف attach-only وCDP عن بعد يغلق جلسة التحكم النشطة ويحرر تجاوزات المحاكاة في Playwright وCDP الخاصة بإطار العرض ونظام الألوان واللغة والمنطقة الزمنية ووضع عدم الاتصال، رغم أن OpenClaw لم يشغّل أي عملية متصفح هناك قط. ويتبع إعداد headless القاعدة نفسها، لأنه لا يؤثر إلا في ملفات التعريف المحلية المدارة التي يشغّلها OpenClaw. قائمة الإجراءات الكاملة ووسائطها موجودة في صفحة إجراءات أداة browser، أما ما هو مضيف العقدة فعلًا، وكيف يتم إقرانه، وما الذي يمكنه حمله أيضًا، فموجود في صفحة عقد المتصفح.

المتصفحات المستضافة وأشكال الرابط الثلاثة

يقبل OpenClaw ثلاثة أشكال لرابط CDP ويختار استراتيجية الاتصال لكل منها تلقائيًا. فالأساس ⁨http://⁩ أو ⁨https://⁩ يعني الاكتشاف: يستدعي OpenClaw المسار ⁨/json/version⁩، ويقرأ رابط WebSocket الخاص بالمصحح، ويتصل، دون رجوع إلى WebSocket. أما نقطة النهاية المباشرة ⁨ws://⁩ أو ⁨wss://⁩ ذات المسار ⁨/devtools/browser⁩ أو page أو worker أو shared_worker أو service_worker فتتخطى ⁨/json/version⁩ كليًا. وجذر WebSocket المجرد الذي لا يحتوي مسار ⁨/devtools⁩، وهو ما يعطيك إياه Browserless وBrowserbase، يجرب اكتشاف HTTP أولًا ثم يعود إلى مصافحة مباشرة عند الجذر إذا لم يقدم الاكتشاف شيئًا صالحًا للاستخدام. وتحمل هذه الروابط عادةً التفويض على شكل رمز في الاستعلام أو بيانات اعتماد HTTP Basic، ويحافظ OpenClaw على هذه المصادقة عند استدعاء نقاط النهاية ⁨/json/*⁩ وعند فتح WebSocket الخاص بـ CDP، لذا تعامل مع الرابط كله على أنه سر واحفظه في متغير بيئة أو مدير أسرار بدلًا من ملف إعدادات. وتستخدم التشخيصات منطق الاكتشاف أولًا ثم الرجوع إلى WebSocket نفسه الذي يستخدمه الاتصال وقت التشغيل، لذا فإن الجذر المجرد الذي يتصل لا تبلغ عنه واجهة API للتحكم في المتصفح على أنه غير قابل للوصول. والوضع الوحيد للمتصفح المسجّل الدخول الذي لا يحتاج إلى cdpUrl إطلاقًا هو مرحّل إضافة Chrome، الذي يملك نقطة نهاية loopback خاصة به ويقود علامات تبويب حقيقية دون وجود أحد أمام الحاسوب.

على Diali

يتولى Diali استضافة OpenClaw كخدمة مدارة. يحصل كل عميل على مساعده الخاص على محركه الخاص بدلًا من مقعد في مجموعة مشتركة. تُولّد إعدادات المحرك من لوحة التحكم لديك وتُكتب من جديد مع كل إصدار، لذا فإن كتلة browser التي تضبطها في الواجهة هي نفسها التي يقلع بها الوكيل. وكل ما يحتفظ به الوكيل موجود على وحدة تخزين دائمة، مع لقطات يومية واستعادة بنقرة واحدة متاحة عبر إضافة «النسخ الاحتياطية» (مضمّنة في Max). تصف صفحة OpenClaw المستضاف على Diali المحرك المستضاف، وتعرض صفحة أسعار Diali الخطط.

  • يرحّل مضيف العقدة إجراءات المتصفح إلى الجهاز الذي يملك المتصفح.
  • بمجرد أن يصل إجراء إلى عقدة، يبقى باقي المهمة هناك.
  • يمنع attachOnly الخلط بين خدمة CDP على loopback وملف تعريف مدار.
ابدأ الآن

كفاك قراءة، ابنِ وكيلك الخاص

جهز وكيلًا، واختر قناة، واجعله يعمل داخل التطبيق المفتوح لديك دائمًا.