सेलेनियम परीक्षणों में रेकप्टा बाईपास

ReCaptcha (वह लोकप्रिय रूप से प्यारी है "कैप्चा" ) सबसे दर्दनाक चीजों में से एक है जो एक परीक्षण ऑटोमेटन अपने रास्ते पर मुठभेड़ कर सकता है। सनी इंडिया के प्रवासियों द्वारा दर्ज किए गए हजारों विभिन्न वीडियो वेब पर चल रहे हैं कि इस नर्तकी के साथ क्या नृत्य करता है, इस जानवर को धोखा देना संभव है। वास्तव में, प्रोग्राम की गई स्क्रिप्ट के साथ उस चीज़ के साथ बातचीत करने की कोशिश करना काफी मुश्किल है जिसका मुख्य उद्देश्य यह सुनिश्चित करना है कि "आप रोबोट नहीं हैं"।

एक बहुत ही महत्वपूर्ण अस्वीकरण: एक कैप्चा को धोखा देना असंभव है।

यदि आप पहले ही इस समस्या का सामना कर चुके हैं, और यह लेख पढ़ रहे हैं, तो यह एक रामबाण नुस्खा है, तो जानिए कि यह मौजूद नहीं है। इसके अलावा, आपके सिर में सबसे अधिक संभावना है कि वेबड्राइवर के उपयोग से यथार्थवादी उपयोगकर्ता के व्यवहार का अनुकरण करने के बारे में नवोन्मेषी विचार उत्पन्न हुए हैं, बेतरतीब ढंग से माउस-ओवरिंग तत्वों द्वारा, इनपुट्स पर क्लिक करके, और थ्रेड। यह पूरी तरह से ज्ञात है कि यह दृष्टिकोण काम नहीं करेगा, अपना समय बर्बाद न करें।

छवि

यह पता चला है कि कोई रास्ता नहीं है?

सब कुछ इतना निराशावादी नहीं है। कभी-कभी यह अपने आप को इस सवाल का सबसे सटीक उत्तर देने की कोशिश करता है कि "मेरे सामने क्या चुनौती है?" और स्थिति को व्यापक रूप से देखें। ज्यादातर मामलों में, आप समझेंगे कि आपका लक्ष्य कैप्चा को धोखा देना नहीं है, बल्कि इसके पीछे छिपी कार्यक्षमता का परीक्षण करने के लिए इसे बायपास करना है। मेरे मामले के उदाहरण पर, मैं आपके साथ कार्य को हल करने के लिए मेरे द्वारा चुने गए विकल्पों को साझा करूंगा।

संदर्भ: हमने अपने उत्पाद का एक तृतीय-पक्ष सेवा में एकीकृत किया, और यह निगरानी करना चाहते थे कि क्या सब कुछ उनके पक्ष में ठीक है, क्योंकि वे अपने प्लेटफ़ॉर्म के तृतीय-पक्ष भागों को कवर नहीं करते हैं। हमारी कार्यक्षमता तक पहुंचने के लिए, आपको पहले लॉग इन करना होगा। यह तब था जब मैं कैप्चा के साथ आमने-सामने हुई थी। अगला, मैं इस समस्या को दरकिनार करने की कोशिश की सभी विकल्पों को दे।


बाहर


गूगल या फेसबुक के माध्यम से लॉगिन करें


क्लासिक प्रमाणीकरण के अलावा, Google / फेसबुक के साथ विहित लॉगिन थे। बेशक, उनके "कैप्चा" भी वहां मौजूद थे, इसलिए इस विकल्प ने समस्या को हल करने में मदद नहीं की।

उपयोगकर्ता के व्यवहार का अनुकरण करें


हां, मैंने भी इसे आजमाया। यह मजाकिया था, लेकिन बहुत भोला था।



काम कर रहे


क्रोम / फ़ायरफ़ॉक्स प्रोफाइल


पहले "लाइव" विकल्प के बारे में बात करते हैं। इन ब्राउज़रों के लिए ड्राइवरों (क्रोमेड्रिवर / जेकोड्राइवर) में एक पूर्वनिर्धारित उपयोगकर्ता प्रोफ़ाइल के तहत बूट करने की क्षमता होती है। यह सभी संग्रहीत पासवर्ड, कुकीज़, सत्र और यहां तक ​​कि ब्राउज़र इतिहास और बुकमार्क संग्रहीत करता है। यानी इस प्रकार, हम बस उस लॉगिन चरण से चूक गए जो हमारे कार्य के लिए बिल्कुल महत्वहीन है, और इस प्रकार हम सीधे परीक्षण ऑब्जेक्ट के साथ पृष्ठ पर पहुंच गए। इसे निम्नानुसार लागू किया जाता है:

  1. एक "क्लीन" ब्राउज़र प्रोफ़ाइल बनाएँ
  2. मैन्युअल रूप से कैप्चा दर्ज करें और वांछित संसाधन में लॉग इन करें
  3. हमारी परियोजना के लिए आवश्यक प्रोफ़ाइल की प्रतिलिपि बनाएँ ( फ़ायरफ़ॉक्स और क्रोम के लिए HOWTO)

उसके बाद, हमें ड्राइवर को यह बताने की ज़रूरत है कि इसे निर्दिष्ट प्रोफ़ाइल से लोड किया जाना चाहिए:

फ़ायरफ़ॉक्स:

//   FirefoxProfile profile = new FirefoxProfile(new File("////")); //      FirefoxOptions options = new FirefoxOptions(); options.setProfile(profile); //   WebDriver driver = new FirefoxDriver(options); 

क्रोम:

 //      ChromeOptions options = new ChromeOptions(); options.addArgument("--user-data-dir=/////"); options.addArgument("--profile-directory=____"); //   WebDriver driver = new ChromeDriver(options); 

स्थापित किए गए ब्राउज़र और सामान्य gecko- / cromedrivers के साथ एक स्थानीय मशीन पर परीक्षण करते समय यह दृष्टिकोण अच्छा साबित हुआ, लेकिन जेनकिंस पर चलने पर समस्याएं थीं। हम कुबेरनेट्स क्लस्टर के अंदर सेलेनियम हब और नोड्स बढ़ा रहे हैं, इसलिए हम एक निर्देशिका के रूप में मुसीबतों में भाग गए जो कि कंटेनर के अंदर निर्देशिका को माउंट करने के लिए बहुत लंबा था (औसत वजन लगभग 25 एमबी, जो कि काफी कम है), साथ ही साथ ब्राउज़र की सीआरयूडी अनुमतियों के साथ कुछ समस्याएं भी हैं, जो रनटाइम में प्रोफ़ाइल में परिवर्तन नहीं किया जा सका, और "अज्ञात त्रुटि: प्रीफ़्स फ़ाइल लिखने में विफल" निष्पादन के साथ गिर गया। इसके अलावा, कुकीज़ और सत्रों के बाद प्रोफ़ाइल को अपडेट करना उनकी समाप्ति तिथियों तक पहुंच गया है, काफी असुविधाजनक है, और मैं इस परियोजना में प्रोफाइल इंटर्नल के साथ एक विशाल फ़ोल्डर नहीं रखना चाहता था, इसलिए निम्नलिखित विकल्प को अंततः चुना गया था।

कुकीज़


"और बॉक्स सिर्फ खोला गया" - इस तरह से स्थिति का वर्णन करना संभव था, क्योंकि हमने बस चालक को मैन्युअल रूप से प्राप्त कुकीज़ जोड़ी थी। क्रियाओं का एल्गोरिथ्म यथासंभव सरल है और चयनित ब्राउज़र पर निर्भर नहीं करता है:

  1. लॉग इन करें
  2. नेटवर्क के माध्यम से हम रिक्वेस्ट हेडर देखते हैं -> कुकीज़ जो हमारा ब्राउज़र भेजता है

उन्हें हमारे परीक्षणों में इस प्रकार जोड़ें:

 //  cookie private static final Cookie COOKIE = new Cookie("", "", "", "", new Date("")); //   WebDriver driver = new ChromeDriver(options); //  cookie   driver.manage().addCookie(COOKIE); 

इस दृष्टिकोण का एक स्पष्ट शून्य अपनी वैधता अवधि समाप्त हो जाने के बाद कुकीज़ को मैन्युअल रूप से बदलने की आवश्यकता है। लेकिन, चूंकि यह परीक्षण किए गए प्लेटफॉर्म पर 3 महीने का है, इसलिए हमने इस समाधान को चुना।



और अगर मुझे लॉगिन करने की आवश्यकता नहीं है?



लेकिन उस स्थिति के बारे में क्या है जब यह प्राधिकरण और सत्रों के बारे में नहीं है, लेकिन एक बार की कार्रवाई के कमीशन के बारे में है (जैसे टोकरी से एक आदेश देना, एक नया उपयोगकर्ता पंजीकृत करना, आदि)? यहां स्थिति और भी खराब है। दो विकल्प जो मुझे मिल सकते हैं वे हैं:

  1. अपने डेवलपर्स के साथ सहमत आप किसी प्रकार का समाधान प्रदान करने के लिए। Google ऐसा अवसर प्रदान करता है , लेकिन याद रखें कि आप जानबूझकर सुरक्षा में एक छोटा सा छेद बनाते हैं।
  2. तृतीय-पक्ष सशुल्क सेवाओं का लाभ उठाएं जो आपके हिस्से पर कैप्चा स्क्रीनशॉट लेते हैं, इसे डिकोड करने का प्रयास करें, और आपको एक डिक्रिप्टेड मूल्य भेजें। मैंने स्वयं इस पद्धति की कोशिश नहीं की है और पूरी तरह से इसकी सिफारिश नहीं कर सकता।



संक्षेप में देना


जैसा कि आप देख सकते हैं, कोई निराशाजनक स्थिति नहीं है। हालांकि, इस बात को नकारना मूर्खतापूर्ण होगा कि उपरोक्त सभी विकल्पों में से अपने स्वयं के, काफी महत्वपूर्ण, नुकसान हैं, इसलिए चुनाव आपका है।

आपका ध्यान के लिए धन्यवाद।

PS यदि आप वास्तविक जीवन में काम करने वाले किसी अन्य समाधान को जानते हैं - तो कृपया उन्हें टिप्पणियों में वर्णित करें, यह पढ़ना बहुत दिलचस्प होगा।

Source: https://habr.com/ru/post/hi442034/


All Articles