كيفية التعامل مع مصادقة الوكيل في Selenium Webdriver

جميع محتوياتنا مكتوبة بالكامل بواسطة كتّاب بشريين؛ ولا ننشر أي محتوى مُولّد بواسطة الذكاء الاصطناعي. قد نحصل على عمولات تسويقية للمنتجات المُوصى بها. اعرف المزيد.

How to Handle Proxy Authentication in Selenium Webdriver is easiest when you first identify what is configured, what you are allowed to change, and how you will verify the result. The goal is to pass authorized proxy credentials to Selenium without hard-coding secrets carelessly, with close attention to browser support, credential storage, headless behavior, and test isolation. Skipping those checks can create brittle tests or leak usernames and passwords into source control and logs. This guide walks through the task in a controlled order, explains what each setting means, and includes checks that help you reverse a change or troubleshoot the connection without guessing.

Before You Start: How to Handle Proxy Authentication in Selenium Webdriver

Prepare the required information before changing a device, browser, or application. To pass authorized proxy credentials to Selenium without hard-coding secrets carelessly, confirm the following items and keep a record of the original settings so you can restore them if needed:

  • دعم المتصفح: حوّل هذه الميزة إلى متطلب قابل للقياس وتحقق منها مقابل الجهاز المقصود والهدف وقواعد التشغيل.
  • Credential storage: قم بتوثيق الجهة التي تدير الخدمة، وكيفية التحقق من الوصول، وما هي البيانات التي يمكن تسجيلها، وما هي حركة المرور التي تظل مشفرة من طرف إلى طرف.
  • Headless behavior: حوّل هذه الميزة إلى متطلب قابل للقياس وتحقق منها مقابل الجهاز المقصود والهدف وقواعد التشغيل.
  • Test isolation: حوّل هذه الميزة إلى متطلب قابل للقياس وتحقق منها مقابل الجهاز المقصود والهدف وقواعد التشغيل.

ما هو البروكسي؟

الخادم الوكيل هو وسيط يرسل الطلبات إلى مواقع الويب نيابةً عن متصفحك. يرى الموقع المستهدف عنوان IP الخاص بالخادم الوكيل بدلاً من الجهاز الذي يُشغّل Selenium. تستخدم فرق الاختبار الخوادم الوكيلة للتحقق من صحة تجارب المستخدمين في مناطق محددة، وتوجيه حركة البيانات عبر شبكات مُتحكّم بها، وفحص الطلبات، أو توزيع أحمال العمل الآلية.

يحتوي عنوان URL الخاص بالوكيل عادةً على اسم المضيف والمنفذ، مثل: proxy.example.test:8080قد تتطلب الخدمات الخاصة أيضًا اسم مستخدم وكلمة مرور. يستطيع Selenium تهيئة نقطة نهاية الوكيل من خلال خيارات المتصفح، ولكن مطالبات المصادقة تخضع لسيطرة المتصفح ولا تُعرض دائمًا لـ WebDriver كما هو الحال في نموذج HTML عادي.

اختر شبكة مناسبة: تُعد العناوين الثابتة ملائمة لقوائم السماح، بينما تُناسب الشبكات المتغيرة عمليات جمع البيانات على نطاق واسع. دليل مزودي خدمات البروكسي السكنية يشرح الاختلافات العملية.

استخدم الأتمتة فقط عندما يكون لديك ترخيص بذلك، واحترم شروط الموقع الإلكتروني، واحتفظ ببيانات الاعتماد بعيدًا عن شفرة المصدر وسجلات الاختبار.

الفرق بين SOCKS وHTTP Proxy

تُدرك خوادم بروكسي HTTP حركة مرور الويب، وعادةً ما تُهيأ بقيم HTTP وHTTPS منفصلة. أما خوادم بروكسي SOCKS فتعمل على مستوى أدنى، ويمكنها نقل أنواع مختلفة من حركة مرور TCP دون تفسير بروتوكول التطبيق. يدعم SOCKS5 أيضًا المصادقة، وهو عادةً الإصدار المُفضّل من SOCKS.

مميز وكيل HTTP/HTTPS وكيل SOCKS5
مرور مصمم لطلبات الويب عبر المتصفح يعمل مع تطبيقات متعددة تعتمد على بروتوكول TCP
الوعي بالبروتوكول يفهم طلبات HTTP وعناوينها يقوم بإعادة توجيه حركة المرور دون قراءة دلالات HTTP
إعداد سيلينيوم قم بتعيين حقول وكيل HTTP وSSL قم بتعيين نقطة نهاية SOCKS وإصدارها
الاستخدام النموذجي اختبار الويب، والتصفية، والتخزين المؤقت، والفحص النفق المرن وحركة المرور غير HTTP

يجب أن يدعم كل من المتصفح ومزود خدمة البروكسي نفس الطريقة. لا يضمن وجود نقطة نهاية صالحة قدرة Selenium على إكمال مربع حوار اسم المستخدم/كلمة المرور تلقائيًا.

كيفية التعامل مع البروكسي في Selenium Webdriver في متصفح Chrome

بالنسبة للوكيل الذي لا يتطلب مصادقة تفاعلية، يمكن لـ Selenium 4 تعيين Proxy يعترض على ChromeOptions. الحالي الوثائق الرسمية لخيارات متصفح Selenium يوضح هذا النهج القائم على القدرات.

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

Proxy proxy = new Proxy();
proxy.setHttpProxy("proxy.example.test:8080");
proxy.setSslProxy("proxy.example.test:8080");

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

WebDriver driver = new ChromeDriver(options);
driver.get("https://example.com");

بالنسبة لـ SOCKS5، قم بتعيين نقطة نهاية SOCKS والإصدار بدلاً من ذلك:

Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

تتطلب الخوادم الوكيلة الموثقة تخطيطًا إضافيًا. قد ترفض المتصفحات الحديثة تضمين بيانات الاعتماد في عنوان URL، مما قد يكشف معلومات حساسة. يُفضل اتباع هذه الأساليب:

  1. قائمة عناوين IP المسموح بها: قم بتفويض عنوان IP العام الثابت الخاص بجهاز تشغيل التكامل المستمر أو عقدة Selenium Grid الخاصة بك حتى لا يظهر مربع حوار المتصفح.
  2. البوابة المحلية: قم بوضع وكيل توجيه موثوق به على جهاز الاختبار. يتصل Selenium محليًا بدون بيانات اعتماد، وتقوم البوابة بالمصادقة مع المصدر.
  3. إضافة متصفح خاضعة للتحكم: أنشئ إضافة داخلية لمتصفح كروم تقوم بتهيئة الخادم الوكيل والرد على تحديات المصادقة. قم بتحميلها فقط من ملف اختبار محمي.
  4. تكوين على مستوى الشبكة: قم بتكوين الشبكات والأسرار على عقدة Selenium بدلاً من توزيع بيانات الاعتماد على كل اختبار.

اقرأ بيانات الاعتماد من مدير الأسرار أو من إعدادات الاختبار الخاصة بالبيئة. لا تقم أبدًا بحفظها في Git، أو طباعتها في مخرجات وحدة التحكم، أو تضمينها في لقطات الشاشة. بعد التشغيل، تحقق من عنوان IP الخاص بالخروج باستخدام نقطة نهاية اختبار معتمدة قبل متابعة مجموعة الاختبارات.

الفشل الشائع: ERR_PROXY_CONNECTION_FAILED يشير هذا عادةً إلى وجود خطأ في المضيف أو المنفذ أو البروتوكول أو مسار الشبكة. كرر 407 Proxy Authentication Required تشير الاستجابات إلى بيانات اعتماد مفقودة أو مرفوضة.

استخدام أداة AutoIt

يُمكن لبرنامج AutoIt أتمتة نوافذ حوار ويندوز من خلال تحديد موقع النافذة، وكتابة بيانات الاعتماد، والضغط على زر. كان هذا حلاً شائعاً في السابق لـ Selenium لأن WebDriver لم يكن قادراً على تشغيل نوافذ المصادقة الخاصة بالمتصفح.

هذه الطريقة هشة: فهي تعمل على نظام ويندوز فقط، وتتطلب سطح مكتب تفاعلي غير مقفل، وتعتمد على عناوين النوافذ وتوقيتها، وعادةً ما تفشل في الحاويات غير الرسومية أو وكلاء التكامل المستمر عن بُعد. كما يمكنها كشف كلمات المرور من خلال البرامج النصية أو وسائط العمليات.

إذا لم يكن هناك بديل في بيئة قديمة، فقم بتجميع برنامج AutoIt النصي، واحفظه في موقع اختبار مُتحكم به، واسترجع بيانات الاعتماد بشكل آمن أثناء التشغيل، وانتظر ظهور مربع الحوار المطلوب بدلاً من استخدام فترة انتظار ثابتة. اقتصر هذه التقنية على مُشغّل Windows معزول. بالنسبة لمجموعات الاختبارات القابلة للصيانة، تُعد قوائم عناوين IP المسموح بها، أو البوابة، أو عُقد Grid المُكوّنة مركزياً خيارات أكثر أماناً.

استخدام التنبيهات

يستطيع Selenium التعامل مع تنبيهات JavaScript التي يتم إنشاؤها بواسطة كود صفحة الويب:

Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
    .until(ExpectedConditions.alertIsPresent());
alert.accept();

لكن عادةً ما يكون مربع حوار مصادقة الوكيل جزءًا من واجهة المتصفح، وليس تنبيهًا مكتوبًا بلغة جافا سكريبت. لذلك، driver.switchTo().alert() غالباً ما يرمي NoAlertPresentException حتى عند ظهور نافذة إدخال بيانات الاعتماد. وينطبق القيد نفسه على العديد من مربعات حوار المصادقة الأساسية لبروتوكول HTTP.

استخدم واجهة برمجة تطبيقات التنبيه فقط بعد التأكد من أن WebDriver يتعرف على المطالبة. إذا لم يتعرف عليها، فقم بإزالة المطالبة من خلال إعدادات الشبكة أو استخدم إحدى طرق الوكيل المصادق عليها المذكورة أعلاه. هذه الطريقة أكثر استقرارًا من تنسيق ضغطات المفاتيح مع نافذة لا يستطيع Selenium فحصها.

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

هل يمكن لـ Selenium تعيين وكيل بشكل مباشر؟

نعم. يستطيع Selenium 4 تمرير إعدادات HTTP أو SSL أو SOCKS عبر خيارات المتصفح ووظيفة البروكسي. يؤدي هذا إلى تهيئة نقطة النهاية، ولكنه قد لا يُكمل عملية المصادقة التي يوفّرها المتصفح.

لماذا يفشل الأمر username:password@host:port في متصفح Chrome؟

قد تحظر المتصفحات الحديثة بيانات الاعتماد المضمنة في عناوين URL، وقد يؤدي هذا التركيب إلى تسريب معلومات حساسة إلى سجلات النظام وسجل التصفح. لذا، يُنصح باستخدام قوائم عناوين IP المسموح بها، أو بوابة آمنة، أو بنية تحتية اختبارية مُحكمة.

هل يستطيع Selenium التعامل مع تسجيل الدخول عبر وكيل باستخدام switchTo().alert()؟

عادةً لا. فمصادقة الوكيل تتم عادةً عبر واجهة المستخدم الخاصة بالمتصفح بدلاً من تنبيه جافا سكريبت، لذا قد يُبلغ WebDriver عن عدم وجود تنبيه.

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

يمكن أن ينجح ذلك عند إتمام عملية المصادقة دون الحاجة إلى مطالبة تفاعلية. يُعدّ استخدام قائمة عناوين IP المسموح بها، أو بوابة محلية، أو إعدادات على مستوى العقدة، أنسب للتنفيذ بدون واجهة رسومية.

هل ينبغي عليّ استخدام AutoIt لمصادقة وكيل Selenium؟

استخدمه فقط في بيئة عمل ويندوز قديمة ومحدودة الإمكانيات. فهو غير مستقر في بيئة التكامل المستمر وأقل أمانًا من إزالة مربع الحوار من خلال إعدادات الشبكة.

ما هو نوع البروكسي الأفضل لأتمتة المتصفح؟

يعتمد ذلك على المهمة المصرح بها. تُعدّ خوادم بروكسي HTTP سهلة الاستخدام لحركة مرور الويب، بينما يتميز SOCKS5 بالمرونة، ويمكن للشبكات المنزلية أن تساعد في اختبار الموقع. قارن الخيارات في دليل أنواع خوادم البروكسي لدينا.