يصبح التحقق من هوية المستخدم عبر الوكيل في Selenium صعبًا عندما يطلب المتصفح - وليس صفحة الويب - اسم المستخدم وكلمة المرور. يعتمد الحل الأمثل على نوع الوكيل، والمتصفح، وإصدار Selenium، وما إذا كان من الممكن توفير بيانات الاعتماد خارج نطاق الاختبار. يشرح هذا الدليل أساليب Selenium 4 الموثوقة، والحالات التي لا تزال فيها الحلول البديلة القديمة مناسبة، وأسباب فشل التعليمات البرمجية لمعالجة التنبيهات في كثير من الأحيان.
ما هو البروكسي؟
الخادم الوكيل هو وسيط يرسل الطلبات إلى مواقع الويب نيابةً عن متصفحك. يرى الموقع المستهدف عنوان 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، مما قد يكشف معلومات حساسة. يُفضل اتباع هذه الأساليب:
- قائمة عناوين IP المسموح بها: قم بتفويض عنوان IP العام الثابت الخاص بجهاز تشغيل التكامل المستمر أو عقدة Selenium Grid الخاصة بك حتى لا يظهر مربع حوار المتصفح.
- البوابة المحلية: قم بوضع وكيل توجيه موثوق به على جهاز الاختبار. يتصل Selenium محليًا بدون بيانات اعتماد، وتقوم البوابة بالمصادقة مع المصدر.
- إضافة متصفح خاضعة للتحكم: أنشئ إضافة داخلية لمتصفح كروم تقوم بتهيئة الخادم الوكيل والرد على تحديات المصادقة. قم بتحميلها فقط من ملف اختبار محمي.
- تكوين على مستوى الشبكة: قم بتكوين الشبكات والأسرار على عقدة 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 بالمرونة، ويمكن للشبكات المنزلية أن تساعد في اختبار الموقع. قارن الخيارات في دليل أنواع خوادم البروكسي لدينا.
