क्या आप किसी वेबसाइट का पता लगा सकते हैं जब आप सेलेनियम का उपयोग क्रोमेड्रिवर के साथ कर रहे हैं?


364

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

जब मैं सामान्य क्रोम में इन साइटों को ब्राउज़ करता हूं तो सब कुछ ठीक काम करता है, लेकिन जिस क्षण मैं सेलेनियम का उपयोग करता हूं, मुझे पता चला है।

सिद्धांत रूप में क्रोमेड्रिवर और क्रोम को किसी भी वेबसर्वर के समान ही देखना चाहिए, लेकिन किसी तरह वे इसका पता लगा सकते हैं।

यदि आप चाहते हैं कि कुछ टेस्टकोड इसे आज़माएँ:

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=1, size=(1600, 902))
display.start()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('--profile-directory=Default')
chrome_options.add_argument("--incognito")
chrome_options.add_argument("--disable-plugins-discovery");
chrome_options.add_argument("--start-maximized")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.delete_all_cookies()
driver.set_window_size(800,800)
driver.set_window_position(0,0)
print 'arguments done'
driver.get('http://stubhub.com')

यदि आप stubhub के आसपास ब्राउज़ करते हैं तो आपको एक या दो अनुरोधों के भीतर पुनर्निर्देशित और 'ब्लॉक' कर दिया जाएगा। मैं इसकी जांच कर रहा हूं और मैं यह पता नहीं लगा सकता कि वे कैसे बता सकते हैं कि कोई उपयोगकर्ता सेलेनियम का उपयोग कर रहा है।

वह यह कैसे करते हैं?

संपादित करें:

मैंने फ़ायरफ़ॉक्स में सेलेनियम आईडीई प्लगइन स्थापित किया था और जब मैं सामान्य फ़ायरफ़ॉक्स ब्राउज़र में केवल अतिरिक्त प्लगइन के साथ stubhub.com पर गया तो मुझे प्रतिबंध लगा दिया गया।

संपादित करें:

जब मैं HTTP अनुरोधों को वापस भेजने के लिए फ़िडलर का उपयोग करता हूं, तो मैंने देखा है कि प्रतिक्रिया शीर्षक में अक्सर 'नकली ब्राउज़र' के अनुरोधों में 'नो-कैश' होता है।

संपादित करें:

इस तरह के परिणाम यह पता लगाने का एक तरीका है कि मैं जावास्क्रिप्ट से एक सेलेनियम वेबड्राइवर पृष्ठ में हूं, यह सुझाव देता है कि जब आप वेबड्राइवर का उपयोग कर रहे हैं, तो यह पता लगाने का कोई तरीका नहीं होना चाहिए। लेकिन यह सबूत अन्यथा पता चलता है।

संपादित करें:

साइट उनके सर्वर पर एक फिंगरप्रिंट अपलोड करती है, लेकिन मैंने जांच की और क्रोमियम का फिंगरप्रिंट क्रोम का उपयोग करते समय फिंगरप्रिंट के समान है।

संपादित करें:

यह फिंगरप्रिंट पेलोड में से एक है जो वे अपने सर्वर पर भेजते हैं

{"appName":"Netscape","platform":"Linuxx86_64","cookies":1,"syslang":"en-US","userlang":"en-US","cpu":"","productSub":"20030107","setTimeout":1,"setInterval":1,"plugins":{"0":"ChromePDFViewer","1":"ShockwaveFlash","2":"WidevineContentDecryptionModule","3":"NativeClient","4":"ChromePDFViewer"},"mimeTypes":{"0":"application/pdf","1":"ShockwaveFlashapplication/x-shockwave-flash","2":"FutureSplashPlayerapplication/futuresplash","3":"WidevineContentDecryptionModuleapplication/x-ppapi-widevine-cdm","4":"NativeClientExecutableapplication/x-nacl","5":"PortableNativeClientExecutableapplication/x-pnacl","6":"PortableDocumentFormatapplication/x-google-chrome-pdf"},"screen":{"width":1600,"height":900,"colorDepth":24},"fonts":{"0":"monospace","1":"DejaVuSerif","2":"Georgia","3":"DejaVuSans","4":"TrebuchetMS","5":"Verdana","6":"AndaleMono","7":"DejaVuSansMono","8":"LiberationMono","9":"NimbusMonoL","10":"CourierNew","11":"Courier"}}

सेलेनियम और क्रोम में इसका समान है

संपादित करें:

वीपीएन एक ही उपयोग के लिए काम करते हैं लेकिन पहले पृष्ठ को लोड करने के बाद पता लगाया जाता है। स्पष्ट रूप से सेलेनियम का पता लगाने के लिए कुछ जावास्क्रिप्ट चलाए जा रहे हैं।


4
@RyanWeinstein: यह ट्रैफ़िक नहीं है। मेरा अनुमान है कि सेलेनियम को कुछ जावास्क्रिप्ट हुक को उजागर करने की आवश्यकता है जो क्लाइंट-साइड जावास्क्रिप्ट पर पता लगाया जा सकता है।
मिको ओक्टमा

5
या अगर यह ट्रैफ़िक है तो यह एक ट्रैफ़िक पैटर्न है .... आप बहुत तेज़ी से पेज ब्राउज़ कर रहे हैं।
मिको ओक्टमा

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

5
यह साइट distillबॉट डिटेक्शन तकनीक का उपयोग करती है और akamaitechnologies.comसीडीएन का उपयोग सामग्री को अलग ips से वितरित करती है 95.100.59.245, जैसे 104.70.243.66,23.202.161.241
SIslam

5
मैं सेलेनियम और फ़ायरफ़ॉक्स चालक के साथ एक ही समस्या का सामना कर रहा हूं। ध्यान देने वाली बात यह है कि मैं VMWare वर्कस्टेशन वर्चुअल मशीन में सेलेनियम चला रहा हूं जो एक नेट के माध्यम से इंटरनेट तक पहुंच बना रहा है। होस्ट मशीन स्टबहब तक पहुंचने में सक्षम है, जबकि सेलेनियम का उपयोग करते समय वीएम एक्सेस करने में असमर्थ है, या यहां तक ​​कि ब्राउज़र उदाहरण सेलेनियम लॉन्च किया गया है। मेरे पास VM ब्राउज़र का उदाहरण अवरुद्ध था और ठूंठ अभी भी मशीन को पहचानता है और इसे अवरुद्ध कर दिया है। तो यह किसी न किसी तरीके से ब्राउज़र और मशीन के फिंगरप्रिंट का प्रदर्शन कर रहा होगा।
ब्रायन कैन

जवाबों:


51

मैक उपयोगकर्ताओं के लिए

जगह cdc_विम या पर्ल का उपयोग कर चर

आप उपयोग कर सकते हैं vim, या जैसा कि @Vic Seedoubleyew ने @ Erti-Chris Eelmaa द्वारा उत्तर में बताया है perl, cdc_चर को बदलने के लिए chromedriver( उस चर के बारे में और जानने के लिए @ Erti-Chris Eelmaa द्वारा पोस्ट देखें )। का उपयोग करना vimया perlस्रोत कोड पुनः संकलित करें या एक हेक्स संपादक का उपयोग करने के होने से रोकता है आप। chromedriverइसे संपादित करने का प्रयास करने से पहले मूल की एक प्रति सुनिश्चित करें। इसके अलावा, नीचे दिए गए तरीकों का परीक्षण किया गया था chromedriver version 2.41.578706


विम का उपयोग करना

vim /path/to/chromedriver

ऊपर की लाइन चलाने के बाद, आपको संभवतः गिबरिश का एक गुच्छा दिखाई देगा। निम्न कार्य करें:

  1. cdc_टाइप करके /cdc_और दबाकर खोजें return
  2. दबाकर संपादन सक्षम करें a
  3. किसी भी राशि को हटाएं $cdc_lasutopfhvcZLmcflऔर उसे हटाएं जो समान राशि वर्णों के साथ हटा दी गई थी। यदि आप नहीं करते हैं, chromedriverतो विफल हो जाएगा।
  4. संपादन करने के बाद, दबाएँ esc
  5. परिवर्तनों को सहेजने और छोड़ने के लिए, टाइप करें :wq!और दबाएँ return
  6. यदि आप परिवर्तनों को सहेजना नहीं चाहते हैं, लेकिन आप छोड़ना चाहते हैं, तो टाइप करें :q!और दबाएँ return
  7. हो गया।

परिवर्तित पर जाएं chromedriverऔर उस पर डबल क्लिक करें। एक terminalखिड़की खोलनी चाहिए। यदि आप killedआउटपुट में नहीं देखते हैं , तो आपने ड्राइवर को सफलतापूर्वक बदल दिया है।


पर्ल का उपयोग करना

नीचे दी गई पंक्ति इसके cdc_साथ बदल जाती है dog_:

perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver

सुनिश्चित करें कि प्रतिस्थापन स्ट्रिंग में खोज स्ट्रिंग के समान वर्ण हैं, अन्यथा chromedriverविफल हो जाएगा।

पर्ल स्पष्टीकरण

s///g निरूपित करता है कि आप एक स्ट्रिंग की खोज करना चाहते हैं और इसे दूसरी स्ट्रिंग के साथ विश्व स्तर पर प्रतिस्थापित करते हैं (सभी घटनाओं को प्रतिस्थापित करता है)।

जैसे, s/string/replacment/g

इसलिए,

s/// एक स्ट्रिंग को खोजने और बदलने के लिए निरूपित करता है।

cdc_ खोज स्ट्रिंग है।

dog_ प्रतिस्थापन स्ट्रिंग है।

g वैश्विक कुंजी है, जो स्ट्रिंग की प्रत्येक घटना को प्रतिस्थापित करती है।

कैसे जांच करें कि पर्ल रिप्लेसमेंट काम करता है या नहीं

निम्न पंक्ति खोज स्ट्रिंग की प्रत्येक घटना को मुद्रित करेगी cdc_:

perl -ne 'while(/cdc_/g){print "$&\n";}' /path/to/chromedriver

अगर यह कुछ भी नहीं देता है, तो cdc_बदल दिया गया है।

इसके विपरीत, आप इसका उपयोग कर सकते हैं:

perl -ne 'while(/dog_/g){print "$&\n";}' /path/to/chromedriver

यह देखने के लिए कि क्या आपका प्रतिस्थापन स्ट्रिंग, dog_अब chromedriverबाइनरी में है। यदि यह है, तो प्रतिस्थापन स्ट्रिंग कंसोल पर मुद्रित किया जाएगा।

परिवर्तित पर जाएं chromedriverऔर उस पर डबल क्लिक करें। एक terminalखिड़की खोलनी चाहिए। यदि आप killedआउटपुट में नहीं देखते हैं , तो आपने ड्राइवर को सफलतापूर्वक बदल दिया है।


समेट रहा हु

chromedriverबाइनरी को बदलने के बाद , सुनिश्चित करें कि परिवर्तित chromedriverबाइनरी का नाम है chromedriver, और यह कि मूल बाइनरी या तो अपने मूल स्थान से स्थानांतरित हो गया है या नाम बदल दिया गया है।


इस विधि के साथ मेरा अनुभव

मुझे पहले लॉग इन करने की कोशिश के दौरान एक वेबसाइट पर पता लगाया जा रहा था, लेकिन cdc_एक समान आकार की स्ट्रिंग के साथ बदलने के बाद , मैं लॉग इन करने में सक्षम था। जैसे कि अन्य लोगों ने कहा है, अगर आपको पहले से पता चला है, तो आप अवरुद्ध हो सकते हैं। इस विधि का उपयोग करने के बाद भी अन्य कारणों की अधिकता। तो आपको उस साइट तक पहुंचने की कोशिश करनी पड़ सकती है जो आपको वीपीएन, विभिन्न नेटवर्क या आपके पास क्या है का उपयोग करके पता लगा रहा था।


@LekaBaper सिर के लिए धन्यवाद। मेरे द्वारा उपयोग किया जाने वाला क्रोमेड्रिवर संस्करण 2.41.578706 संस्करण था।
colossatr0n

2
तब भी काम नहीं किया जब मैंने अलग-अलग नेटवर्क पर नए भौतिक कंप्यूटर पर इस chromedriver.exe संशोधन का उपयोग किया।
अहमद मेमन

यह एक त्रुटि कहती है, यह संस्करण इस कंप्यूटर में काम नहीं कर सकता है :(
वालिद बूससेट

@ colossatr0n क्या कोई अनपेक्षित ओपन-सोर्स फोर्क है जिसके बारे में आप जानते हैं?
ishandutta2007

3
ध्यान दें कि क्रोमेड्राइवर लोगों ने इस मुद्दे को घोषित नहीं किया है, ताकि आप उम्मीद कर सकें कि अनिश्चित भविष्य के लिए एक कांटा का उपयोग करें या बाइनरी को संपादित करें। Bugs.chromium.org/p/chromedriver/issues/detail?id=3220
कोडियालॉजिस्ट

144

मूल रूप से सेलेनियम का पता लगाने का तरीका काम करता है, यह है कि वे पूर्व-परिभाषित जावास्क्रिप्ट चर के लिए परीक्षण करते हैं जो सेलेनियम के साथ चलने पर दिखाई देते हैं। बॉट डिटेक्शन स्क्रिप्ट आमतौर पर किसी भी वेरिएबल्स में (विंडो ऑब्जेक्ट पर) "सेलेनियम" / "वेबड्राइवर" शब्द को देखती है, और यह भी कहा जाता है $cdc_और कहे जाने वाले वैरिएबल को भी डॉक्यूमेंट करती है $wdc_। बेशक, यह सब इस बात पर निर्भर करता है कि आप किस ब्राउज़र पर हैं। सभी अलग-अलग ब्राउज़र अलग-अलग चीजों को उजागर करते हैं।

मेरे लिए, मैंने क्रोम का उपयोग किया, इसलिए, मुझे जो कुछ भी करना था, वह यह सुनिश्चित करना था कि $cdc_दस्तावेज़ चर के रूप में अब मौजूद नहीं है, और वॉइला (क्रोमेड्रिवर स्रोत कोड डाउनलोड करें, क्रोमेड्रिवर को संशोधित करें और $cdc_विभिन्न नाम के तहत फिर से संकलित करें।)

यह वह फ़ंक्शन है जिसे मैंने क्रोमेड्रिवर में संशोधित किया है:

call_function.js:

function getPageCache(opt_doc) {
  var doc = opt_doc || document;
  //var key = '$cdc_asdjflasutopfhvcZLmcfl_';
  var key = 'randomblabla_';
  if (!(key in doc))
    doc[key] = new Cache();
  return doc[key];
}

(टिप्पणी ध्यान दें, सभी मुझे लगता है मैं कर दिया किया था $cdc_करने के लिए randomblabla_

यहाँ एक छद्म कोड है जो कुछ तकनीकों को प्रदर्शित करता है जो बॉट नेटवर्क उपयोग कर सकते हैं:

runBotDetection = function () {
    var documentDetectionKeys = [
        "__webdriver_evaluate",
        "__selenium_evaluate",
        "__webdriver_script_function",
        "__webdriver_script_func",
        "__webdriver_script_fn",
        "__fxdriver_evaluate",
        "__driver_unwrapped",
        "__webdriver_unwrapped",
        "__driver_evaluate",
        "__selenium_unwrapped",
        "__fxdriver_unwrapped",
    ];

    var windowDetectionKeys = [
        "_phantom",
        "__nightmare",
        "_selenium",
        "callPhantom",
        "callSelenium",
        "_Selenium_IDE_Recorder",
    ];

    for (const windowDetectionKey in windowDetectionKeys) {
        const windowDetectionKeyValue = windowDetectionKeys[windowDetectionKey];
        if (window[windowDetectionKeyValue]) {
            return true;
        }
    };
    for (const documentDetectionKey in documentDetectionKeys) {
        const documentDetectionKeyValue = documentDetectionKeys[documentDetectionKey];
        if (window['document'][documentDetectionKeyValue]) {
            return true;
        }
    };

    for (const documentKey in window['document']) {
        if (documentKey.match(/\$[a-z]dc_/) && window['document'][documentKey]['cache_']) {
            return true;
        }
    }

    if (window['external'] && window['external'].toString() && (window['external'].toString()['indexOf']('Sequentum') != -1)) return true;

    if (window['document']['documentElement']['getAttribute']('selenium')) return true;
    if (window['document']['documentElement']['getAttribute']('webdriver')) return true;
    if (window['document']['documentElement']['getAttribute']('driver')) return true;

    return false;
};

user @szx के अनुसार, हेक्स एडिटर में केवल chromedriver.exe खोलना संभव है, और वास्तव में किसी भी संकलन के बिना, मैन्युअल रूप से प्रतिस्थापन करना।


26
हाँ, यह बिना किसी प्रोब के काम करता है, एक समस्या यह है कि यदि आप इस बदलाव से पहले "ब्लैकलिस्ट" में गिर गए हैं, तो बाहर निकलना काफी कठिन है। यदि आप मौजूदा काली सूची से बाहर निकलना चाहते हैं, तो आपको नकली कैनवास फिंगरप्रिंटिंग, अक्षम फ़्लैश, आईपी को बदलने और अनुरोध हेडर ऑर्डर बदलने (स्वैप भाषा और हेडर स्वीकार करें) को लागू करने की आवश्यकता है। एक बार जब आप ब्लैकलिस्ट में गिर गए, तो आपके पास उन्हें ट्रैक करने के लिए बहुत अच्छे उपाय हैं, भले ही आप आईपी को बदल दें, भले ही आप गुप्त में क्रोम खोल दें, आदि
Erti-Chris Eelmaa

2
मुझे फाइल "/ Users / your_username / क्रोमियम / src / chrome / test / chromedriver / js"
मिली

6
मैं बस की जगह $cdcके साथ xxxxमें chromedriver.exeएक हेक्स संपादक में है और यह काम किया! मैंने यह भी देखा कि यदि आप ब्राउज़र विंडो को अधिकतम करते हैं (बजाय पूर्वनिर्धारित आकार का उपयोग करने के) तो यह अक्सर कम पाया जाता है।
17

2
क्या यह विंडोज़, ओएसएक्स, या लिनक्स पर था? ओएक्स पर हेक्स संपादन काम नहीं करता है।
निस

5
$ zzz_zzzzzzzzzzzzzzzzzzzzzzzzzzzz_ (वर्णों की एक ही राशि) के साथ काम किया, लेकिन काम नहीं किया।
आयमोन फोर्नियर

100

जैसा कि हम पहले ही सवाल और पोस्ट किए गए उत्तरों में जान चुके हैं , यहां एक एंटी वेब-स्क्रैपिंग और बॉट डिटेक्शन सेवा है जिसे "डिस्टिल नेटवर्क्स" कहा जाता है। और, कंपनी के सीईओ के साक्षात्कार के अनुसार :

हालांकि वे नए बॉट्स बना सकते हैं, हमने सेलेनियम को एक उपकरण की पहचान करने के लिए एक तरीका निकाला है, इसलिए हम सेलेनियम को अवरुद्ध कर रहे हैं, चाहे वह कितनी बार उस बॉट पर पुनरावृति कर रहा हो । हम अब पायथन और विभिन्न तकनीकों के साथ ऐसा कर रहे हैं। एक बार जब हम देखते हैं कि एक पैटर्न एक प्रकार की बॉट से निकलता है, तो हम इंजीनियर को उस तकनीक को उलटने के लिए काम करते हैं जो वे उपयोग करते हैं और इसे दुर्भावनापूर्ण के रूप में पहचानते हैं।

यह समझने में समय और अतिरिक्त चुनौतियां लगेंगी कि वे सेलेनियम का पता कैसे लगा रहे हैं, लेकिन हम इस समय क्या कह सकते हैं:

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

स्पष्ट रूप से, उत्तर के रूप में पोस्ट करने का निर्णय लिया गया:

क्या आप किसी वेबसाइट का पता लगा सकते हैं जब आप सेलेनियम का उपयोग क्रोमेड्रिवर के साथ कर रहे हैं?

हाँ।


इसके अलावा, मैंने पुराने सेलेनियम और पुराने ब्राउज़र संस्करणों के साथ जो प्रयोग नहीं किया है - सिद्धांत में, एक निश्चित बिंदु पर सेलेनियम में कुछ लागू / जोड़ा जा सकता है जो डिस्टिल नेटवर्क बॉट डिटेक्टर वर्तमान में निर्भर करता है। फिर, अगर यह मामला है, तो हम पता लगा सकते हैं (हाँ, चलो डिटेक्टर का पता लगा सकते हैं) किस बिंदु / संस्करण में एक प्रासंगिक परिवर्तन किया गया था, चैंज और परिवर्तन में देखें और हो सकता है, यह हमें और जानकारी दे सकता है कि कहां देखना है। और यह क्या है कि वे एक वेबड्राइवर-संचालित ब्राउज़र का पता लगाने के लिए उपयोग करते हैं। यह सिर्फ एक सिद्धांत है जिसे जांचने की जरूरत है।


@RainWeinstein अच्छी तरह से, हमारे पास कोई वास्तविक प्रमाण नहीं है और हम केवल अटकलें और परीक्षण कर सकते हैं। अभी के लिए, मैं कहूंगा कि उनके पास सेलेनियम का उपयोग करके हमें पता लगाने का एक तरीका है। सेलेनियम संस्करणों के साथ प्रयोग करने का प्रयास करें - यह आपको कुछ सुराग दे सकता है।
एलेक्सी

1
क्या इसका इस बात से कोई लेना-देना है कि पंचांग का निर्धारण कैसे किया जाता है? विधि अच्छी तरह से ज्ञात श्रेणियों से दूर रहती है। github.com/SeleniumHQ/selenium/blob/…
इलियट डे लौनाय

9
इज़ीजेट डिस्टिलन नेटवर्क्स सेवा का उपयोग कर रहे हैं, हाँ, यह डमी बॉट्स को ब्लॉक कर सकता है, लेकिन जटिल नहीं, क्योंकि हमने इसे अलग-अलग आईपी से एक दिन में 2000 से अधिक अनुरोधों के साथ परीक्षण किया है (जिसे हम फिर से 'उसी' पते पर फिर से उपयोग करते हैं) इसलिए मूल रूप से आपके आईपी के लिए जाते हैं एक दिन में 5-10 अनुरोध और मैं यह बता सकता हूं कि यह सभी बॉट का पता लगाने वाली सेवाएं सिर्फ 45% काम करने वाले एल्गोरिदम को विकसित करने और बेचने के लिए हैं, हमने जो स्क्रैपर का इस्तेमाल किया था, वह यह पता लगाने में आसान था कि मैं इसे नष्ट कर सकता हूं जबकि डेस्टिनेशन नेटवर्क्स, स्क्वैरशील्ड और अन्य। जो मुझे धक्का नहीं दिया उनमें से किसी का उपयोग कभी नहीं कर सकता।
जेफरी थाजिंटोकी

3
मुझे लगता है कि वे क्रोम वेबड्राइवर में नेविगेटर.वेबड्राइवर का पता लगा रहे हैं। मैंने intig.com/blog/not-possible-to-block-chrome-headless और stackoverflow.com/questions/47297877/ की मदद से navigator.webdriver = false बनाने की कोशिश की । यह distilnetworks.com/distil_identify_cookie.html के
hoozecn

24

इसका उदाहरण वेलस्पर्फ.कॉम पर कैसे लागू किया गया है:

try {
 if (window.document.documentElement.getAttribute("webdriver")) return !+[]
} catch (IDLMrxxel) {}
try {
 if ("_Selenium_IDE_Recorder" in window) return !+""
} catch (KknKsUayS) {}
try {
 if ("__webdriver_script_fn" in document) return !+""

13
अंतिम प्रयास बंद क्यों नहीं किया गया? इसके अलावा आप अपने उत्तर को थोड़ा समझा सकते हैं।
ishandutta2007

16

JavaScripts परिणाम का विरोध करना

मैंने क्रोमेड्रिवर सोर्स कोड चेक किया है। यह ब्राउज़र में कुछ जावास्क्रिप्ट फ़ाइलों को इंजेक्ट करता है।
इस लिंक पर प्रत्येक जावास्क्रिप्ट फ़ाइल को वेब पृष्ठों पर इंजेक्ट किया गया है: https://chromium.googlesource.com/chromium/src/+/master/chrome/test/chromedriver/js/

इसलिए मैं रिवर्स इंजीनियरिंग का इस्तेमाल किया और समझ से परे हेक्स संपादन द्वारा js फ़ाइलें। अब मुझे यकीन था कि सेलेनियम गतिविधि को उजागर करने के लिए कोई और जावास्क्रिप्ट चर, फ़ंक्शन नाम और निश्चित स्ट्रिंग्स का उपयोग नहीं किया गया था। लेकिन फिर भी कुछ साइटों और reCaptcha सेलेनियम का पता लगाने!
हो सकता है कि वे ऐसे संशोधनों की जाँच करें जो क्रोमेड्रिवर जेएस निष्पादन के कारण होते हैं :)


1 संपादित करें:

क्रोम 'नाविक' पैरामीटर संशोधन

मुझे पता चला कि 'नेविगेटर' में कुछ पैरामीटर हैं जो क्रोमेड्रिवर के उपयोग से संक्षिप्त रूप से उजागर होते हैं। ये पैरामीटर हैं:

  • "navigator.webdriver" गैर-स्वचालित मोड पर यह 'अपरिभाषित' है। स्वचालित मोड पर यह 'सत्य' है।
  • "नेविगेटर.प्लगिन्स" हेडलेस क्रोम पर 0 लंबाई होती है। इसलिए मैंने प्लगइन लंबाई जाँच प्रक्रिया को मूर्ख बनाने के लिए कुछ नकली तत्व जोड़े।
  • " navigator.languages" डिफ़ॉल्ट क्रोम मूल्य '["एन-यूएस", "एन", "एस" " " पर सेट किया गया था।

तो क्या मुझे वेब पृष्ठों पर जावास्क्रिप्ट चलाने के लिए एक क्रोम विस्तार की आवश्यकता थी। मैंने लेख में दिए गए js कोड के साथ एक विस्तार किया और अपनी परियोजना में ज़िपित एक्सटेंशन को जोड़ने के लिए एक अन्य लेख का उपयोग किया । मैंने मूल्यों को सफलतापूर्वक बदल दिया है; लेकिन फिर भी कुछ नहीं बदला!

मुझे इन जैसे अन्य चर नहीं मिले, लेकिन इसका मतलब यह नहीं है कि वे मौजूद नहीं हैं। अभी भी reCaptcha क्रोमेड्राइवर का पता लगाता है, इसलिए बदलने के लिए अधिक चर होना चाहिए। अगले कदम के लिए डिटेक्टर सेवाओं की रिवर्स इंजीनियरिंग कि मुझे क्या करना नहीं चाहते हैं होना चाहिए।

अब मुझे यकीन नहीं है कि यह इस स्वचालन प्रक्रिया पर अधिक समय बिताने या वैकल्पिक तरीकों की खोज करने के लिए लायक है!


12

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

उदाहरण के लिए:

username = os.getenv("USERNAME")
userProfile = "C:\\Users\\" + username + "\\AppData\\Local\\Google\\Chrome\\User Data\\Default"
options = webdriver.ChromeOptions()
options.add_argument("user-data-dir={}".format(userProfile))
# add here any tag you want.
options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors", "safebrowsing-disable-download-protection", "safebrowsing-disable-auto-update", "disable-client-side-phishing-detection"])
chromedriver = "C:\Python27\chromedriver\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
browser = webdriver.Chrome(executable_path=chromedriver, chrome_options=options)

क्रोम टैग सूची यहाँ


11

partial interface Navigator { readonly attribute boolean webdriver; };

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

यह संपत्ति वेबसाइटों को यह निर्धारित करने की अनुमति देती है कि वेबड्राइवर द्वारा उपयोगकर्ता एजेंट नियंत्रण में है, और इसका इस्तेमाल इनकार-सेवा के हमलों को कम करने में मदद करने के लिए किया जा सकता है।

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


4
"स्रोत कोड के बिना यह बताना मुश्किल है" .. अच्छी तरह से स्रोत कोड स्वतंत्र रूप से उपलब्ध है
कोरी गोल्डबर्ग

6
मैं प्रश्न के स्रोत कोड में वेबसाइट के बिना था। यह बताना मुश्किल है कि वे किसके खिलाफ जाँच कर रहे हैं।
bryce

8

कहा जाता है कि window.navigator.webdriver === trueअगर वेबड्राइवर के साथ काम करना फ़ायरफ़ॉक्स सेट करना है। यह पुराने चश्मे में से एक के अनुसार था (उदाहरण के लिए: आर्काइव.ओआरजी ) लेकिन मैं इसे नए में नहीं पा सकता था सिवाय उपांगों में कुछ बहुत अस्पष्ट शब्दों के अलावा।

इसके लिए एक परीक्षण फ़ाइल में selenium कोड में है फिंगरप्रिंट_test.js जहां अंत में टिप्पणी "वर्तमान में केवल फ़ायरफ़ॉक्स में लागू" कहती है, लेकिन मैं उस दिशा में किसी भी सरल grepआईएनजी के साथ किसी भी कोड की पहचान करने में सक्षम नहीं था , न तो वर्तमान (41.0.2) फ़ायरफ़ॉक्स रिलीज़-ट्री और न ही क्रोमियम-ट्री में।

मुझे जनवरी 2015 से फ़ायरफ़ॉक्स ड्राइवर b82512999938 में फ़िंगरप्रिंटिंग के बारे में एक पुरानी टिप्पणी के लिए एक टिप्पणी मिली । यह कोड अभी भी सेलेनियम जीआईटी-मास्टर javascript/firefox-driver/extension/content/server.jsमें है जिसे वर्तमान डब्ल्यू 3 सी वेबड्राइवर कल्पना में थोड़े अलग तरीके से लिखे गए परिशिष्ट से जोड़ने वाली टिप्पणी के साथ कल डाउनलोड किया गया था।


2
मैंने अभी-अभी फ़ायरफ़ॉक्स 55 के साथ वेबड्राइवर का परीक्षण किया है और मैं पुष्टि कर सकता हूं कि यह सच नहीं है। चर window.navigator.webdriverको परिभाषित नहीं किया गया है।
स्पीडप्लेन

1
अद्यतन: मैंने फ़ायरफ़ॉक्स 65 के साथ परीक्षण किया, और यह सच है:window.navigator.webdriver == true
स्पीड

फ़ायरफ़ॉक्स संस्करण 76 अभी भी इसे सच दिखाता है
user2284144

8

इसके अलावा @ Erti-Chris Eelmaa के महान जवाब के लिए - वहाँ गुस्सा है window.navigator.webdriverऔर यह केवल पढ़ने के लिए है। घटना यदि आप इसे करने के लिए falseइसके मूल्य में परिवर्तन अभी भी होगा true। यही कारण है कि स्वचालित सॉफ़्टवेयर द्वारा संचालित ब्राउज़र का अभी भी पता लगाया जा सकता है। MDN

चर को ध्वज --enable-automationमें क्रोम द्वारा प्रबंधित किया जाता है । क्रोमेड्राइवर उस झंडे के साथ क्रोम लॉन्च करता है और क्रोम सेट करता window.navigator.webdriverहै true। आप इसे यहाँ पा सकते हैं । आपको ध्वज को "स्विचेस को बाहर करना" जोड़ना होगा। उदाहरण के लिए (गोलंग):

package main

import (
    "github.com/tebeka/selenium"
    "github.com/tebeka/selenium/chrome"
)

func main() {

caps := selenium.Capabilities{
    "browserName": "chrome",
}

chromeCaps := chrome.Capabilities{
    Path:            "/path/to/chrome-binary",
    ExcludeSwitches: []string{"enable-automation"},
}
caps.AddChrome(chromeCaps)

wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", 4444))
}

6

ऐसा लगता है कि वे एक वेब एप्लिकेशन फ़ायरवॉल के पीछे हैं। Modsecurity पर एक नज़र डालें और यह देखने के लिए कि वे कैसे काम करते हैं। वास्तव में, आप जो पूछ रहे हैं वह बॉट डिटेक्शन चोरी कैसे करना है। यह सेलेनियम वेब ड्राइवर के लिए नहीं है। यह आपके वेब एप्लिकेशन के परीक्षण के लिए है जो अन्य वेब एप्लिकेशन को हिट नहीं करता है। यह संभव है, लेकिन मूल रूप से, आपको यह देखना होगा कि उनके नियम सेट में एक WAF क्या दिखता है और यदि आप कर सकते हैं तो विशेष रूप से सेलेनियम से बचें। फिर भी, यह अभी भी काम नहीं कर सकता क्योंकि आप नहीं जानते कि वे क्या उपयोग कर रहे हैं। आपने सही पहला चरण किया, जो उपयोगकर्ता एजेंट को रोक रहा है। अगर वह काम नहीं करता है, तो एक WAF जगह में है और आप शायद अधिक मुश्किल पाने के लिए की जरूरत है।

संपादित करें: अन्य उत्तर से लिया गया बिंदु। सुनिश्चित करें कि आपका उपयोगकर्ता एजेंट वास्तव में पहले सही ढंग से सेट किया जा रहा है। हो सकता है कि उसने एक स्थानीय वेब सर्वर को मारा हो या बाहर जाने वाले ट्रैफ़िक को सूँघ लिया हो।


मुझे लगता है कि आप सही रास्ते पर हैं। मैंने अपने सेटअप के साथ परीक्षण किया और उपयोगकर्ता एजेंट को एक मान्य उपयोगकर्ता एजेंट स्ट्रिंग के साथ बदल दिया जो सफलतापूर्वक गुजर गया और उसी परिणाम को प्राप्त किया, स्टुबह ने अनुरोध को अवरुद्ध कर दिया।
ब्रायन कैन

1
यह विषय बहुत विशाल है, मैं कहूंगा कि यदि आप इसे नहीं समझते हैं, और आप इसे समझना चाहते हैं, तो यह सही जगह नहीं है। Owasp से शुरू करें। पैठ परीक्षण और वेब सुरक्षा में देखें। इसके अलावा, जैसा मैंने पहले कहा था, विशेष रूप से इस विषय के लिए modsecurity और WAF में देखें।
बैसेल सैमन

1
अगर यह HTTP हेडर का मुद्दा होता तो सामान्य ब्राउज़र ब्लॉक नहीं होता? HTTP हेडर बिल्कुल एक जैसे हैं। इसके अलावा मैं वास्तव में उस गिटब लिंक के साथ क्या देख रहा हूं? क्या आपने सेलेनियम का उपयोग करने की कोशिश की है कि वह स्टब पर जाए? कुछ बहुत दूर है।
रयान वेनस्टेन

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

1
मैं एक डेवलपर भी हूं :)। सीखना एक कारण है जिससे मैं पीछे रह सकता हूं। मुझे मदद करने में कोई आपत्ति नहीं है, मैं सिर्फ यह स्पष्ट करना चाहता था कि मैं आपके इरादों को नहीं जानता था और आपकी वेबसाइट सुरक्षा को बाईपास करने में आपकी मदद नहीं कर सकता था। हालांकि आपके प्रश्न का उत्तर देने के लिए, यह सेलेनियम नहीं है कि वे पता लगा रहे हैं। नियमों ने संदिग्ध व्यवहार का पता लगाया और आक्रामक ग्राहक के खिलाफ उचित उपाय करने का फैसला किया। वे तुम्हें पकड़ते हैं जो तुम नहीं कर रहे हो उससे ज्यादा तुम क्या कर रहे हो। रेपो लिंक में, आप इस फ़ाइल को एक आइडिया बेस_rules / modsecurity_crs_20_protocol_violations.conf प्राप्त करने के लिए चेकआउट कर सकते हैं
सम्मान

6

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

उदाहरण के लिए, किसी साइट पर जाकर फिर तुरंत माउस को संबंधित बटन पर ले जाकर कुछ क्रिया करने के लिए, एक सेकंड से भी कम समय में, ऐसा कुछ नहीं जो कोई उपयोगकर्ता वास्तव में नहीं करेगा।

यह एक डिबगिंग टूल के रूप में भी उपयोगी हो सकता है ताकि साइट का उपयोग किया जा सके जैसे कि https://panopticlick.eff.org/ यह देखने के लिए कि आपका ब्राउज़र कितना अनूठा है; यह आपको यह सत्यापित करने में भी मदद करेगा कि क्या कोई विशिष्ट पैरामीटर है जो इंगित करता है कि आप सेलेनियम में चल रहे हैं।


3
मैंने पहले ही उस वेबसाइट का उपयोग कर लिया है और फिंगरप्रिंट मेरे सामान्य ब्राउज़र के समान है। इसके अलावा, मैं कुछ भी स्वचालित नहीं कर रहा हूँ। मैं सामान्य रूप से ब्राउज़ कर रहा हूं।
रयान वेनस्टाइन

6

मैंने जो बॉट डिटेक्शन देखा है, वह नीचे दिए गए उत्तरों के माध्यम से मैंने जितना पढ़ा है, उससे अधिक परिष्कृत या कम से कम भिन्न प्रतीत होता है।

विशेषज्ञ 1:

  1. मैं पायथन कंसोल से सेलेनियम के साथ एक ब्राउज़र और वेब पेज खोलता हूं।
  2. माउस पहले से ही एक विशिष्ट स्थान पर है जहाँ मुझे पता है कि पेज लोड होते ही एक लिंक दिखाई देगा। मैं कभी माउस नहीं हिलाता।
  3. मैं बाईं माउस बटन को एक बार दबाता हूं (यह उस कंसोल से ध्यान केंद्रित करने के लिए आवश्यक है जहां पायथन ब्राउज़र पर चल रहा है)।
  4. मैं बाईं माउस बटन को फिर से दबाता हूं (याद रखें, कर्सर किसी दिए गए लिंक के ऊपर है)।
  5. लिंक सामान्य रूप से खुलता है, जैसा कि यह होना चाहिए।

विशेषज्ञ 2:

  1. पहले की तरह, मैंने पायथन कंसोल से सेलेनियम के साथ एक ब्राउज़र और वेब पेज खोला।

  2. इस बार माउस के साथ क्लिक करने के बजाय, मैं एक ही तत्व को यादृच्छिक ऑफसेट के साथ क्लिक करने के लिए सेलेनियम (पायथन कंसोल में) का उपयोग करता हूं।

  3. लिंक नहीं खुलता है, लेकिन मुझे साइन अप पृष्ठ पर ले जाया जाता है।

प्रभाव:

  • सेलेनियम के माध्यम से एक वेब ब्राउज़र खोलना मुझे मानव दिखने से रोकता नहीं है
  • मानव की तरह माउस को स्थानांतरित करना मानव के रूप में वर्गीकृत करने के लिए आवश्यक नहीं है
  • एक ऑफसेट के साथ सेलेनियम के माध्यम से कुछ क्लिक करना अभी भी अलार्म उठाता है

रहस्यमय लगता है, लेकिन मुझे लगता है कि वे सिर्फ यह निर्धारित कर सकते हैं कि कोई कार्रवाई सेलेनियम से हुई है या नहीं, जबकि उन्हें परवाह नहीं है कि ब्राउज़र खुद सेलेनियम के माध्यम से खोला गया था या नहीं। या वे यह निर्धारित कर सकते हैं कि क्या खिड़की पर ध्यान केंद्रित है? यह सुनना दिलचस्प होगा कि क्या किसी के पास कोई अंतर्दृष्टि है।


3
मेरा विश्वास है कि सेलेनियम तत्वों को खोजने और उन तक पहुंचने के लिए जावास्क्रिप्ट के माध्यम से पृष्ठ में कुछ इंजेक्ट करता है। यह इंजेक्शन मुझे विश्वास है कि वे पता लगा रहे हैं।
zeusemighty

आप सही हैं, यह परीक्षण 100% वैध है। मैंने एक ही परिणाम के साथ इसी तरह का परीक्षण किया था। मैं Enter टैब भेज सकता हूं या चाबियाँ भेज सकता हूं। जिस पल मैं तत्वों को एक्सेस करता हूं, पेज काम करना बंद कर देता है। इसलिए यदि ड्राइवर ब्राउज़र में कुछ जावास्क्रिप्ट इंजेक्ट करता है। हम बस क्रोम एक्सटेंशन का उपयोग करके उस जावास्क्रिप्ट को एन्क्रिप्ट कर सकते हैं और उसी एक्सटेंशन का उपयोग करके अगले पृष्ठ पर डिक्रिप्ट कर सकते हैं। मैं अगले दिनों इसे देखने की कोशिश करूंगा।
तिकड़ी

6

एक और बात मुझे पता चली है कि कुछ वेबसाइटें एक प्लेटफ़ॉर्म का उपयोग करती हैं जो उपयोगकर्ता एजेंट की जाँच करता है। यदि मान में है: "हेडलेसक्रोम" हेडलेस मोड का उपयोग करते समय व्यवहार अजीब हो सकता है।

इसके लिए वर्कअराउंड जावा में उदाहरण के लिए, उपयोगकर्ता एजेंट मूल्य को ओवरराइड करना होगा:

chromeOptions.addArguments("--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36");

5

कुछ साइटें इसका पता लगा रही हैं:

function d() {
try {
    if (window.document.$cdc_asdjflasutopfhvcZLmcfl_.cache_)
        return !0
} catch (e) {}

try {
    //if (window.document.documentElement.getAttribute(decodeURIComponent("%77%65%62%64%72%69%76%65%72")))
    if (window.document.documentElement.getAttribute("webdriver"))
        return !0
} catch (e) {}

try {
    //if (decodeURIComponent("%5F%53%65%6C%65%6E%69%75%6D%5F%49%44%45%5F%52%65%63%6F%72%64%65%72") in window)
    if ("_Selenium_IDE_Recorder" in window)
        return !0
} catch (e) {}

try {
    //if (decodeURIComponent("%5F%5F%77%65%62%64%72%69%76%65%72%5F%73%63%72%69%70%74%5F%66%6E") in document)
    if ("__webdriver_script_fn" in document)
        return !0
} catch (e) {}

यह क्रोम और फ़ायरफ़ॉक्स, सेलेनियम 3.5.0, क्रोमड्राइव 2.31.488774, जेकॉड्रिवर 0.18.0
जेरीपी

4

निम्नलिखित कोड के साथ एक html पृष्ठ लिखें। आप देखेंगे कि DOM सेलेनियम में बाहरी HTML में एक वेबड्राइवर विशेषता लागू होती है

<html>
<head>
  <script type="text/javascript">
  <!--
    function showWindow(){
      javascript:(alert(document.documentElement.outerHTML));
    }
  //-->
  </script>
</head>
<body>
  <form>
    <input type="button" value="Show outerHTML" onclick="showWindow()">
  </form>
</body>
</html>


4
विशेषता केवल फ़ायरफ़ॉक्स में जोड़ी गई है।
लुई

1
और ब्राउज़र को नियंत्रित करने वाले सेलेनियम एक्सटेंशन से इसे निकालना संभव है। यह वैसे भी काम करेगा।
m3nda

3

मैंने जावास्क्रिप्ट "कुंजी" चर को इस तरह बदलते पाया है:

//Fools the website into believing a human is navigating it
        ((JavascriptExecutor)driver).executeScript("window.key = \"blahblah\";");

Google क्रोम के साथ सेलेनियम वेबड्राइवर का उपयोग करते समय कुछ वेबसाइटों के लिए काम करता है, क्योंकि कई साइटें इस वेरिएबल की जांच करती हैं ताकि सेलेनियम द्वारा खराब होने से बचा जा सके।


2

यह मुझे लगता है कि सेलेनियम के साथ करने का सबसे सरल तरीका एक्सएचआर को बाधित करना है जो ब्राउज़र फिंगरप्रिंट को वापस भेजता है।

लेकिन चूंकि यह एक सेलेनियम-मात्र समस्या है, इसलिए इसका बेहतर उपयोग कुछ और करना है। सेलेनियम इस तरह से आसान बनाने के लिए माना जाता है, कठिन नहीं है।


सेलेनियम के अन्य विकल्प क्या हैं?
ताई

मुझे लगता है कि अनुरोध मुख्य अजगर विकल्प होगा। यदि आप वही सटीक अनुरोध भेजते हैं जो आपका ब्राउज़र भेजता है, तो आप एक सामान्य ब्राउज़र के रूप में दिखाई देंगे।
पेंडियारियो

2

आप "सक्षम-स्वचालन" पैरामीटर का उपयोग करने का प्रयास कर सकते हैं

var options = new ChromeOptions();

// hide selenium
options.AddExcludedArguments(new List<string>() { "enable-automation" });

var driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), options);

लेकिन, मैं चेतावनी देना चाहता हूं कि यह क्षमता क्रोमड्राइवर 79.0.3945.16 में तय की गई थी । तो शायद आपको क्रोम के पुराने संस्करणों का उपयोग करना चाहिए।

इसके अलावा, एक अन्य विकल्प के रूप में, आप Chrome के बजाय InternetExplorerDriver का उपयोग करने का प्रयास कर सकते हैं। मेरे लिए, IE बिना किसी हैक के बिल्कुल भी ब्लॉक नहीं होता है।

और अधिक जानकारी के लिए यहां एक नज़र डालने की कोशिश करें:

सेलेनियम वेबड्राइवर: सेलेनियम पहचान को रोकने के लिए नेविगेटर.वेबड्राइवर ध्वज को संशोधित करना

क्रोम v76 के भीतर "क्रोम स्वचालित सॉफ्टवेयर द्वारा नियंत्रित किया जा रहा है" छिपाने में असमर्थ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.