เว็บไซต์สามารถตรวจจับได้เมื่อคุณใช้ซีลีเนียมกับ Chromedriver หรือไม่


365

ฉันได้ทดลองซีลีเนียมด้วย Chromedriver แล้วและพบว่าบางหน้าสามารถตรวจจับได้ว่าคุณกำลังใช้ซีลีเนียมแม้ว่าจะไม่มีระบบอัตโนมัติเลย แม้กระทั่งตอนที่ฉันค้นหาด้วยตนเองเพียงแค่ใช้โครเมี่ยมผ่าน Selenium และ Xephyr ฉันมักจะได้รับหน้าที่แจ้งว่ามีการตรวจพบกิจกรรมที่น่าสงสัย ฉันได้ตรวจสอบตัวแทนผู้ใช้ของฉันและลายนิ้วมือเบราว์เซอร์ของฉันและพวกเขาทั้งหมดเหมือนกับเบราว์เซอร์โครมทั่วไป

เมื่อฉันเรียกดูไซต์เหล่านี้ด้วย Chrome ปกติทุกอย่างทำงานได้ดี แต่ช่วงเวลาที่ฉันใช้ซีลีเนียมที่ฉันตรวจพบ

ในทางทฤษฎีแล้ว Chromedriver และ Chrome ควรมีลักษณะเหมือนกันทุกประการกับเว็บเซิร์ฟเวอร์ แต่อย่างใดพวกมันสามารถตรวจจับได้

หากคุณต้องการรหัสทดสอบลองทำสิ่งนี้:

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 คุณจะได้รับการเปลี่ยนเส้นทางและ 'ถูกบล็อก' ภายในหนึ่งหรือสองคำขอ ฉันกำลังตรวจสอบเรื่องนี้และฉันไม่สามารถหาวิธีที่พวกเขาสามารถบอกได้ว่าผู้ใช้กำลังใช้ซีลีเนียม

พวกเขาทำมันได้อย่างไร?

แก้ไขล่าสุด:

ฉันติดตั้งปลั๊กอิน Selenium IDE ใน Firefox และฉันถูกแบนเมื่อฉันไปที่ stubhub.com ในเบราว์เซอร์ Firefox ปกติด้วยปลั๊กอินเพิ่มเติมเท่านั้น

แก้ไข:

เมื่อฉันใช้พู้ทำเล่นเพื่อดูคำขอ HTTP ที่ถูกส่งไปมาฉันสังเกตว่าคำขอ 'เบราว์เซอร์ปลอม' มักจะมี 'ไม่แคช' ในส่วนหัวของการตอบกลับ

แก้ไข:

ผลลัพธ์เช่นนี้มีวิธีการตรวจสอบว่าฉันอยู่ในหน้า Selenium Webdriver จาก Javascriptแนะนำว่าไม่ควรมีวิธีการตรวจพบเมื่อคุณใช้งาน webdriver แต่หลักฐานนี้แสดงให้เห็นเป็นอย่างอื่น

แก้ไข:

เว็บไซต์อัปโหลดลายนิ้วมือไปยังเซิร์ฟเวอร์ของพวกเขา แต่ฉันได้ตรวจสอบและลายนิ้วมือของซีลีเนียมนั้นเหมือนกับลายนิ้วมือเมื่อใช้โครเมี่ยม

แก้ไข:

นี่เป็นหนึ่งใน payloads ลายนิ้วมือที่พวกเขาส่งไปยังเซิร์ฟเวอร์ของพวกเขา

{"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"}}

มันเหมือนกันในซีลีเนียมและโครเมี่ยม

แก้ไข:

VPN ใช้งานได้ครั้งเดียว แต่ตรวจพบหลังจากฉันโหลดหน้าแรก เห็นได้ชัดว่ามีการเรียกใช้จาวาสคริปต์เพื่อตรวจหา Selenium


4
@ RyanWeinstein: มันไม่ใช่การจราจร ฉันเดาว่าซีลีเนียมจำเป็นต้องเปิดเผยฮุคของ JavaScript ซึ่งสามารถตรวจพบได้ใน JavaScript ฝั่งไคลเอ็นต์
Mikko Ohtamaa

5
หรือถ้าเป็นการเข้าชมมันเป็นรูปแบบการรับส่งข้อมูล .... คุณกำลังเรียกดูหน้าเว็บเร็วเกินไป
Mikko Ohtamaa

6
ฉันไม่ได้ดูเร็วเกินไป ฉันโหลดหน้าเดียวเท่านั้นและฉันใช้งานผ่านปกติโดยใช้เมาส์และแป้นพิมพ์ นอกจากนี้ยังไม่เหมาะสมที่ Selenium ต้องเปิดเผย hooks เนื่องจาก chrome.exe ทำงานอย่างแท้จริง มันใช้งานโครเมียมปกติและให้คุณรับข้อมูลได้ ความคิดอื่น ๆ ? ฉันคิดว่าอาจมีบางอย่างเกี่ยวกับคุกกี้ นี่ทำให้ฉันบ้า
Ryan Weinstein

5
เว็บไซต์นี้ใช้distillเทคโนโลยีการตรวจจับบอทและส่งมอบเนื้อหาโดยใช้akamaitechnologies.comCDN จากที่แตกต่างกัน IPS เช่น95.100.59.245, 104.70.243.66,23.202.161.241
SIslam

5
ฉันกำลังประสบปัญหาเดียวกันกับซีลีเนียมและไดรเวอร์ Firefox สิ่งที่น่าสนใจที่ควรทราบคือฉันใช้ Selenium ใน VMWare Workstation Virtual Machine ที่ใช้งานอินเทอร์เน็ตผ่าน NAT เครื่องโฮสต์สามารถเข้าถึง stubhub ในขณะที่ VM ไม่สามารถเข้าถึงได้เมื่อใช้ Selenium หรือแม้แต่ Selenium ที่เปิดใช้เบราว์เซอร์ ฉันมี VM เบราว์เซอร์ที่ถูกบล็อคอินสแตนซ์และ stubhub ยังคงจดจำเครื่องและบล็อกไว้ ดังนั้นจึงต้องมีการแสดงลายนิ้วมือของเบราว์เซอร์และเครื่องในบางลักษณะ
Brian Cain

คำตอบ:


51

สำหรับผู้ใช้ Mac

การเปลี่ยนcdc_ตัวแปรโดยใช้ Vim หรือ Perl

คุณสามารถใช้vimหรือเป็น @Vic Seedoubleyew ได้ชี้ให้เห็นในคำตอบโดย @ Erti-Chris Eelmaa perlเพื่อแทนที่cdc_ตัวแปรในchromedriver( ดูโพสต์โดย @ Erti-Chris Eelmaa เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับตัวแปรนั้น ) การใช้vimหรือperlป้องกันไม่ให้คุณต้องคอมไพล์ซอร์สโค้ดอีกครั้งหรือใช้ hex-editor ตรวจสอบให้แน่ใจว่าได้ทำสำเนาของต้นฉบับ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ในผลลัพธ์แสดงว่าคุณเปลี่ยนไดรเวอร์สำเร็จ


ใช้ Perl

บรรทัดด้านล่างแทนที่cdc_ด้วยdog_:

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

ตรวจสอบให้แน่ใจว่าสตริงการแทนที่มีจำนวนอักขระเท่ากับสตริงการค้นหามิฉะนั้นchromedriverจะล้มเหลว

คำอธิบาย Perl

s///g แสดงว่าคุณต้องการค้นหาสตริงและแทนที่ด้วยโกลบอลด้วยสตริงอื่น (แทนที่เหตุการณ์ทั้งหมด)

เช่น, s/string/replacment/g

ดังนั้น,

s/// หมายถึงการค้นหาและแทนที่สตริง

cdc_ เป็นสตริงการค้นหา

dog_ เป็นสตริงแทนที่

g เป็นกุญแจสำคัญในโลกซึ่งจะแทนที่ทุกสายที่เกิดขึ้น

วิธีการตรวจสอบว่าการเปลี่ยน Perl ทำงานหรือไม่

บรรทัดต่อไปนี้จะพิมพ์ทุกครั้งที่มีสตริงการค้นหา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_ด้วยสตริงที่มีขนาดเท่ากันฉันก็สามารถเข้าสู่ระบบได้เช่นเดียวกับคนอื่น ๆ ที่เคยพูดแม้ว่าถ้าคุณถูกตรวจพบแล้วคุณอาจถูกบล็อก เหลือเฟือด้วยเหตุผลอื่น ๆ แม้หลังจากใช้วิธีนี้ ดังนั้นคุณอาจต้องลองเข้าถึงไซต์ที่ตรวจจับคุณโดยใช้ VPN เครือข่ายอื่นหรือสิ่งที่มีอยู่


@LekaBaper ขอบคุณที่เฮงซวย รุ่น Chromedriver ที่ฉันใช้คือรุ่น 2.41.578706
colossatr0n

2
ไม่ทำงานแม้ว่าฉันจะใช้การดัดแปลง Chromedriver.exe นี้ในคอมพิวเตอร์ที่มีอยู่จริงบนเครือข่ายอื่น
Ahmed Memon

เป็นข้อผิดพลาดที่บอกว่ารุ่นนี้ไม่สามารถทำงานกับคอมพิวเตอร์เครื่องนี้ได้ :(
Walid Bousseta

@ colossatr0n มีส้อมโอเพนซอร์สที่ตรวจไม่พบซึ่งคุณทราบหรือไม่?
ishandutta2007

3
โปรดทราบว่าคน Chromedriver ได้ประกาศปัญหานี้แล้วจะไม่แก้ไขดังนั้นคุณสามารถคาดหวังได้ว่าจะต้องใช้ทางแยกหรือแก้ไขไบนารีสำหรับอนาคตที่ไม่มีกำหนด bugs.chromium.org/p/chromedriver/issues/detail?id=3220
ประสาทวิทยา

144

โดยพื้นฐานแล้ววิธีการตรวจจับซีลีเนียมทำงานได้คือพวกมันทดสอบตัวแปรจาวาสคริปต์ที่กำหนดไว้ล่วงหน้าซึ่งจะปรากฏขึ้นเมื่อทำงานกับซีลีเนียม สคริปต์ตรวจจับบอทมักจะมองอะไรที่มีคำว่า "ซีลีเนียม" / "webdriver" ในใด ๆ ของตัวแปร (บนวัตถุหน้าต่าง) และยังตัวแปรเอกสารที่เรียกว่าและ$cdc_ $wdc_แน่นอนทั้งหมดนี้ขึ้นอยู่กับเบราว์เซอร์ที่คุณใช้งาน เบราว์เซอร์ที่แตกต่างกันทั้งหมดเปิดเผยสิ่งต่าง ๆ

สำหรับฉันฉันใช้ chrome ดังนั้นสิ่งที่ฉันต้องทำก็คือเพื่อให้แน่ใจว่า$cdc_ไม่มีตัวตนเอกสารอีกต่อไปและ voila (ดาวน์โหลดรหัส Chromedriver ที่มาแก้ไข Chromedriver และคอมไพล์ใหม่$cdc_ภายใต้ชื่ออื่น)

นี่คือฟังก์ชั่นที่ฉันแก้ไขใน Chromedriver:

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;
};

ตามผู้ใช้ @ szx, มันเป็นไปได้ที่จะเปิด Chromedriver.exe ใน hex editor, และทำการแทนที่ด้วยตัวเอง, โดยไม่ต้องทำการคอมไพล์ใด ๆ


26
ใช่มันใช้งานได้โดยไม่ต้องตรวจสอบหมายเหตุปัญหาหนึ่งคือถ้าคุณล้มลงใน "บัญชีดำ" ก่อนการเปลี่ยนแปลงนี้มันค่อนข้างยากที่จะออกไป หากคุณต้องการออกจากบัญชีดำที่มีอยู่คุณต้องใช้ลายนิ้วมือปลอมผ้าใบปิดใช้งานแฟลชเปลี่ยน IP และเปลี่ยนลำดับส่วนหัวคำขอ (ภาษาสลับและยอมรับส่วนหัว) เมื่อคุณตกอยู่ในบัญชีดำพวกเขามีมาตรการที่ดีมากในการติดตามคุณแม้ว่าคุณจะเปลี่ยน IP แม้ว่าคุณจะเปิดโครเมี่ยมแบบไม่ระบุตัวตน ฯลฯ
Erti-Chris Eelmaa

2
ฉันพบไฟล์ "/ Users / your_username / chromium / src / chrome / test / chromedriver / js"
JonghoKim

7
ฉันเพียงแค่แทนที่$cdcด้วยxxxxในchromedriver.exeตัวแก้ไขฐานสิบหกและใช้งานได้! ฉันยังสังเกตเห็นว่าถ้าคุณขยายหน้าต่างเบราว์เซอร์ให้ใหญ่สุด (แทนที่จะใช้ขนาดที่กำหนดไว้ล่วงหน้า) จะตรวจพบได้น้อย
szx

2
เป็นบน windows, osx หรือ linux หรือไม่ การแก้ไข Hex บน osx ดูเหมือนจะไม่ทำงาน
นิช

5
แก้ไขด้วย hex ด้วย $ zzz_zzzzzzzzzzzzzzzzzzzzzz_ (จำนวนอักขระเท่ากัน) แต่ไม่ได้ผล
Aymon Fournier

100

เนื่องจากเราได้พบแล้วในคำถามและคำตอบที่โพสต์มีการต่อต้านการคัดลอกเว็บและบริการตรวจจับ Bot ที่เรียกว่า"Distil Networks"ในการเล่นที่นี่ และตามการสัมภาษณ์ของ CEO ของ บริษัท:

แม้ว่าพวกเขาจะสามารถสร้างบอทใหม่เราก็ค้นพบวิธีที่จะระบุซีลีเนียมซึ่งเป็นเครื่องมือที่พวกเขาใช้อยู่ดังนั้นเราจึงปิดกั้นซีลีเนียมไม่ว่าพวกเขาจะทำซ้ำบอทนั้นกี่ครั้งก็ตาม เรากำลังทำสิ่งนี้กับ Python และเทคโนโลยีที่แตกต่างกันมากมาย เมื่อเราเห็นรูปแบบที่ปรากฏจากบอตประเภทหนึ่งจากนั้นเราทำงานเพื่อย้อนกลับวิศวกรรมเทคโนโลยีที่พวกเขาใช้และระบุว่าเป็นอันตราย

ต้องใช้เวลาและความท้าทายเพิ่มเติมเพื่อทำความเข้าใจว่าพวกเขาตรวจจับซีลีเนียมได้อย่างไร แต่เราสามารถพูดอะไรได้อย่างแน่นอนในขณะนี้:

  • มันไม่เกี่ยวข้องกับการกระทำของคุณกับซีลีเนียม - เมื่อคุณไปยังไซต์คุณจะถูกตรวจพบและแบนในทันที ฉันพยายามเพิ่มความล่าช้าแบบสุ่มเทียมระหว่างการดำเนินการหยุดชั่วคราวหลังจากโหลดหน้าเว็บ - ไม่มีอะไรช่วย
  • มันไม่เกี่ยวกับลายนิ้วมือของเบราว์เซอร์ - ลองในหลายเบราว์เซอร์ที่มีโปรไฟล์ที่สะอาดและไม่ใช้โหมดไม่ระบุตัวตน - ไม่มีอะไรช่วย
  • เนื่องจากตามคำแนะนำในการสัมภาษณ์นี่เป็น "วิศวกรรมย้อนกลับ" ฉันสงสัยว่ามันทำด้วยรหัส JS บางตัวที่ถูกประหารในเบราว์เซอร์เผยให้เห็นว่านี่เป็นเบราว์เซอร์อัตโนมัติผ่านซีลีเนียม webdriver

ตัดสินใจที่จะโพสต์มันเป็นคำตอบเนื่องจากชัดเจน:

เว็บไซต์สามารถตรวจจับได้เมื่อคุณใช้ซีลีเนียมกับ Chromedriver หรือไม่

ใช่.


นอกจากนี้สิ่งที่ฉันไม่ได้ทดลองคือซีลีเนียมที่เก่ากว่าและเบราว์เซอร์รุ่นเก่า - ในทางทฤษฎีอาจมีบางสิ่งที่ถูกนำไปใช้ / เพิ่มเข้าไปในซีลีเนียมในบางจุดที่เครื่องตรวจจับบ็อต Distil Networks อาศัยอยู่ในปัจจุบัน จากนั้นหากเป็นกรณีนี้เราอาจตรวจจับ (ใช่แล้วตรวจจับตัวตรวจจับ) ว่ามีการเปลี่ยนแปลงที่เกี่ยวข้องที่จุดใด / รุ่นใดให้ดูที่รายการเปลี่ยนแปลงและชุดการเปลี่ยนแปลงและอาจเป็นเช่นนี้จะให้ข้อมูลเพิ่มเติมแก่เรา และมันใช้เพื่อตรวจจับเบราว์เซอร์ที่ขับเคลื่อนด้วยเว็บสแกน มันเป็นเพียงทฤษฎีที่ต้องทำการทดสอบ


@ RyanWeinstein ดีเราไม่มีหลักฐานที่แท้จริงและเราสามารถเก็งกำไรและทดสอบเท่านั้น ตอนนี้ฉันจะบอกว่าพวกเขามีวิธีการตรวจสอบเราโดยใช้ซีลีเนียม ลองทำการทดลองกับซีลีเนียมเวอร์ชั่น - นี่อาจเป็นประโยชน์กับคุณ
alecxe

1
มันจะต้องทำอย่างไรกับวิธีการกำหนดพอร์ตชั่วคราว? วิธีการอยู่ห่างจากช่วงที่รู้จักกันดี github.com/SeleniumHQ/selenium/blob/…
Elliott de Launay

9
Easyjet กำลังใช้บริการ distilnetwork ใช่มันสามารถบล็อกหุ่นบอท แต่ไม่ใช่คนที่ซับซ้อนเพราะเราได้ทำการทดสอบกับคำขอมากกว่า 2000 คำขอต่อวันจาก IP ที่แตกต่างกัน (ซึ่งเราใช้ที่อยู่เดียวกันซ้ำอีกครั้ง) ดังนั้นโดยพื้นฐานแล้วแต่ละ IP 5-10 คำขอต่อวันและจากนี้ฉันสามารถบอกได้ว่าบริการตรวจจับบ็อตทั้งหมดนี้อยู่ที่นั่นเพื่อพัฒนาและขายอัลกอริทึมการทำงาน 45% scrapper ที่เราใช้นั้นง่ายต่อการตรวจจับฉันสามารถปิดกั้นได้ในขณะที่ destilnetworks squareshield และอื่น ๆ ไม่สามารถผลักฉันให้ไม่ใช้สิ่งใดเลย
Jeffery ThaGintoki

3
ฉันคิดว่าพวกเขากำลังตรวจจับ navigator.webdriver ใน chrome webdriver ฉันพยายามที่จะทำให้ navigator.webdriver = false ด้วยความช่วยเหลือของintoli.com/blog/not-possible-to-block-chrome-headlessและstackoverflow.com/questions/47297877/... จะส่งคืนหน้าการตรวจจับบ็อตแทนdistilnetworks.com/distil_identify_cookie.html
hoozecn

24

ตัวอย่างการใช้งานบน wellsfargo.com:

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

ฉันได้ตรวจสอบซอร์สโค้ดของ Chromedriver แล้ว ที่ฉีดไฟล์จาวาสคริปต์ลงในเบราว์เซอร์
ไฟล์จาวาสคริปต์ทุกไฟล์ในลิงค์นี้จะถูกฉีดเข้าสู่เว็บเพจ: https://chromium.googlesource.com/chromium/src/+/master/chrome/test/chromedriver/js/

ดังนั้นฉันจึงใช้วิศวกรรมย้อนกลับและทำให้ไฟล์ js สับสนโดยการแก้ไข Hex ตอนนี้ฉันแน่ใจว่าไม่มีตัวแปร javascript ชื่อฟังก์ชั่นและสตริงคงที่อีกต่อไปที่ใช้ในการเปิดเผยกิจกรรมซีลีเนียม แต่ก็ยังมีบางไซต์และ reCaptcha ตรวจจับซีลีเนียม!
พวกเขาอาจตรวจสอบการดัดแปลงที่เกิดจากการประมวลผล chromedriver js :)


แก้ไข 1:

การปรับเปลี่ยนพารามิเตอร์ 'เนวิเกเตอร์' ของ Chrome

ฉันค้นพบว่ามีพารามิเตอร์บางอย่างใน 'เนวิเกเตอร์' ที่เปิดโปงการใช้ Chromedriver สั้น ๆ นี่คือพารามิเตอร์:

  • "navigator.webdriver"ในโหมดที่ไม่ใช่แบบอัตโนมัติมันคือ 'undefined' ในโหมดอัตโนมัติมันเป็น 'จริง'
  • "navigator.plugins"บนโครเมี่ยมที่ไม่มีหัวมีความยาว 0 ดังนั้นฉันจึงเพิ่มองค์ประกอบปลอมบางอย่างเพื่อหลอกกระบวนการตรวจสอบความยาวปลั๊กอิน
  • " navigator.languages"ถูกตั้งค่าเป็นค่าเริ่มต้นของโครม '["en-US", "en", "es"]'

ดังนั้นสิ่งที่ฉันต้องการคือส่วนขยายของ Chrome เพื่อเรียกใช้จาวาสคริปต์ในหน้าเว็บ ฉันสร้างส่วนขยายด้วยรหัส js ที่ให้ไว้ในบทความและใช้บทความอื่นเพื่อเพิ่มส่วนขยายซิปในโครงการของฉัน ฉันเปลี่ยนค่าสำเร็จแล้ว แต่ก็ยังไม่มีอะไรเปลี่ยนแปลง!

ฉันไม่พบตัวแปรอื่น ๆ เช่นนี้ แต่ไม่ได้หมายความว่าพวกมันไม่มีอยู่จริง ยังคง reCaptcha ตรวจพบ Chromedriver ดังนั้นควรมีตัวแปรที่จะเปลี่ยนแปลงมากขึ้น ขั้นตอนต่อไปควรจะวิศวกรรมย้อนกลับของการบริการตรวจจับที่ฉันไม่ต้องการที่จะทำ

ตอนนี้ฉันไม่แน่ใจว่ามันคุ้มค่าที่จะใช้เวลามากขึ้นในกระบวนการอัตโนมัตินี้หรือค้นหาวิธีการอื่น!


12

ลองใช้ซีลีเนียมกับโปรไฟล์ผู้ใช้เฉพาะของโครเมี่ยมในแบบที่คุณสามารถใช้เป็นผู้ใช้เฉพาะและกำหนดสิ่งใด ๆ ที่คุณต้องการเมื่อทำเช่นนั้นมันจะทำงานในฐานะผู้ใช้ที่ 'จริง' ดูกระบวนการ chrome ด้วยกระบวนการสำรวจ คุณจะเห็นความแตกต่างกับแท็ก

ตัวอย่างเช่น:

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; };

แอ็ตทริบิวต์ webdriver IDL ของอินเตอร์เฟส Navigator ต้องส่งคืนค่าของการตั้งค่าสถานะ webdriver-active ซึ่งเป็นเท็จในตอนแรก

คุณสมบัตินี้อนุญาตให้เว็บไซต์ระบุว่าตัวแทนผู้ใช้อยู่ภายใต้การควบคุมของ WebDriver และสามารถใช้เพื่อช่วยลดการโจมตีแบบปฏิเสธการให้บริการ

โดยตรงจากร่าง 2017 W3C บรรณาธิการของ WebDriver สิ่งนี้บ่งบอกว่าอย่างน้อยที่สุดการทำซ้ำในอนาคตของผู้ขับขี่ของซีลีเนียมจะสามารถระบุได้เพื่อป้องกันการใช้ในทางที่ผิด ในที่สุดก็เป็นการยากที่จะบอกได้ว่าไม่มีซอร์สโค้ดสาเหตุใดที่ทำให้ไดรเวอร์ Chrome ตรวจจับได้โดยเฉพาะ


4
"เป็นการยากที่จะบอกได้ว่าไม่มีซอร์สโค้ด" .. ดีมากซอร์สโค้ดใช้ได้ฟรี
Corey Goldberg

6
ฉันหมายถึงไม่มีเว็บไซต์ในรหัสที่มาของคำถาม เป็นการยากที่จะบอกว่าพวกเขากำลังตรวจสอบอะไร
bryce

8

Firefox ได้รับการกล่าวถึงว่าตั้งค่าwindow.navigator.webdriver === trueหากทำงานกับ webdriver นั่นเป็นไปตามหนึ่งในคุณสมบัติที่เก่ากว่า (เช่น: archive.org ) แต่ฉันไม่พบมันในอันใหม่ยกเว้นข้อความที่คลุมเครือมากในภาคผนวก

การทดสอบมันอยู่ในรหัสซีลีเนียมในไฟล์ fingerprint_test.jsที่แสดงความคิดเห็นในตอนท้ายว่า "ขณะนี้การดำเนินการเฉพาะใน Firefox" แต่ผมก็ไม่สามารถที่จะระบุรหัสใด ๆ ในทิศทางที่มีบางอย่างง่ายgrepไอเอ็นจีทั้งใน ปัจจุบัน (41.0.2) Firefox release-tree หรือใน Chromium-tree

ฉันยังพบความคิดเห็นให้เก่ากระทำเกี่ยวกับการพิมพ์ลายนิ้วมือในโปรแกรม Firefox b82512999938 จากมกราคม 2015 รหัสนั้นยังคงอยู่ในซีลีเนียม GIT-master ที่ถูกดาวน์โหลดเมื่อวานนี้javascript/firefox-driver/extension/content/server.jsพร้อมกับความคิดเห็นที่เชื่อมโยงไปยังภาคผนวก worded ที่แตกต่างกันเล็กน้อยในสเปคของ w3c webdriver ปัจจุบัน


2
ฉันเพิ่งทดสอบ webdriver ด้วย Firefox 55 และฉันสามารถยืนยันได้ว่ามันไม่เป็นความจริง window.navigator.webdriverไม่ได้กำหนดตัวแปร
speedplane

1
อัปเดต: ฉันทดสอบกับ Firefox 65 และนี่เป็นจริง:window.navigator.webdriver == true
speedplane

Firefox เวอร์ชัน 76 ยังคงแสดงว่าเป็นจริง
user2284144

8

นอกจากนี้คำตอบที่ยอดเยี่ยมของ@ Erti-Chris Eelmaa - มันน่ารำคาญwindow.navigator.webdriverและอ่านได้อย่างเดียว เหตุการณ์ถ้าคุณเปลี่ยนค่าของมันไปมันจะยังคงมีfalse trueนั่นเป็นสาเหตุที่ยังคงตรวจพบเบราว์เซอร์ที่ขับเคลื่อนด้วยซอฟต์แวร์อัตโนมัติ MDN

ตัวแปรถูกจัดการโดยแฟล็ก--enable-automationในโครเมี่ยม เปิดตัว chromedriver โครเมี่ยมที่มีธงที่และโครเมี่ยมชุดไปwindow.navigator.webdriver trueคุณสามารถค้นหาได้ที่นี่ คุณต้องเพิ่ม "การแยกสวิตช์" ในการตั้งค่าสถานะ เช่น (golang):

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 และ owasp เพื่อดูว่ามันทำงานอย่างไร ในความเป็นจริงสิ่งที่คุณถามคือทำอย่างไรเพื่อหลีกเลี่ยงการตรวจจับบอท นั่นไม่ใช่สิ่งที่ไดรเวอร์เว็บซีลีเนียมมีไว้สำหรับ มันมีไว้สำหรับทดสอบแอปพลิเคชันเว็บของคุณโดยไม่ตีแอปพลิเคชันเว็บอื่น ๆ เป็นไปได้ แต่โดยทั่วไปคุณต้องดูว่า WAF มองหาอะไรในกฎของพวกเขาและหลีกเลี่ยงมันด้วยซีลีเนียมโดยเฉพาะถ้าคุณทำได้ ถึงอย่างนั้นมันอาจยังใช้งานไม่ได้เพราะคุณไม่รู้ว่า WAF ใช้อะไรอยู่ คุณทำขั้นตอนแรกที่ถูกต้องนั่นคือแกล้งทำตัวแทนผู้ใช้ หากยังไม่ได้ผล WAF ก็มีอยู่และคุณอาจต้องใช้เล่ห์เหลี่ยมมากขึ้น

แก้ไข: จุดที่นำมาจากคำตอบอื่น ๆ ตรวจสอบให้แน่ใจว่าตัวแทนผู้ใช้ของคุณถูกตั้งค่าอย่างถูกต้องก่อน อาจมีการเข้าชมเว็บเซิร์ฟเวอร์ในท้องถิ่นหรือสูดอากาศที่ไหลออกมา


ฉันคิดว่าคุณอยู่ในเส้นทางที่ถูกต้อง ฉันทดสอบกับการตั้งค่าของฉันและแทนที่ตัวแทนผู้ใช้ด้วยสตริงตัวแทนผู้ใช้ที่ถูกต้องซึ่งประสบความสำเร็จและได้รับผลลัพธ์เดียวกัน stubhub บล็อกการร้องขอ
Brian Cain

1
หัวข้อนี้กว้างใหญ่มากฉันจะบอกว่าถ้าคุณไม่เข้าใจและคุณต้องการที่จะเข้าใจมันนี่ไม่ใช่สถานที่ที่เหมาะสม เริ่มด้วยนกฮูก ดูการทดสอบการเจาะระบบและความปลอดภัยของเว็บ นอกจากนี้อย่างที่ฉันบอกไว้ก่อนดูที่ modsecurity และ WAF สำหรับหัวข้อนี้โดยเฉพาะ
Bassel Samman

1
หากเป็นปัญหาส่วนหัว HTTP เบราว์เซอร์ปกติจะไม่ถูกบล็อกหรือไม่ ส่วนหัว HTTP เหมือนกันทุกประการ นอกจากนี้สิ่งที่ฉันกำลังมองหาด้วยลิงค์ GitHub ที่? คุณเคยลองใช้ซีลีเนียมเพื่อไปทำสตับฮับแล้วหรือยัง? มีบางอย่างผิดปกติมาก
Ryan Weinstein

1
ฉันขอโทษสำหรับความสับสน ฉันจะตรวจสอบและคุณไม่ต้องช่วยฉันอีกต่อไปหากคุณไม่ต้องการ ประสบการณ์ส่วนใหญ่ของฉันอยู่ในแอปพลิเคชันระบบการเขียนโปรแกรมดังนั้นฉันจึงไม่คุ้นเคยกับกฎความปลอดภัยที่คุณพูดถึง ฉันจะดูและพยายามให้ความรู้ด้วยตัวเอง ฉันไม่ได้พยายามเลี่ยงอะไรเลยฉันแค่สนใจที่จะทราบว่าเว็บไซต์เหล่านี้ตรวจจับผู้ใช้โดยใช้ซีลีเนียมอย่างไร
Ryan Weinstein

1
ฉันเป็นนักพัฒนาเช่นกัน :) การเรียนรู้เป็นสาเหตุที่ฉันได้รับ ฉันไม่สนใจที่จะช่วยเหลือฉันแค่ต้องการทำให้ชัดเจนว่าฉันไม่ทราบเจตนาของคุณและไม่สามารถช่วยคุณข้ามการรักษาความปลอดภัยเว็บไซต์ของพวกเขาได้ เพื่อตอบคำถามของคุณมันไม่ใช่ซีลีเนียมที่ตรวจจับได้ กฎตรวจพบพฤติกรรมที่น่าสงสัยและตัดสินใจที่จะใช้มาตรการที่เหมาะสมกับลูกค้าที่กระทำผิด พวกเขาจับคุณโดยสิ่งที่คุณไม่ได้ทำมากกว่าสิ่งที่คุณทำ ในลิงก์ repo คุณสามารถชำระเงินไฟล์นี้เพื่อรับแนวคิด base_rules / modsecurity_crs_20_protocol_violations.conf
Bassel Samman

6

แม้ว่าคุณจะส่งข้อมูลที่ถูกต้องทั้งหมด (เช่น Selenium ไม่แสดงเป็นส่วนขยายคุณมีความละเอียดที่เหมาะสม / ความลึกบิต & c) มีจำนวนของบริการและเครื่องมือที่พฤติกรรมของผู้เข้าชมโปรไฟล์เพื่อตรวจสอบว่า นักแสดงเป็นผู้ใช้หรือระบบอัตโนมัติ

ตัวอย่างเช่นการไปที่ไซต์จากนั้นจะดำเนินการบางอย่างทันทีโดยเลื่อนเมาส์ไปที่ปุ่มที่เกี่ยวข้องโดยตรงในเวลาไม่ถึงวินาทีเป็นสิ่งที่ผู้ใช้ไม่ต้องทำ

นอกจากนี้ยังอาจเป็นประโยชน์ในการเป็นเครื่องมือดีบั๊กในการใช้เว็บไซต์เช่นhttps://panopticlick.eff.org/เพื่อตรวจสอบว่าเบราว์เซอร์ของคุณมีเอกลักษณ์อย่างไร นอกจากนี้ยังจะช่วยคุณตรวจสอบว่ามีพารามิเตอร์เฉพาะที่ระบุว่าคุณกำลังทำงานในซีลีเนียม


3
ฉันเคยใช้เว็บไซต์นั้นแล้วและลายนิ้วมือนั้นเหมือนกับเบราว์เซอร์ปกติของฉัน นอกจากนี้ฉันไม่ได้ทำอะไรอัตโนมัติ ฉันแค่ท่องเว็บตามปกติ
Ryan Weinstein

6

การตรวจจับบอทที่ฉันเห็นดูเหมือนจะซับซ้อนกว่าหรือแตกต่างจากที่ฉันเคยอ่านในคำตอบด้านล่าง

ทดลอง 1:

  1. ฉันเปิดเบราว์เซอร์และเว็บเพจที่มีซีลีเนียมจากคอนโซล Python
  2. เมาส์อยู่ในตำแหน่งเฉพาะที่ฉันรู้ว่าลิงก์จะปรากฏขึ้นเมื่อเพจโหลด ฉันไม่เคยขยับเม้าส์
  3. ฉันกดปุ่มซ้ายของเมาส์หนึ่งครั้ง (นี่เป็นสิ่งจำเป็นที่จะต้องโฟกัสจากคอนโซลที่ Python กำลังวิ่งไปที่เบราว์เซอร์)
  4. ฉันกดปุ่มซ้ายของเมาส์อีกครั้ง (จำไว้ว่าเคอร์เซอร์อยู่เหนือลิงก์ที่กำหนด)
  5. ลิงก์จะเปิดตามปกติตามควร

ทดลอง 2:

  1. ก่อนหน้านี้ฉันเปิดเบราว์เซอร์และเว็บเพจที่มีซีลีเนียมจากคอนโซล Python

  2. คราวนี้แทนที่จะคลิกด้วยเมาส์ฉันใช้ซีลีเนียม (ในคอนโซล Python) เพื่อคลิกองค์ประกอบเดียวกันกับออฟเซ็ตแบบสุ่ม

  3. ลิงค์ไม่เปิด แต่ฉันถูกพาไปที่หน้าลงทะเบียน

ผลกระทบ:

  • การเปิดเว็บเบราว์เซอร์ผ่านซีลีเนียมไม่ได้ขัดขวางไม่ให้ฉันปรากฏตัวเป็นมนุษย์
  • การเคลื่อนเม้าส์อย่างมนุษย์ไม่จำเป็นต้องจำแนกเป็นมนุษย์
  • การคลิกบางสิ่งผ่านซีลีเนียมด้วยออฟเซ็ตจะทำให้เกิดการเตือนภัยขึ้น

ดูเหมือนลึกลับ แต่ฉันเดาว่าพวกเขาสามารถตัดสินได้ว่าการกระทำนั้นมาจากซีลีเนียมหรือไม่ในขณะที่พวกเขาไม่สนใจว่าเบราว์เซอร์นั้นเปิดผ่านซีลีเนียมหรือไม่ หรือพวกเขาสามารถตรวจสอบว่าหน้าต่างมีโฟกัสหรือไม่ จะน่าสนใจถ้าใครมีข้อมูลเชิงลึก


3
ความเชื่อของฉันคือซีลีเนียมอัดฉีดบางสิ่งบางอย่างในหน้าเว็บผ่านทางจาวาสคริปต์เพื่อค้นหาและเข้าถึงองค์ประกอบต่างๆ การฉีดครั้งนี้เป็นสิ่งที่ฉันเชื่อว่ากำลังตรวจจับอยู่
zeusalmighty

คุณถูกต้องการทดสอบนี้ถูกต้อง 100% ฉันทำแบบทดสอบที่คล้ายกันและมีผลลัพธ์เหมือนกัน ฉันสามารถส่งแท็บ Enter หรือส่งกุญแจได้ ช่วงเวลาที่ฉันเข้าถึงองค์ประกอบหน้าหยุดทำงาน ดังนั้นหากคนขับฉีดจาวาสคริปต์ลงในเบราว์เซอร์ เราสามารถเข้ารหัสจาวาสคริปต์นั้นโดยใช้ส่วนขยายของ Chrome และถอดรหัสในหน้าถัดไปโดยใช้ส่วนขยายเดียวกัน ฉันจะลองดูวันต่อไป
trixo

6

อีกสิ่งหนึ่งที่ฉันพบคือบางเว็บไซต์ใช้แพลตฟอร์มที่ตรวจสอบตัวแทนผู้ใช้ หากค่ามี: "HeadlessChrome" พฤติกรรมสามารถแปลกเมื่อใช้โหมดหัวขาด

วิธีแก้ปัญหาสำหรับสิ่งที่จะแทนที่ค่าตัวแทนผู้ใช้ตัวอย่างเช่นใน Java:

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) {}

สิ่งนี้ใช้ไม่ได้กับ Chrome และ Firefox, ซีลีเนียม 3.5.0, ChromeDriver 2.31.488774, geckodriver 0.18.0
jerrypy

4

เขียนหน้า html ด้วยรหัสต่อไปนี้ คุณจะเห็นว่าในซีลีเนียม DOM ใช้คุณสมบัติ webdriver ใน outerHTML

<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
มีการเพิ่มคุณสมบัติเฉพาะใน Firefox
หลุยส์

1
และเป็นไปได้ที่จะลบออกจากส่วนขยายซีลีเนียมที่ควบคุมเบราว์เซอร์ มันจะทำงานต่อไป
m3nda

3

ฉันพบการเปลี่ยนแปลงตัวแปร "key" ของจาวาสคริปต์เช่นนี้:

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

ใช้งานได้กับบางเว็บไซต์เมื่อใช้ Selenium Webdriver พร้อมกับ Google Chrome เนื่องจากมีหลายไซต์ที่ตรวจสอบตัวแปรนี้เพื่อหลีกเลี่ยงการถูกซีลีเนียมทิ้ง


2

สำหรับฉันแล้ววิธีที่ง่ายที่สุดในการใช้ซีลีเนียมคือการสกัดกั้น XHR ที่ส่งลายนิ้วมือของเบราว์เซอร์กลับมา

แต่เนื่องจากนี่เป็นปัญหาเฉพาะซีลีเนียมเท่านั้นจึงควรใช้อย่างอื่นดีกว่า ซีลีเนียมควรจะทำให้สิ่งต่าง ๆ เช่นนี้ง่ายขึ้นไม่ยากขึ้น


ซีลีเนียมมีทางเลือกอื่นอีกบ้าง?
Tai

ฉันเดาว่าคำขอจะเป็นตัวเลือกหลักของหลาม หากคุณส่งคำขอที่แน่นอนเหมือนกันกับที่เบราว์เซอร์ของคุณส่งคุณจะปรากฏเป็นเบราว์เซอร์ปกติ
pguardiario

2

คุณสามารถลองใช้พารามิเตอร์ "enable-automation"

var options = new ChromeOptions();

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

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

แต่ผมอยากจะเตือนว่าความสามารถในการนี้ได้รับการแก้ไขในChromeDriver 79.0.3945.16 ดังนั้นบางทีคุณควรใช้ Chrome รุ่นเก่ากว่า

นอกจากนี้ยังเป็นตัวเลือกอื่นคุณสามารถลองใช้ InternetExplorerDriver แทน Chrome สำหรับฉันแล้ว IE จะไม่บล็อกเลยหากไม่มีแฮ็กใด ๆ

และสำหรับข้อมูลเพิ่มเติมลองดูที่นี่:

Selenium webdriver: การแก้ไขธง navigator.webdriver เพื่อป้องกันการตรวจจับซีลีเนียม

ไม่สามารถซ่อนแถบข้อมูล "Chrome ถูกควบคุมโดยซอฟต์แวร์อัตโนมัติ" ภายใน Chrome v76

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.