Trang web có thể phát hiện khi bạn đang sử dụng selen với chromedriver không?

408
Ryan Weinstein 2015-10-20 14:08.

Tôi đã thử nghiệm Selenium với Chromedriver và tôi nhận thấy rằng một số trang có thể phát hiện ra rằng bạn đang sử dụng Selenium mặc dù không có tự động hóa nào cả. Ngay cả khi tôi chỉ duyệt thủ công bằng cách sử dụng chrome thông qua Selenium và Xephyr, tôi thường nhận được một trang thông báo rằng hoạt động đáng ngờ đã được phát hiện. Tôi đã kiểm tra tác nhân người dùng và vân tay trình duyệt của mình và tất cả chúng đều hoàn toàn giống với trình duyệt chrome bình thường.

Khi tôi duyệt đến các trang web này bằng chrome thông thường, mọi thứ đều hoạt động tốt, nhưng thời điểm tôi sử dụng Selenium, tôi bị phát hiện.

Về lý thuyết, chromedriver và chrome trông giống hệt nhau đối với bất kỳ máy chủ web nào, nhưng bằng cách nào đó chúng có thể phát hiện ra nó.

Nếu bạn muốn một số mã thử nghiệm, hãy thử cái này:

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')

Nếu bạn duyệt qua sơ khai, bạn sẽ được chuyển hướng và 'bị chặn' trong một hoặc hai yêu cầu. Tôi đang điều tra điều này và tôi không thể tìm ra cách họ có thể biết rằng một người dùng đang sử dụng Selenium.

Họ làm nó như thế nào?

CHỈNH SỬA CẬP NHẬT:

Tôi đã cài đặt plugin Selenium IDE trong Firefox và tôi đã bị cấm khi truy cập vào trang Stubhub.com trong trình duyệt firefox bình thường chỉ với plugin bổ sung.

BIÊN TẬP:

Khi tôi sử dụng Fiddler để xem các yêu cầu HTTP được gửi đi gửi lại, tôi nhận thấy rằng các yêu cầu 'trình duyệt giả mạo' thường có 'no-cache' trong tiêu đề phản hồi.

BIÊN TẬP:

kết quả như thế này Có cách nào để phát hiện tôi đang ở trang Selenium Webdriver từ JavaScript không gợi ý rằng không có cách nào để phát hiện khi bạn đang sử dụng webdriver. Nhưng bằng chứng này cho thấy khác.

BIÊN TẬP:

Trang web tải vân tay lên máy chủ của họ, nhưng tôi đã kiểm tra và vân tay của selen giống với vân tay khi sử dụng chrome.

BIÊN TẬP:

Đây là một trong những trọng tải vân tay mà họ gửi đến máy chủ của họ

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

Giống hệt nhau về selen và chrome

BIÊN TẬP:

VPN hoạt động cho một lần sử dụng nhưng bị phát hiện sau khi tôi tải trang đầu tiên. Rõ ràng là một số javascript đang được chạy để phát hiện Selenium.

19 answers

78
colossatr0n 2018-08-31 17:49.

Đối với người dùng Mac

Thay thế cdc_biến bằng Vim hoặc Perl

Bạn có thể sử dụng vim, hoặc như @Vic Seedoubleyew đã chỉ ra trong câu trả lời của @ Erti-Chris Eelmaa perl, để thay thế cdc_biến trong chromedriver( Xem bài đăng của @ Erti-Chris Eelmaa để tìm hiểu thêm về biến đó ). Sử dụng vimhoặc perlngăn bạn phải biên dịch lại mã nguồn hoặc sử dụng trình soạn thảo hex. Đảm bảo tạo một bản sao của bản gốc chromedrivertrước khi cố gắng chỉnh sửa nó. Ngoài ra, các phương pháp bên dưới đã được thử nghiệm chromedriver version 2.41.578706.


Sử dụng Vim

vim /path/to/chromedriver

Sau khi chạy dòng trên, có thể bạn sẽ thấy một loạt các chữ vô nghĩa. Làm như sau:

  1. Tìm kiếm cdc_bằng cách gõ /cdc_và nhấn return.
  2. Bật chỉnh sửa bằng cách nhấn a.
  3. Xóa bất kỳ số tiền nào $cdc_lasutopfhvcZLmcflvà thay thế những gì đã bị xóa bằng một số ký tự bằng nhau. Nếu bạn không, chromedriversẽ thất bại.
  4. Sau khi bạn chỉnh sửa xong, hãy nhấn esc.
  5. Để lưu các thay đổi và thoát, hãy nhập :wq!và nhấn return.
  6. Nếu bạn không muốn lưu các thay đổi nhưng lại muốn thoát, hãy nhập :q!và nhấn return.
  7. Bạn đã hoàn tất.

Đi tới phần đã thay đổi chromedrivervà nhấp đúp vào nó. Một terminalcửa sổ sẽ mở ra. Nếu bạn không thấy killedtrong đầu ra, bạn đã thay đổi trình điều khiển thành công.


Sử dụng Perl

Dòng dưới đây thay thế cdc_bằng dog_:

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

Đảm bảo rằng chuỗi thay thế có cùng số ký tự với chuỗi tìm kiếm, nếu không chuỗi chromedriversẽ bị lỗi.

Giải thích Perl

s///g biểu thị rằng bạn muốn tìm kiếm một chuỗi và thay thế nó trên toàn cục bằng một chuỗi khác (thay thế tất cả các lần xuất hiện).

ví dụ, s/string/replacment/g

Vì thế,

s/// biểu thị việc tìm kiếm và thay thế một chuỗi.

cdc_ là chuỗi tìm kiếm.

dog_ là chuỗi thay thế.

g là khóa chung, thay thế mọi lần xuất hiện của chuỗi.

Cách kiểm tra xem thay thế Perl có hoạt động không

Dòng sau sẽ in mọi lần xuất hiện của chuỗi tìm kiếm cdc_:

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

Nếu điều này không trả lại gì, sau đó cdc_đã được thay thế.

Ngược lại, bạn có thể sử dụng cái này:

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

để xem liệu chuỗi thay thế của bạn dog_có ở trong chromedriverhệ nhị phân hay không. Nếu đúng như vậy, chuỗi thay thế sẽ được in ra bảng điều khiển.

Đi tới phần đã thay đổi chromedrivervà nhấp đúp vào nó. Một terminalcửa sổ sẽ mở ra. Nếu bạn không thấy killedtrong đầu ra, bạn đã thay đổi trình điều khiển thành công.


Kết thúc

Sau khi thay đổi chromedrivertệp nhị phân, hãy đảm bảo rằng tên của chromedrivertệp nhị phân đã thay đổi là chromedrivervà rằng tệp nhị phân ban đầu được di chuyển từ vị trí ban đầu hoặc được đổi tên.


Kinh nghiệm của tôi với phương pháp này

Trước đây tôi đã bị phát hiện trên một trang web khi cố gắng đăng nhập, nhưng sau khi thay thế cdc_bằng một chuỗi có kích thước bằng nhau, tôi đã có thể đăng nhập. Giống như những người khác đã nói, nếu bạn đã bị phát hiện, bạn có thể bị chặn vì rất nhiều lý do khác ngay cả sau khi sử dụng phương pháp này. Vì vậy, bạn có thể phải thử truy cập trang web phát hiện ra bạn bằng VPN, mạng khác hoặc những gì có bạn.

162
Erti-Chris Eelmaa 2016-12-20 00:14.

Về cơ bản cách phát hiện selen hoạt động là chúng kiểm tra các biến javascript được xác định trước xuất hiện khi chạy với selen. Các tập lệnh phát hiện bot thường trông bất kỳ thứ gì có chứa từ "selenium" / "webdriver" trong bất kỳ biến nào (trên đối tượng window), và cả các biến tài liệu được gọi là $cdc_$wdc_. Tất nhiên, tất cả điều này phụ thuộc vào trình duyệt bạn đang sử dụng. Tất cả các trình duyệt khác nhau hiển thị những thứ khác nhau.

Đối với tôi, tôi đã sử dụng chrome, vì vậy, tất cả những gì tôi phải làm là đảm bảo rằng $cdc_nó không tồn tại dưới dạng biến tài liệu nữa và thì đấy (tải xuống mã nguồn chromedriver, sửa đổi chromedriver và biên dịch lại $cdc_dưới tên khác.)

đây là chức năng tôi đã sửa đổi trong 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];
}

(lưu ý nhận xét, tất cả những gì tôi đã làm tôi chuyển $cdc_sang randomblabla_.

Đây là một đoạn mã giả thể hiện một số kỹ thuật mà mạng bot có thể sử dụng:

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

Theo người dùng @szx, cũng có thể chỉ cần mở chromedriver.exe trong trình soạn thảo hex và chỉ cần thực hiện thay thế theo cách thủ công mà không thực sự thực hiện bất kỳ biên dịch nào.

107
alecxe 2015-10-29 13:39.

Như chúng ta đã tìm ra trong câu hỏi và các câu trả lời đã đăng, có một dịch vụ chống quét Web và phát hiện Bot có tên "Distil Networks" đang hoạt động ở đây. Và, theo cuộc phỏng vấn của CEO công ty :

Mặc dù họ có thể tạo bot mới, nhưng chúng tôi đã tìm ra cách để xác định Selenium là công cụ họ đang sử dụng, vì vậy chúng tôi sẽ chặn Selenium bất kể họ lặp lại bao nhiêu lần trên bot đó . Bây giờ chúng tôi đang làm điều đó với Python và rất nhiều công nghệ khác nhau. Khi chúng tôi thấy một mẫu xuất hiện từ một loại bot, thì chúng tôi sẽ làm việc để thiết kế ngược lại công nghệ mà chúng sử dụng và xác định nó là độc hại.

Sẽ cần thời gian và những thách thức bổ sung để hiểu chính xác cách họ phát hiện ra Selenium, nhưng chúng ta có thể nói chắc chắn điều gì vào lúc này:

  • nó không liên quan đến các hành động bạn thực hiện với selen - khi bạn điều hướng đến trang web, bạn ngay lập tức bị phát hiện và cấm. Tôi đã cố gắng thêm độ trễ ngẫu nhiên giả tạo giữa các hành động, tạm dừng sau khi trang được tải - không có gì hữu ích
  • nó cũng không phải về dấu vân tay của trình duyệt - đã thử nó trên nhiều trình duyệt với cấu hình rõ ràng và không, chế độ ẩn danh - không có gì giúp được
  • vì, theo gợi ý trong cuộc phỏng vấn, đây là "kỹ thuật đảo ngược", tôi nghi ngờ điều này được thực hiện với một số mã JS được thực thi trong trình duyệt tiết lộ rằng đây là một trình duyệt được tự động hóa thông qua trình duyệt web selenium

Quyết định đăng nó như một câu trả lời, vì rõ ràng:

Trang web có thể phát hiện khi bạn đang sử dụng selen với chromedriver không?

Đúng.


Ngoài ra, những gì tôi chưa thử nghiệm là selen cũ hơn và các phiên bản trình duyệt cũ hơn - về lý thuyết, có thể có thứ gì đó được triển khai / thêm vào selen ở một điểm nhất định mà trình phát hiện bot của Distil Networks hiện đang dựa vào. Sau đó, nếu đúng như vậy, chúng tôi có thể phát hiện (vâng, chúng ta hãy phát hiện máy dò) tại thời điểm / phiên bản mà một thay đổi có liên quan đã được thực hiện, xem xét bảng thay đổi và các tập hợp thay đổi và có thể, điều này có thể cung cấp cho chúng tôi thêm thông tin về nơi cần và nó sử dụng để phát hiện trình duyệt hỗ trợ webdriver là gì. Đó chỉ là một lý thuyết cần được thử nghiệm.

26
aianitro 2016-09-12 13:21.

Ví dụ về cách nó được triển khai trên wellfargo.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 !+""
18
ShayanKM 2018-12-06 02:56.

Làm xáo trộn kết quả JavaScripts

Tôi đã kiểm tra mã nguồn chromedriver. Điều đó sẽ đưa một số tệp javascript vào trình duyệt.
Mọi tệp javascript trên liên kết này được đưa vào các trang web: https://chromium.googlesource.com/chromium/src/+/master/chrome/test/chromedriver/js/

Vì vậy, tôi đã sử dụng kỹ thuật đảo ngược và làm xáo trộn các tệp js bằng cách chỉnh sửa Hex. Bây giờ tôi chắc chắn rằng không còn biến javascript, tên hàm và chuỗi cố định nào được sử dụng để khám phá hoạt động của selen. Nhưng vẫn có một số trang web và reCaptcha phát hiện ra selen!
Có thể họ kiểm tra các sửa đổi được gây ra bởi việc thực thi chromedriver js :)


Chỉnh sửa 1:

Sửa đổi thông số 'điều hướng' của Chrome

Tôi phát hiện ra có một số tham số trong 'điều hướng' khám phá ngắn gọn bằng cách sử dụng chromedriver. Đây là các thông số:

  • "Navigator.webdriver" Ở chế độ không tự động, nó là 'không xác định'. Ở chế độ tự động, nó là 'true'.
  • "Navigator.plugins" Trên chrome không đầu có chiều dài 0. Vì vậy, tôi đã thêm một số yếu tố giả mạo để đánh lừa quá trình kiểm tra độ dài plugin.
  • " Navigator.languages" được đặt thành giá trị chrome mặc định '["en-US", "en", "es"]'.

Vì vậy, những gì tôi cần là một phần mở rộng chrome để chạy javascript trên các trang web. Tôi đã tạo một phần mở rộng với Sửa đổi đối tượng Bộ điều hướng Javascript bằng Selenium được cung cấp trong bài viết và sử dụng Sử dụng Tiện ích mở rộng với Selenium (Python) để thêm phần mở rộng đã nén vào dự án của mình. Tôi đã thay đổi thành công các giá trị; Nhưng vẫn không có gì thay đổi!

Tôi không tìm thấy các biến khác như thế này nhưng không có nghĩa là chúng không tồn tại. Vẫn reCaptcha phát hiện chromedriver, Vì vậy, cần có nhiều biến hơn để thay đổi. Bước tiếp theo phải là thiết kế ngược các dịch vụ dò tìm mà tôi không muốn làm.

Bây giờ tôi không chắc liệu có đáng để dành nhiều thời gian hơn cho quá trình tự động hóa này hoặc tìm kiếm các phương pháp thay thế hay không!

15
DebanjanB 2020-06-23 07:29.

Rất nhiều người đã được phân tích và thảo luận về việc một trang web bị phát hiện được điều khiển bởi Tại sao ChromeDriver không yêu cầu Chrome hoặc Chromium? do Selenium là gì và WebDriver là gì? kiểm soát . Đây là hai xu của tôi:Tại sao ChromeDriver không yêu cầu Chrome hoặc Chromium?

Theo bài báo Phát hiện trình duyệt sử dụng tác nhân người dùng phục vụ các trang web hoặc dịch vụ khác nhau cho các trình duyệt khác nhau thường không nằm trong số các ý tưởng tốt nhất. Tất cả mọi người đều có thể truy cập web, bất kể người dùng đang sử dụng trình duyệt hoặc thiết bị nào. Có các phương pháp hay nhất được nêu ra để phát triển một trang web để tự nâng cao dần dần dựa trên tính năng sẵn có thay vì nhắm mục tiêu các trình duyệt cụ thể.

Tuy nhiên, các trình duyệt và tiêu chuẩn không hoàn hảo, và vẫn có một số trường hợp phức tạp trong đó một số trang web vẫn phát hiện trình duyệt và nếu trình duyệt được điều khiển bởi Selenium WebDriver được điều khiển . Trình duyệt có thể được phát hiện thông qua các cách khác nhau và một số cơ chế thường được sử dụng như sau:

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Làm thế nào để recaptcha 3 biết tôi đang sử dụng selen / chromedriver?

  • Phát hiện thuật ngữ HeadlessChrome trong Chrome UserAgent không đầu

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Truy cập trang Bị từ chối bằng Chrome không đầu trên Linux trong khi Chrome có đầu hoạt động trên các cửa sổ sử dụng Selenium thông qua Python

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Không thể sử dụng Selenium để tự động đăng nhập trang Chase

  • Sử dụng dịch vụ Trình quản lý Bot từ Akamai

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Trình đơn thả xuống động không chứa các đề xuất tự động trên https://www.nseindia.com/ khi các giá trị được chuyển bằng Selenium và Python

  • Sử dụng dịch vụ Bảo vệ Bot từ Datadome

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Trang web sử dụng DataDome bị chặn hình ảnh xác thực khi sử dụng Selenium và Python

Tuy nhiên, việc sử dụng user-agent để phát hiện trình duyệt trông đơn giản nhưng làm tốt nó trên thực tế khó hơn một chút.

Lưu ý : Tại thời điểm này, điều đáng nói là: rất hiếm khi sử dụng tính năng đánh hơi tác nhân người dùng là một ý tưởng hay. Luôn có cách tốt hơn và tương thích rộng hơn để giải quyết một vấn đề nhất định.


Cân nhắc để phát hiện trình duyệt

Ý tưởng đằng sau việc phát hiện trình duyệt có thể là một trong những điều sau:

  • Cố gắng khắc phục một lỗi cụ thể trong một số biến thể cụ thể hoặc phiên bản cụ thể của trình duyệt web.
  • Đang cố gắng kiểm tra sự tồn tại của một tính năng cụ thể mà một số trình duyệt chưa hỗ trợ.
  • Cố gắng cung cấp các HTML khác nhau tùy thuộc vào trình duyệt đang được sử dụng.

Thay thế phát hiện trình duyệt thông qua UserAgents

Một số lựa chọn thay thế phát hiện trình duyệt như sau:

  • Thực hiện kiểm tra để phát hiện cách trình duyệt triển khai API của một tính năng và xác định cách sử dụng nó từ đó. Một ví dụ là hỗ trợ giao diện thử nghiệm không gắn thẻ của Chrome trong biểu thức chính quy .
  • Điều chỉnh kỹ thuật thiết kế của Nâng cao lũy tiến sẽ liên quan đến việc phát triển trang web theo các lớp , sử dụng phương pháp từ dưới lên, bắt đầu với một lớp đơn giản hơn và cải thiện khả năng của trang web trong các lớp kế tiếp, mỗi lớp sử dụng nhiều tính năng hơn.
  • Điều chỉnh phương pháp tiếp cận từ trên xuống của sự xuống cấp Graceful, trong đó chúng tôi xây dựng trang web tốt nhất có thể bằng cách sử dụng tất cả các tính năng chúng tôi muốn và sau đó điều chỉnh nó để làm cho nó hoạt động trên các trình duyệt cũ hơn.

Giải pháp

Để ngăn chặn việc phát hiện WebDriver được điều khiển bởi Selenium , một cách tiếp cận thích hợp sẽ bao gồm một trong hai / tất cả các cách tiếp cận được đề cập dưới đây:

  • Xoay vòng UserAgent trong mỗi lần thực thi Bộ thử nghiệm của bạn bằng fake_useragentmô-đun như sau:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from fake_useragent import UserAgent
    
    options = Options()
    ua = UserAgent()
    userAgent = ua.random
    print(userAgent)
    options.add_argument(f'user-agent={userAgent}')
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\ChromeDriver\chromedriver_win32\chromedriver.exe')
    driver.get("https://www.google.co.in")
    driver.quit()
    

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Cách thay đổi tác nhân người dùng Google Chrome trong Selenium?

  • Xoay UserAgent trong mỗi bạn thử nghiệm sử dụng Network.setUserAgentOverridethông qua execute_cdp_cmd()như sau:

    from selenium import webdriver
    
    driver = webdriver.Chrome(executable_path=r'C:\WebDrivers\chromedriver.exe')
    print(driver.execute_script("return navigator.userAgent;"))
    # Setting user agent as Chrome/83.0.4103.97
    driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'})
    print(driver.execute_script("return navigator.userAgent;"))
    

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Cách thay đổi Tác nhân người dùng bằng Selenium và Python

  • Thay đổi tài sản giá trị của navigatorcho webdriver tới undefinednhư sau:

    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
      "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
      """
    })
    

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Selenium webdriver: Sửa đổi cờ Navigator.webdriver để ngăn phát hiện selen

  • Thay đổi giá trị của navigator.plugins, navigator.languages, WebGL , tính năng chân tóc , thiếu hình ảnh vv

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Có phiên bản nào của trình duyệt web selen không thể phát hiện được không?

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Làm cách nào để vượt qua hình ảnh xác thực của Google bằng Selenium và Python?


Đối phó với reCAPTCHA

Trong khi xử lý 2captcharecaptcha -v3 thay vì nhấp vào hộp kiểm được liên kết với văn bản Tôi không phải là rô bốt , có thể dễ dàng hơn để giải nén xác thực và sử dụng data-sitekey.

Bạn có thể tìm thấy một cuộc thảo luận chi tiết có liên quan trong Làm cách nào để xác định khóa trang dữ liệu 32 bit của ReCaptcha V2 để nhận được phản hồi hợp lệ theo lập trình bằng cách sử dụng Yêu cầu Selenium và Python?

14
Kobi K 2015-10-29 06:39.

Cố gắng sử dụng selen với một hồ sơ người dùng cụ thể của chrome, Bằng cách đó, bạn có thể sử dụng nó như một người dùng cụ thể và xác định bất kỳ thứ gì bạn muốn. Khi làm như vậy, nó sẽ chạy như một người dùng 'thực', hãy xem quy trình chrome với một số trình khám phá quy trình và bạn sẽ thấy sự khác biệt với các thẻ.

Ví dụ:

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)

danh sách thẻ chrome tại đây

13
bryce 2017-01-28 13:05.

partial interface Navigator { readonly attribute boolean webdriver; };

Thuộc tính IDL máy chủ web của giao diện Bộ điều hướng phải trả về giá trị của cờ hoạt động của máy chủ web, giá trị này ban đầu là sai.

Thuộc tính này cho phép các trang web xác định rằng tác nhân người dùng đang được WebDriver kiểm soát và có thể được sử dụng để giúp giảm thiểu các cuộc tấn công từ chối dịch vụ.

Lấy trực tiếp từ Bản thảo WebDriver của Biên tập viên W3C năm 2017 . Điều này ngụ ý rằng ít nhất, các trình điều khiển của selen sẽ được lặp lại trong tương lai sẽ có thể nhận dạng được để ngăn chặn việc sử dụng sai mục đích. Cuối cùng, thật khó để biết nếu không có mã nguồn, điều gì chính xác khiến trình điều khiển chrome cụ thể có thể phát hiện được.

8
deamentiaemundi 2015-10-28 13:44.

Firefox được cho là thiết lập window.navigator.webdriver === truenếu làm việc với trình duyệt web. Đó là theo một trong những thông số kỹ thuật cũ hơn (ví dụ: archive.org ) nhưng tôi không thể tìm thấy nó trong thông số mới ngoại trừ một số từ ngữ rất mơ hồ trong phụ lục.

Một bài kiểm tra cho nó là trong mã selen trong tệp vân tay_test.js , nơi nhận xét ở cuối cho biết "Hiện chỉ được triển khai trong firefox" nhưng tôi không thể xác định bất kỳ mã nào theo hướng đó bằng một số nhập đơn giản grep, cả trong hiện tại (41.0.2) Cây phát hành Firefox cũng như trong cây Chromium.

Tôi cũng đã tìm thấy nhận xét cho một cam kết cũ hơn liên quan đến việc lấy dấu vân tay trong trình điều khiển firefox b82512999938 từ tháng 1 năm 2015 . Mã đó vẫn nằm trong Selenium GIT-master được tải xuống ngày hôm qua tại javascript/firefox-driver/extension/content/server.jsvới một nhận xét liên kết đến phụ lục có từ ngữ hơi khác trong thông số kỹ thuật của trình duyệt web w3c hiện tại.

8
FDG 2019-01-29 04:47.

Ngoài ra, câu trả lời tuyệt vời của @ Erti-Chris Eelmaa - thật khó chịu window.navigator.webdrivervà nó ở chế độ chỉ đọc. Sự kiện nếu bạn thay đổi giá trị của nó thành falsenó sẽ vẫn có true. Đó là lý do tại sao trình duyệt được điều khiển bởi phần mềm tự động vẫn có thể được phát hiện. MDN

Biến được quản lý bởi cờ --enable-automationtrong chrome. Chromeedriver khởi chạy chrome với lá cờ đó và chrome đặt window.navigator.webdriverthành true. Bạn có thể tìm thấy nó ở đây . Bạn cần thêm cờ "loại trừ công tắc". Ví dụ (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))
}
8
Adi Ohana 2019-04-04 05:12.

Một điều nữa tôi nhận thấy là một số trang web sử dụng nền tảng kiểm tra Tác nhân người dùng. Nếu giá trị chứa: "HeadlessChrome", hành vi có thể lạ khi sử dụng chế độ không đầu.

Giải pháp cho điều đó sẽ là ghi đè giá trị tác nhân người dùng, ví dụ: trong 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");
6
Bassel Samman 2015-10-24 13:28.

Có vẻ như họ đang đứng sau một bức tường lửa ứng dụng web. Hãy xem modsecurity và owasp để xem cách hoạt động của chúng. Trong thực tế, những gì bạn đang hỏi là làm thế nào để tránh phát hiện bot. Đó không phải là những gì trình điều khiển web selen dành cho. Nó là để kiểm tra ứng dụng web của bạn không đánh các ứng dụng web khác. Điều đó có thể xảy ra, nhưng về cơ bản, bạn phải xem WAF tìm kiếm những gì trong bộ quy tắc của chúng và đặc biệt tránh nó với selen nếu bạn có thể. Thậm chí sau đó, nó vẫn có thể không hoạt động vì bạn không biết họ đang sử dụng WAF gì. Bạn đã làm đúng bước đầu tiên, đó là giả mạo tác nhân người dùng. Nếu điều đó không thành công, thì WAF đã có sẵn và bạn có thể cần phải khéo léo hơn.

Chỉnh sửa: Điểm được lấy từ câu trả lời khác. Trước tiên, hãy đảm bảo rằng tác nhân người dùng của bạn thực sự được đặt chính xác. Có thể nó đã tấn công một máy chủ web cục bộ hoặc đánh hơi thấy lưu lượng truy cập đi ra ngoài.

6
M3RS 2018-04-12 08:41.

Phát hiện bot mà tôi đã thấy có vẻ phức tạp hơn hoặc ít nhất là khác so với những gì tôi đã đọc qua trong các câu trả lời bên dưới.

THÍ NGHIỆM 1:

  1. Tôi mở trình duyệt và trang web bằng Selenium từ bảng điều khiển Python.
  2. Con chuột đã ở một vị trí cụ thể mà tôi biết một liên kết sẽ xuất hiện khi trang tải. Tôi không bao giờ di chuyển chuột.
  3. Tôi nhấn nút chuột trái một lần (điều này là cần thiết để lấy tiêu điểm từ bảng điều khiển nơi Python đang chạy đến trình duyệt).
  4. Tôi nhấn lại nút chuột trái (hãy nhớ, con trỏ ở trên một liên kết nhất định).
  5. Liên kết mở ra bình thường, như nó phải.

THÍ NGHIỆM 2:

  1. Như trước đây, tôi mở trình duyệt và trang web bằng Selenium từ bảng điều khiển Python.

  2. Lần này, thay vì nhấp bằng chuột, tôi sử dụng Selenium (trong bảng điều khiển Python) để nhấp vào cùng một phần tử với độ lệch ngẫu nhiên.

  3. Liên kết không mở, nhưng tôi được đưa đến trang đăng ký.

HÀM Ý:

  • mở trình duyệt web qua Selenium không ngăn cản tôi xuất hiện giống người
  • di chuyển chuột như con người không cần thiết để được xếp vào loại người
  • nhấp vào một cái gì đó thông qua Selenium với một độ lệch vẫn tăng cảnh báo

Có vẻ bí ẩn, nhưng tôi đoán họ chỉ có thể xác định liệu một hành động có bắt nguồn từ Selenium hay không, trong khi họ không quan tâm liệu trình duyệt có được mở thông qua Selenium hay không. Hoặc họ có thể xác định xem cửa sổ có tiêu điểm hay không? Sẽ rất thú vị khi nghe nếu ai đó có bất kỳ thông tin chi tiết nào.

5
lfaraone 2015-10-26 12:01.

Ngay cả khi bạn đang gửi tất cả dữ liệu phù hợp (ví dụ: Selenium không hiển thị dưới dạng tiện ích mở rộng, bạn có độ phân giải / độ sâu bit hợp lý, & c), vẫn có một số dịch vụ và công cụ xác định hành vi của khách truy cập để xác định xem tác nhân là người dùng hoặc hệ thống tự động.

Ví dụ: truy cập một trang web sau đó ngay lập tức thực hiện một số hành động bằng cách di chuyển chuột trực tiếp đến nút liên quan, trong vòng chưa đầy một giây, là điều mà không người dùng nào thực sự làm.

Nó cũng có thể hữu ích như một công cụ gỡ lỗi để sử dụng một trang web như https://panopticlick.eff.org/ để kiểm tra trình duyệt của bạn độc đáo như thế nào; nó cũng sẽ giúp bạn xác minh xem có bất kỳ thông số cụ thể nào cho biết bạn đang chạy trong Selenium hay không.

4
PC3TJ 2015-10-28 18:10.

Viết một trang html với đoạn mã sau. Bạn sẽ thấy rằng trong DOM selenium áp dụng thuộc tính webdriver trong externalHTML

<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
Néstor 2017-08-22 23:52.

Một số trang web đang phát hiện điều này:

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
pguardiario 2018-12-02 15:32.

Đối với tôi, dường như cách đơn giản nhất để thực hiện với Selenium là chặn XHR gửi lại dấu vân tay của trình duyệt.

Nhưng vì đây là vấn đề chỉ liên quan đến Selenium, tốt hơn hết bạn chỉ nên sử dụng thứ khác. Selenium được cho là làm cho những thứ như thế này trở nên dễ dàng hơn, chứ không phải khó hơn.

3
Juliagu 2019-05-04 04:36.

Tôi đã tìm thấy việc thay đổi biến "khóa" javascript như thế này:

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

hoạt động cho một số trang web khi sử dụng Selenium Webdriver cùng với Google Chrome, vì nhiều trang web kiểm tra biến này để tránh bị Selenium loại bỏ.

1
Sergiy Matvienko 2020-01-11 01:57.

Bạn có thể thử sử dụng tham số "enable-Automation"

var options = new ChromeOptions();

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

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

Tuy nhiên, tôi muốn cảnh báo rằng khả năng này đã được khắc phục trong ChromeDriver 79.0.3945.16 . Vì vậy, có lẽ bạn nên sử dụng các phiên bản chrome cũ hơn.

Ngoài ra, là một tùy chọn khác, bạn có thể thử sử dụng InternetExplorerDriver thay vì Chrome. Đối với tôi, IE hoàn toàn không chặn mà không có bất kỳ bản hack nào.

Và để biết thêm thông tin, hãy thử xem ở đây:

Selenium webdriver: Sửa đổi cờ Navigator.webdriver để ngăn phát hiện selen

Không thể ẩn thanh thông tin “Chrome đang được phần mềm tự động điều khiển” trong Chrome v76

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Tận dụng lợi thế của việc bán hàng nhân Ngày của Cha này

Tận dụng lợi thế của việc bán hàng nhân Ngày của Cha này

Màn hình Samsung Galaxy S9 Plus. Chủ nhật này là Ngày của Cha⁠ — trong trường hợp nó khiến bạn suy nghĩ — và thay vì mua cho anh ấy một chiếc cà vạt trong năm nay, có lẽ đã đến lúc bạn mua cho anh ấy thứ mà anh ấy sẽ thực sự sử dụng.

Assassin's Creed Snuck Into Monster Hunter: World Last Night

Assassin's Creed Snuck Into Monster Hunter: World Last Night

Monster Hunter: World yêu thích các sự kiện chéo. Dù có nghĩa là hóa trang thành Dante của Devil May Cry, giả dạng Horizon: Zero Dawn's Aloy, hay chiến đấu với quái vật Final Fantasy, các nhiệm vụ sự kiện khác nhau của Thế giới được nâng cấp tự do so với các trò chơi khác.

Ava DuVernay Có Quà Tặng Ngày Của Mẹ cho Tất Cả Chúng Ta: Nếp Nhăn Thời Gian Sẽ Được Viết Lại Vào Cuối Tuần Ngày Của Mẹ!

Ava DuVernay Có Quà Tặng Ngày Của Mẹ cho Tất Cả Chúng Ta: Nếp Nhăn Thời Gian Sẽ Được Viết Lại Vào Cuối Tuần Ngày Của Mẹ!

Storm Reid, Oprah Winfrey, Mindy Kaling, Reese Witherspoon và Ava DuVernay tại buổi chiếu đặc biệt của A Wrinkle in Time tại Nhà hát Walter Reade ở Thành phố New York vào ngày 7 tháng 3 năm 2018 “Ava rất mong được nói chuyện với bạn,” một trong những người của Array dư luận viên nói qua điện thoại. (Array là tập thể phân phối, nghệ thuật và vận động chính sách của Ava DuVernay tập trung vào các bộ phim của người da màu và phụ nữ.

Nhiệm vụ bất khả thi 5 sẽ khôi phục niềm tin của bạn trong phim hành động Tentpole

Nhiệm vụ bất khả thi 5 sẽ khôi phục niềm tin của bạn trong phim hành động Tentpole

Mission Impossible: Rogue Nation bắt đầu ở một cấp độ khác. Theo nghĩa đen.

Edwin McCain ra mắt Grand Ole Opry: Quay cảnh hậu trường với nhạc sĩ 'I'll Be'

Edwin McCain ra mắt Grand Ole Opry: Quay cảnh hậu trường với nhạc sĩ 'I'll Be'

McCain, người đang làm việc cho một album mới, lần đầu tiên bước vào vòng kết nối vào tối thứ Sáu ở Nashville

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Tôi viết như thế nào

Tôi viết như thế nào

Đối với tôi, mọi thứ là về dòng đầu tiên đó và nó sẽ đưa bạn đến đâu. Một số nhà văn bị điều khiển bởi cốt truyện, sự sắp xếp tinh tế của các quân cờ, trong khi những người khác bị lôi cuốn bởi một nhân vật và khả năng thực hiện một cuộc hành trình với một người bạn hư cấu mới.

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Language