Selenium में प्रॉक्सी प्रमाणीकरण तब मुश्किल हो जाता है जब वेबपेज के बजाय ब्राउज़र उपयोगकर्ता नाम और पासवर्ड मांगता है। सही समाधान प्रॉक्सी के प्रकार, ब्राउज़र, Selenium संस्करण और इस बात पर निर्भर करता है कि क्रेडेंशियल परीक्षण के बाहर उपलब्ध कराए जा सकते हैं या नहीं। यह गाइड Selenium 4 के विश्वसनीय तरीकों, पुराने समाधानों के उपयोग और अलर्ट-हैंडलिंग कोड के अक्सर विफल होने के कारणों की व्याख्या करता है।
एक प्रॉक्सी क्या है?
प्रॉक्सी एक मध्यस्थ होता है जो आपके ब्राउज़र की ओर से वेबसाइटों को अनुरोध भेजता है। गंतव्य को सेलेनियम चलाने वाली मशीन के बजाय प्रॉक्सी का आईपी पता दिखाई देता है। परीक्षण टीमें क्षेत्रीय अनुभवों को सत्यापित करने, नियंत्रित नेटवर्क के माध्यम से ट्रैफ़िक को रूट करने, अनुरोधों का निरीक्षण करने या स्वचालित कार्यभार वितरित करने के लिए प्रॉक्सी का उपयोग करती हैं।
एक प्रॉक्सी यूआरएल में आमतौर पर होस्ट और पोर्ट शामिल होते हैं, जैसे कि proxy.example.test:8080निजी सेवाओं के लिए उपयोगकर्ता नाम और पासवर्ड की आवश्यकता भी हो सकती है। सेलेनियम ब्राउज़र विकल्पों के माध्यम से प्रॉक्सी एंडपॉइंट को कॉन्फ़िगर कर सकता है, लेकिन प्रमाणीकरण प्रॉम्प्ट ब्राउज़र द्वारा नियंत्रित होते हैं और सामान्य HTML फ़ॉर्म की तरह हमेशा वेबड्राइवर को उपलब्ध नहीं होते हैं।
स्वचालन का उपयोग केवल वहीं करें जहां आपके पास प्राधिकरण हो, वेबसाइट की शर्तों का सम्मान करें और स्रोत कोड और परीक्षण लॉग से क्रेडेंशियल को दूर रखें।
SOCKS और HTTP प्रॉक्सी के बीच अंतर
HTTP प्रॉक्सी वेब ट्रैफ़िक को समझते हैं और आमतौर पर HTTP और HTTPS के लिए अलग-अलग मानों के साथ कॉन्फ़िगर किए जाते हैं। SOCKS प्रॉक्सी निचले स्तर पर काम करते हैं और एप्लिकेशन प्रोटोकॉल को समझे बिना विभिन्न प्रकार के TCP ट्रैफ़िक को ले जा सकते हैं। SOCKS5 प्रमाणीकरण का भी समर्थन करता है और आमतौर पर पसंदीदा SOCKS संस्करण है।
| विशेषता | HTTP/HTTPS प्रॉक्सी | SOCKS5 प्रॉक्सी |
|---|---|---|
| यातायात | ब्राउज़र वेब अनुरोधों के लिए डिज़ाइन किया गया | यह कई TCP-आधारित अनुप्रयोगों के साथ काम करता है। |
| प्रोटोकॉल जागरूकता | HTTP अनुरोधों और हेडरों को समझता है | HTTP सिमेंटिक्स को पढ़े बिना ट्रैफ़िक को आगे भेजता है |
| सेलेनियम सेटअप | HTTP और SSL प्रॉक्सी फ़ील्ड सेट करें | SOCKS एंडपॉइंट और संस्करण सेट करें |
| विशिष्ट उपयोग | वेब परीक्षण, फ़िल्टरिंग, कैशिंग, निरीक्षण | लचीली टनलिंग और गैर-HTTP ट्रैफ़िक |
ब्राउज़र और प्रॉक्सी प्रदाता को एक ही विधि का समर्थन करना चाहिए। एक वैध एंडपॉइंट यह गारंटी नहीं देता कि सेलेनियम स्वचालित रूप से नेटिव उपयोगकर्ता नाम/पासवर्ड संवाद को पूरा कर सकता है।
Chrome में Selenium Webdriver में प्रॉक्सी को कैसे हैंडल करें
ऐसे प्रॉक्सी के लिए जिसे इंटरैक्टिव प्रमाणीकरण की आवश्यकता नहीं होती है, सेलेनियम 4 एक असाइन कर सकता है Proxy करने के लिए वस्तु ChromeOptions। द करेंट सेलेनियम ब्राउज़र-विकल्पों का आधिकारिक दस्तावेज़ यह क्षमता-आधारित दृष्टिकोण को प्रदर्शित करता है।
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);
प्रमाणित प्रॉक्सी के लिए अतिरिक्त योजना की आवश्यकता होती है। यूआरएल में क्रेडेंशियल एम्बेड करने को आधुनिक ब्राउज़र अस्वीकार कर सकते हैं और इससे गोपनीय जानकारी उजागर हो सकती है। निम्नलिखित तरीकों को प्राथमिकता दें:
- आईपी अनुमति सूची: अपने CI रनर या सेलेनियम ग्रिड नोड के निश्चित सार्वजनिक IP को अधिकृत करें ताकि कोई ब्राउज़र डायलॉग बॉक्स दिखाई न दे।
- स्थानीय प्रवेश द्वार: टेस्ट मशीन पर एक विश्वसनीय फॉरवर्डिंग प्रॉक्सी स्थापित करें। सेलेनियम बिना क्रेडेंशियल के स्थानीय रूप से कनेक्ट होता है, और गेटवे अपस्ट्रीम प्रमाणीकरण करता है।
- नियंत्रित ब्राउज़र एक्सटेंशन: एक आंतरिक क्रोम एक्सटेंशन बनाएं जो प्रॉक्सी को कॉन्फ़िगर करे और प्रमाणीकरण संबंधी चुनौतियों का जवाब दे। इसे केवल एक सुरक्षित परीक्षण आर्टिफैक्ट से ही लोड करें।
- ग्रिड-स्तरीय कॉन्फ़िगरेशन: प्रत्येक परीक्षण के लिए क्रेडेंशियल वितरित करने के बजाय सेलेनियम नोड पर नेटवर्किंग और सीक्रेट्स को कॉन्फ़िगर करें।
किसी गुप्त प्रबंधक या पर्यावरण-विशिष्ट परीक्षण कॉन्फ़िगरेशन से क्रेडेंशियल पढ़ें। इन्हें कभी भी Git में कमिट न करें, कंसोल आउटपुट पर प्रिंट न करें या स्क्रीनशॉट में शामिल न करें। लॉन्च के बाद, परीक्षण सूट जारी रखने से पहले स्वीकृत परीक्षण एंडपॉइंट के साथ एग्जिट IP को सत्यापित करें।
ERR_PROXY_CONNECTION_FAILED सामान्यतः यह इंगित करता है कि होस्ट, पोर्ट, प्रोटोकॉल या नेटवर्क पथ गलत है। बार-बार 407 Proxy Authentication Required प्रतिक्रियाओं से पता चलता है कि क्रेडेंशियल्स या तो गायब हैं या अस्वीकृत कर दिए गए हैं।AutoIt टूल का उपयोग करना
AutoIt विंडो का पता लगाकर, क्रेडेंशियल टाइप करके और बटन दबाकर विंडोज़ डायलॉग को स्वचालित कर सकता है। यह कभी Selenium का एक सामान्य समाधान था क्योंकि WebDriver ब्राउज़र के स्वामित्व वाली प्रमाणीकरण विंडो को संचालित नहीं कर सकता था।
यह विधि असुरक्षित है: यह केवल विंडोज़ पर काम करती है, इसके लिए अनलॉक किए गए इंटरैक्टिव डेस्कटॉप की आवश्यकता होती है, यह विंडो के शीर्षक और समय पर निर्भर करती है, और आमतौर पर हेडलेस कंटेनर या रिमोट सीआई एजेंटों में विफल हो जाती है। यह स्क्रिप्ट या प्रोसेस आर्गुमेंट्स के माध्यम से पासवर्ड भी उजागर कर सकती है।
यदि पुराने सिस्टम में कोई दूसरा विकल्प न हो, तो AutoIt स्क्रिप्ट को कंपाइल करें, उसे एक नियंत्रित टेस्ट-आर्टिफैक्ट लोकेशन में स्टोर करें, रनटाइम पर क्रेडेंशियल्स को सुरक्षित रूप से प्राप्त करें, और निश्चित स्लीप टाइम का उपयोग करने के बजाय सटीक डायलॉग बॉक्स का इंतज़ार करें। इस तकनीक को केवल एक आइसोलेटेड विंडोज रनर तक सीमित रखें। रखरखाव योग्य सूट के लिए, IP अलाउलिस्टिंग, एक गेटवे, या केंद्रीय रूप से कॉन्फ़िगर किए गए ग्रिड नोड्स अधिक सुरक्षित विकल्प हैं।
अलर्ट का उपयोग करना
Selenium वेबपेज कोड द्वारा बनाए गए जावास्क्रिप्ट अलर्ट को हैंडल कर सकता है:
Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.alertIsPresent());
alert.accept();
हालांकि, प्रॉक्सी प्रमाणीकरण डायलॉग आमतौर पर ब्राउज़र क्रोम में दिखाई देता है, न कि जावास्क्रिप्ट अलर्ट में। इसलिए, driver.switchTo().alert() अक्सर फेंकता है NoAlertPresentException क्रेडेंशियल प्रॉम्प्ट दिखाई देने पर भी यही सीमा लागू होती है। यही सीमा कई HTTP बेसिक-ऑथ डायलॉग पर भी लागू होती है।
अलर्ट API का उपयोग तभी करें जब यह सुनिश्चित हो जाए कि WebDriver प्रॉम्प्ट को पहचानता है। यदि यह नहीं पहचानता है, तो नेटवर्क कॉन्फ़िगरेशन के माध्यम से प्रॉम्प्ट को हटा दें या ऊपर वर्णित प्रमाणीकरण-प्रॉक्सी तरीकों में से किसी एक का उपयोग करें। यह Selenium द्वारा निरीक्षण न किए जा सकने वाले विंडो के साथ कीस्ट्रोक्स को समन्वित करने की तुलना में अधिक स्थिर है।
अक्सर पूछे जाने वाले प्रश्न
क्या सेलेनियम सीधे प्रॉक्सी सेट कर सकता है?
जी हां। Selenium 4 ब्राउज़र के विकल्पों और प्रॉक्सी क्षमता के माध्यम से HTTP, SSL या SOCKS सेटिंग्स को पास कर सकता है। यह एंडपॉइंट को कॉन्फ़िगर करता है, लेकिन ब्राउज़र द्वारा किए जाने वाले प्रमाणीकरण प्रॉम्प्ट को पूरा नहीं कर सकता है।
Chrome में username:password@host:port फ़ंक्शन काम क्यों नहीं करता?
आधुनिक ब्राउज़र URL में एम्बेडेड क्रेडेंशियल्स को ब्लॉक कर सकते हैं, और इस तरह के सिंटैक्स से लॉग और हिस्ट्री में गोपनीय जानकारी लीक हो सकती है। इसके बजाय IP अलाउलिस्टिंग, एक सुरक्षित गेटवे या नियंत्रित परीक्षण इन्फ्रास्ट्रक्चर का उपयोग करें।
क्या Selenium, switchTo().alert() के साथ प्रॉक्सी लॉगिन को हैंडल कर सकता है?
आमतौर पर नहीं। प्रॉक्सी प्रमाणीकरण आमतौर पर जावास्क्रिप्ट अलर्ट के बजाय ब्राउज़र यूआई होता है, इसलिए वेबड्राइवर यह रिपोर्ट कर सकता है कि कोई अलर्ट मौजूद नहीं है।
क्या हेडलेस क्रोम में प्रॉक्सी प्रमाणीकरण काम करता है?
यह तब काम कर सकता है जब प्रमाणीकरण बिना किसी इंटरैक्टिव प्रॉम्प्ट के हल हो जाए। आईपी अलाउलिस्टिंग, एक लोकल गेटवे, या नोड-स्तरीय कॉन्फ़िगरेशन हेडलेस निष्पादन के लिए बेहतर उपयुक्त हैं।
क्या मुझे सेलेनियम प्रॉक्सी प्रमाणीकरण के लिए AutoIt का उपयोग करना चाहिए?
इसका उपयोग केवल सीमित और पुराने विंडोज़ वर्कफ़्लो के लिए ही करें। यह CI में कमज़ोर है और नेटवर्क कॉन्फ़िगरेशन के माध्यम से डायलॉग को हटाने की तुलना में कम सुरक्षित है।
ब्राउज़र ऑटोमेशन के लिए कौन सा प्रॉक्सी प्रकार सबसे अच्छा है?
यह अधिकृत कार्य पर निर्भर करता है। HTTP प्रॉक्सी वेब ट्रैफ़िक के लिए सरल हैं, SOCKS5 लचीला है, और आवासीय नेटवर्क स्थान परीक्षण में सहायक हो सकते हैं। हमारे प्रॉक्सी प्रकारों की मार्गदर्शिका में विकल्पों की तुलना करें ।
