Bir web sitesi, selenyum kullandığınızda kromajör ile bunu algılayabilir mi?


365

Selenium'u Chromedriver ile test ediyorum ve bazı sayfaların hiç otomasyon olmasa bile Selenyum kullandığınızı algılayabildiğini fark ettim. Manuel olarak sadece Selenium ve Xephyr ile krom kullanarak göz atarken bile, şüpheli etkinliğin tespit edildiğini söyleyen bir sayfa alıyorum. Kullanıcı aracımı ve tarayıcı parmak izimi kontrol ettim ve hepsi normal krom tarayıcı ile tamamen aynı.

Bu sitelere normal kromda göz attığımda her şey iyi çalışıyor, ancak Selenyum'u kullandığım anda tespit edildim.

Teorik olarak, krom sürücü ve krom herhangi bir web sunucusu için tam olarak aynı görünmelidir, ancak bir şekilde bunu tespit edebilirler.

Bazı test kodları istiyorsanız bunu deneyin:

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'a göz atarsanız, bir veya iki istek içinde yönlendirilir ve 'engellenir'. Bunu araştırıyordum ve bir kullanıcının Selenyum kullandığını nasıl anlatabileceklerini anlayamıyorum.

Nasıl yapıyorlar?

GÜNCELLEME DÜZENLEME:

Selenium IDE eklentisini Firefox'a yükledim ve normal eklenti tarayıcısında sadece ek eklenti ile stubhub.com'a gittiğimde yasaklandım.

DÜZENLE:

İleri geri gönderilen HTTP isteklerini görüntülemek için Fiddler'ı kullandığımda, 'sahte tarayıcı \' s 'isteklerinin yanıt başlığında genellikle' önbellek yok 'olduğunu fark ettim.

DÜZENLE:

Bunun gibi sonuçlar Javascript bir Selenyum Webdriver sayfasında olduğumu tespit etmenin bir yolu var mı, bir webdriver kullanırken tespit etmek için hiçbir yolu olmamalıdır öneririz. Ancak bu kanıt aksini gösteriyor.

DÜZENLE:

Site sunucularına bir parmak izi yükledi, ancak kontrol ettim ve krom kullanırken selenyumun parmak izi parmak iziyle aynı.

DÜZENLE:

Bu, sunucularına gönderdikleri parmak izi yüklerinden biridir

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

Selenyum ve krom ile aynı

DÜZENLE:

VPN'ler tek bir kullanım için çalışır, ancak ilk sayfayı yükledikten sonra algılanır. Açıkça Selenyum'u tespit etmek için bazı javascriptler çalıştırılıyor.


4
@RyanWeinstein: Trafik değil. Benim tahminim Selenium'un istemci tarafı JavaScript'te tespit edilebilen bazı JavaScript kancalarını göstermesi gerekiyor.
Mikko Ohtamaa

5
Veya trafik ise o zaman bir trafik deseni .... sayfaları çok hızlı göz atıyorsanız.
Mikko Ohtamaa

6
Çok hızlı göz atmıyorum. Yalnızca tek bir sayfa yüklüyorum ve normalde farem ve klavyemi kullanarak geziyorum. Ayrıca, kelimenin tam anlamıyla chrome.exe çalıştığı için Selenium'un kancaları ortaya çıkarması gerektiği mantıklı değil. Sadece normal krom çalışır ve ondan veri almanıza izin verir. Başka fikir var mı? Belki kurabiye ile ilgili bir şey olduğunu düşünüyordum. Bu beni delirtiyor.
Ryan Weinstein

5
Bu site distillbot algılama teknolojisini kullanır ve akamaitechnologies.comfarklı 95.100.59.245104.70.243.6623.202.161.241
ips'lerden

5
Aynı sorunu Selenium ve firefox sürücüsü ile de yaşıyorum. İlginç olan şey, Selenium'u bir NAT üzerinden internete erişen bir VMWare İş İstasyonu Sanal Makinesi'nde çalıştırıyorum. Ana makine stubhub'a erişebilirken, VM Selenium kullanırken ve hatta Selenium'un başlattığı tarayıcı örneğinde erişemez. VM Tarayıcı örneği Engellendi ve stubhub hala makineyi tanıyor ve engelledi. Bu yüzden bir şekilde tarayıcı ve makinenin parmak izini yapıyor olmalı.
Brian Cain

Yanıtlar:


51

Mac Kullanıcıları için

Değiştirme cdc_Değişkeni Vim veya Perl kullanarak

Sen kullanabilirsiniz vimveya @Vic Seedoubleyew Erti-Chris Eelmaa @ tarafından cevap işaret ettiği gibi, perlyerini alacak cdc_içinde değişken chromedriver( Erti-Chris Eelmaa daha o değişkene hakkında bilgi edinmek @ tarafından yapılmış mesaja ). Kullanma vimveya perlkaynak kodunu yeniden derlemek veya heks-düzenleyici kullanmak zorunda önler. chromedriverDüzenlemeye başlamadan önce orijinalin bir kopyasını oluşturduğunuzdan emin olun . Ayrıca, aşağıdaki yöntemler de test edilmiştir chromedriver version 2.41.578706.


Vim Kullanımı

vim /path/to/chromedriver

Yukarıdaki çizgiyi çalıştırdıktan sonra, muhtemelen bir sürü anlamsızlık göreceksiniz. Aşağıdakileri yapın:

  1. cdc_Yazarak /cdc_ve tuşuna basarak arayın return.
  2. Tuşuna basarak düzenlemeyi etkinleştirin a.
  3. Herhangi bir miktarını sil $cdc_lasutopfhvcZLmcfl ve silinenleri eşit miktarda karakterlerle değiştirin. Eğer yapmazsan, chromedriverbaşarısız olur.
  4. Düzenlemeyi bitirdikten sonra, esc .
  5. Değişiklikleri kaydetmek ve çıkmak için yazın :wq!ve tuşuna basın.return .
  6. Değişiklikleri kaydetmek istemiyorsanız, ancak çıkmak istiyorsanız, yazın :q!ve tuşuna basın return.
  7. Sen bittin.

Değiştirilene gidin chromedriverve üzerine çift tıklayın. Bir terminalpencere açılmalıdır. killedÇıktıda görmüyorsanız , sürücüyü başarıyla değiştirdiniz.


Perl Kullanımı

Cümledeki aşağıda hat cdc_ile dog_:

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

Yeni dizenin arama dizesiyle aynı sayıda karaktere sahip olduğundan emin olun, aksi takdirde dizge chromedriverbaşarısız olur.

Perl Açıklaması

s///g bir dizeyi aramak ve global olarak başka bir dizeyle değiştirmek istediğinizi belirtir (tüm tekrarların yerine geçer).

Örneğin, s/string/replacment/g

Yani,

s/// bir dizeyi aramayı ve değiştirmeyi belirtir.

cdc_ arama dizesidir.

dog_ yedek dizedir.

g dizenin her oluşumunun yerini alan global anahtardır.

Perl değişiminin işe yarayıp yaramadığını kontrol etme

Aşağıdaki satır, arama dizesinin her örneğini yazdıracaktır cdc_:

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

Bu hiçbir şey döndürmezse cdc_değiştirilmiştir.

Tersine, bunu kullanabilirsiniz:

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

yeni dizenizin olup olmadığını görmek için dog_, şimdi chromedriverikili dosyadadır. Öyleyse, yedek dize konsola yazdırılır.

Değiştirilene gidin chromedriverve üzerine çift tıklayın. Bir terminalpencere açılmalıdır. killedÇıktıda görmüyorsanız , sürücüyü başarıyla değiştirdiniz.


Paketleme

chromedriverİkili dosyayı değiştirdikten sonra , değiştirilen chromedriverikili dosya adının olduğundan chromedriverve orijinal ikili dosyanın orijinal konumundan taşındığından veya yeniden adlandırıldığından emin olun.


Bu Yöntemle Deneyimim

Daha önce giriş yapmaya çalışırken bir web sitesinde algılanıyordum, ancak cdc_eşit boyutlu bir dize ile değiştirdikten sonra giriş yapabildim. Diğerlerinin söylediği gibi, zaten tespit edildiyseniz, bu yöntemi kullandıktan sonra bile başka nedenlerden çok. Bu yüzden sizi bir VPN, farklı bir ağ veya neye sahip olduğunuzu algılayan siteye erişmeye çalışmanız gerekebilir.


@LekaBaper Uyarılarınız için teşekkürler. Kullandığım krom sürücü versiyonu 2.41.578706 idi.
colossatr0n

2
Farklı ağdaki yeni fiziksel bilgisayarda bu chromedriver.exe değişikliğini kullandığımda bile işe yaramadı.
Ahmed Memon

bir hata veriyor diyor, bu sürüm bu bilgisayarda çalışamaz :(
Walid Bousseta

@ colossatr0n Farkında olduğunuz tespit edilemeyen açık kaynaklı bir çatal var mı?
ishandutta2007

3
Krom sürücüsünün bu sorunun çözülmeyeceğini beyan ettiğini unutmayın, böylece belirsiz bir gelecek için çatal kullanmanız veya ikili dosyayı düzenlemeniz gerekebilir. bugs.chromium.org/p/chromedriver/issues/detail?id=3220
Kodiolog

144

Temel olarak selenyum algılamanın çalışma şekli, selenyum ile çalışırken görünen önceden tanımlanmış javascript değişkenlerini test etmeleridir. Bot algılama kodları genellikle bir şey kelimesini içeren (pencere nesne üzerinde) değişkenlerin hiçbirinde "selenyum" / "webdriver" ve aynı zamanda denilen belge değişkenleri bakmak $cdc_ve $wdc_. Elbette, tüm bunlar hangi tarayıcıda olduğunuza bağlıdır. Tüm farklı tarayıcılar farklı şeyler ortaya çıkarır.

Benim için krom kullandım, bu yüzden tek yapmam gereken, $cdc_belge değişkeni olarak artık var olmamasını sağlamaktı ve voila (chromriver kaynak kodunu indirin, krom sürücüyü değiştirin ve $cdc_farklı ad altında yeniden derleyin ).

Bu, krom sürücüsünde değiştirdiğim işlev:

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

(tüm ı döndü yaptım yorumunu dikkat $cdc_etmek randomblabla_.

Bot ağlarının kullanabileceği bazı teknikleri gösteren sahte bir kod:

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 kullanıcısına göre, hex düzenleyicide chromedriver.exe dosyasını açmak ve gerçekte herhangi bir derleme yapmadan yedeklemeyi manuel olarak yapmak da mümkündür.


26
evet probs olmadan çalıştı, bir sorun, bu değişiklikten önce "kara listeye" düştüyseniz, çıkmak oldukça zor olduğunu unutmayın. mevcut kara listeden çıkmak istiyorsanız, sahte tuval parmak izini uygulamanız, flaşı devre dışı bırakmanız, IP'yi değiştirmeniz ve istek üstbilgisi sırasını değiştirmeniz gerekir (takas dili ve Başlıkları kabul et). Kara düştü kez onlar size IP değişse bile, sizi takip etmek çok iyi önlemleri bile Gizli içinde açık krom, vb eğer
Erti-Chris Eelmaa

2
"/ Users / kullanıcı adınız / chromium / src / chrome / test / chromedriver / js"
dosyasını buldum

7
Ben sadece yerini $cdcile xxxxde chromedriver.exebir Hex editör ve işe yaradı! Ayrıca, tarayıcı penceresini en üst düzeye çıkarırsanız (önceden tanımlanmış bir boyut kullanmak yerine) daha az tespit edildiğini fark ettim.
szx

2
Windows, OSX veya Linux'ta mıydı? Osx onaltılık düzenleme çalışmıyor gibi görünüyor.
Nish

5
$ zzz_zzzzzzzzzzzzzzzzzzzzzz_ (aynı miktarda karakter) ile onaltılık düzenlenmiş ancak çalışmadı.
Aymon Fournier

100

Soruda ve gönderilen cevaplarda zaten anladığımız gibi, burada anti-kazıma ve "Distil Networks" adlı bir Bot algılama hizmeti var. Ve şirketin CEO'sunun röportajına göre :

Yeni botlar oluşturabilmelerine rağmen, Selenyum'u kullandıkları bir araç olarak tanımlamanın bir yolunu bulduk, bu yüzden o botta kaç kez yinelendikleri önemli değil, Selenyum'u engelliyoruz . Bunu şimdi Python ve birçok farklı teknolojiyle yapıyoruz. Bir tür bottan bir desen ortaya çıktığında, kullandıkları teknolojiyi tersine çevirmek ve kötü amaçlı olarak tanımlamak için çalışıyoruz.

Selenyum'u tam olarak nasıl algıladıklarını anlamak zaman ve ek zorluklar alacaktır, ancak şu anda kesin olarak ne söyleyebiliriz:

  • selenyum ile yaptığınız eylemlerle ilgili değildir - siteye gittiğinizde hemen tespit edilip yasaklanırsınız. Eylemler arasında yapay rastgele gecikmeler eklemeye çalıştım, sayfa yüklendikten sonra duraklama yaptım - hiçbir şey yardımcı olmadı
  • tarayıcı parmak izi ile de ilgili değil - temiz profillere sahip çoklu tarayıcılarda denedim, gizli modlar değil - hiçbir şey yardımcı olmadı
  • Röportajdaki ipucuna göre, bu "tersine mühendislik" olduğundan, bunun tarayıcıda bazı JS kodları ile yapıldığından şüpheleniyorum, bunun selenyum webdriver ile otomatik bir tarayıcı olduğunu ortaya koyuyor

Açıkça beri bir cevap olarak göndermeye karar verdim:

Bir web sitesi, selenyum kullandığınızda kromajör ile bunu algılayabilir mi?

Evet.


Ayrıca, daha önce denemediğim eski selenyum ve eski tarayıcı sürümleri - teorik olarak, Distil Networks bot dedektörünün şu anda dayandığı belirli bir noktada selenyuma uygulanan / eklenen bir şey olabilir. Daha sonra, bu durumda, ilgili bir değişikliğin hangi noktada / versiyonda yapıldığını tespit edebilir (evet, dedektörü tespit edelim), changelog'a ve değişiklik kümelerine bakabiliriz ve bu, nereye bakmamız gerektiği konusunda bize daha fazla bilgi verebilir ve web sürücüsü kullanan bir tarayıcıyı tespit etmek için ne kullanıyorlar. Bu sadece test edilmesi gereken bir teori.


@RyanWeinstein iyi, gerçek bir kanıtımız yok ve sadece spekülasyon yapabilir ve test edebiliriz. Şimdilik selenyum kullanarak bizi tespit etmenin bir yolu olduğunu söyleyebilirim. Selenyum sürümlerini denemeyi deneyin - bu size bazı ipuçları verebilir.
alecxe

1
Geçici portların nasıl belirlendiğiyle ilgili olabilir mi? Yöntem, iyi bilinen aralıklardan uzak kalır. github.com/SeleniumHQ/selenium/blob/…
Elliott de Launay

9
Easyjet distilnetwork servisini kullanıyor, evet kukla botları engelleyebilir, ancak karmaşık olanları engelleyemez, çünkü farklı IP'lerden günde 2000'den fazla talep ile test ettik (bu da yine 'aynı' adresi tekrar kullanıyoruz), bu yüzden temelde her IP Günde 5-10 istek ve tüm bu bot tespit hizmetlerinin sadece% 45 çalışma algoritmaları geliştirmek ve satmak için orada olduğunu söyleyebilirim, kullandığımız kazıyıcı tespit etmek kolaydı destilnetworks, squareshield ve diğerleri bu da beni hiçbirini kullanmamaya itti.
Jeffery ThaGintoki

3
Sanırım krom webdriver'da navigator.webdriver'ı tespit ediyorlar. İntoli.com / blog / not-possible-to-block-chrome-headless ve stackoverflow.com/questions/47297877/… yardımıyla navigator.webdriver = false yapmaya çalıştım . Distilnetworks.com/distil_identify_cookie.html
hoozecn

24

Wellsfargo.com'da nasıl uygulandığına bir örnek:

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
son deneme neden kapanmıyor? ayrıca u biraz cevap açıklayabilir.
ishandutta2007

16

JavaScripts sonucunun gizlenmesi

Krom tornavida kaynak kodunu kontrol ettim. Bu, bazı javascript dosyalarını tarayıcıya enjekte eder.
Bu bağlantıdaki her javascript dosyası web sayfalarına enjekte edilir: https://chromium.googlesource.com/chromium/src/+/master/chrome/test/chromedriver/js/

Ben ters mühendislik kullanılan ve So karartılmış Hex düzenleme ile js dosyaları. Artık selenyum etkinliğini ortaya çıkarmak için artık javascript değişkeni, işlev adları ve sabit dizeler kullanıldığından emindim. Ama yine de bazı siteler ve reCaptcha selenyum tespit!
Belki chromedriver js yürütmesinin neden olduğu değişiklikleri kontrol ediyorlar :)


Düzenleme 1:

Chrome 'navigator' parametrelerinde değişiklik

Ben 'navigator' 'de kısa bir süre kromajör kullanımını ortaya çıkaran bazı parametreler olduğunu keşfettim. Bunlar parametreler:

  • "navigator.webdriver" Otomatik olmayan modda "tanımsız" dır. Otomatik modda bu 'doğrudur'.
  • "navigator.plugins" Başsız kromda 0 uzunluk vardır. Bu yüzden eklenti uzunluğu kontrol sürecini kandırmak için bazı sahte öğeler ekledim.
  • " navigator.languages" varsayılan krom değeri '["en-US", "en", "es"]' olarak ayarlandı.

Yani ne gerek web sayfalarında javascript çalıştırmak için bir krom uzantısı oldu. Makalede sağlanan js kodu ile bir uzantı yaptım ve fermuarlı uzantı projeme eklemek için başka bir makale kullandım . Değerleri başarıyla değiştirdim; Ama yine de hiçbir şey değişmedi!

Bunun gibi başka değişkenler bulamadım ama bu onların olmadığı anlamına gelmez. Yine de reCaptcha krom sürücüyü tespit etti, bu yüzden değiştirmek için daha fazla değişken olmalı. Bir sonraki adım , yapmak istemediğim dedektör servislerinin tersine mühendislik olmalıdır.

Artık bu otomasyon sürecine daha fazla zaman ayırmaya veya alternatif yöntemler aramaya değdiğinden emin değilim!


12

Belirli bir kullanıcı profili ile selenyum kullanmaya çalışın, Bu şekilde belirli bir kullanıcı olarak kullanabilirsiniz ve istediğiniz herhangi bir şeyi tanımlayabilirsiniz, Bunu yaparken 'gerçek' bir kullanıcı olarak çalışacak, bazı süreç gezgini ile krom sürecine bakın ve etiketlerle farkı göreceksiniz.

Örneğin:

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)

chrome etiket listesi burada


11

partial interface Navigator { readonly attribute boolean webdriver; };

Gezgin arabiriminin web sürücüsü IDL özniteliği, başlangıçta yanlış olan web sürücüsü etkin bayrağının değerini döndürmelidir.

Bu özellik, web sitelerinin kullanıcı aracısının WebDriver tarafından kontrol altında olduğunu belirlemesine olanak tanır ve hizmet reddi saldırılarını azaltmaya yardımcı olmak için kullanılabilir.

Doğrudan 2017 W3C Editörünün WebDriver Taslağı'ndan alınmıştır . Bu, ağır bir şekilde selenyum sürücülerinin gelecekteki yinelemelerinin yanlış kullanımı önlemek için tanımlanabileceğini ima eder. Sonuçta, kaynak kodu olmadan, belirli bir krom sürücüsünün tam olarak tespit edilebilir olmasına neden olan şeyi söylemek zor.


4
"Kaynak kodu olmadan söylemek zor" .. kaynak kodu serbestçe kullanılabilir
Corey Goldberg

6
Söz konusu web sitesi olmadan kaynak kodda demek istedim. Neye karşı kontrol ettiklerini söylemek zor.
bryce

8

window.navigator.webdriver === trueBir web sürücüsü ile çalışıyorsanız Firefox'un ayarlandığı söyleniyor. Yani eski özellikleri birine göre olan (örn: archive.org ) ama ben bulamadım yenisi eklerde bazı çok muğlak ifadeler dışında.

Bunun için bir test dosyası içinde selenyum kodunda olduğu fingerprint_test.js sonunda comment "Şu anda sadece ateş uygulanan" diyor ama bazı basit olan bu yönde herhangi bir kod tespit etmek mümkün değildi grepiçinde ne, ing güncel (41.0.2) Firefox yayın ağacı veya Chromium ağacı içinde.

Ayrıca Ocak 2015'ten itibaren firefox driver b82512999938'de parmak izi ile ilgili daha eski bir taahhüt için bir yorum buldum . Bu kod hala Selenium GIT-master'da dün indirildi javascript/firefox-driver/extension/content/server.jsve mevcut w3c webdriver spesifikasyonundaki biraz farklı ifadeli eke bir yorum ile.


2
Web sürücüsünü Firefox 55 ile test ettim ve bunun doğru olmadığını doğrulayabilirim. Değişken window.navigator.webdrivertanımlanmamış.
Speedplane

1
Güncelleme: Firefox 65 ile test ettim ve bu doğru:window.navigator.webdriver == true
speedplane

Firefox 76 sürümü hala doğru olduğunu gösteriyor
user2284144

8

@ Erti-Chris Eelmaa'nın büyük cevabına ek olarak - can sıkıcı window.navigator.webdriverve salt okunur. Olay değerini değiştirirseniz falseyine de olur true. Bu nedenle, otomatik yazılım tarafından yönlendirilen tarayıcı hala algılanabilir. MDN

Değişken --enable-automationkromdaki bayrak tarafından yönetilir . Krom tornavida, bu bayrakla krom atar ve krom, window.navigator.webdriverdeğerini ayarlar true. Burada bulabilirsiniz . Bayrağı "hariç tutma anahtarları" na eklemeniz gerekir. Örneğin (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

Bir web uygulaması güvenlik duvarının arkasındaymış gibi geliyor. Modsecurity'ye bir göz atın ve bunların nasıl çalıştığını görmek için çalışın. Gerçekte, sorduğunuz şey bot sapmalarının nasıl yapılacağıdır. Selenyum web sürücüsü bunun için değildir. Web uygulamanızı test etmek için diğer web uygulamalarına çarpmaz. Mümkün, ancak temel olarak, bir WAF'ın kural kümelerinde ne aradığına bakmanız ve mümkünse selenyumdan özellikle kaçınmanız gerekir. O zaman bile, yine de çalışmayabilir, çünkü hangi WAF kullandıklarını bilmiyorsunuz. Doğru ilk adımı attınız, bu kullanıcı aracısını taklit ediyor. Bu işe yaramadıysa, bir WAF yerinde ve muhtemelen daha zor almak gerekir.

Düzenleme: Diğer cevaptan alınan puan. Öncelikle kullanıcı aracınızın gerçekten doğru ayarlandığından emin olun. Belki yerel bir web sunucusuna çarptı ya da giden trafiği kokladı.


Bence doğru yoldasınız. Kurulumumu test ettim ve Kullanıcı Aracısını başarıyla geçip aynı sonucu alan geçerli bir kullanıcı aracısı dizesiyle değiştirdim, stubhub isteği engelledi.
Brian Cain

1
Bu konu çok geniş, eğer anlamadıysan ve anlamak istiyorsan, burada doğru yer değil. Owasp ile başlayın. Sızma testi ve web güvenliğini inceleyin. Ayrıca, daha önce söylediğim gibi, özellikle bu konu için modsecurity ve WAF'a bakın.
Bassel Samman

1
Bir HTTP üstbilgisi sorunu olsaydı, normal tarayıcı engellenmez mi? HTTP üstbilgileri tamamen aynıdır. Ayrıca o github linki ile tam olarak neye bakıyorum? Stubhub'a gitmek için selenyum kullanmayı denedin mi? Bir şey çok çok kapalı.
Ryan Weinstein

1
Karışıklık için özür dilerim. Buna bakacağım ve eğer istemiyorsan artık bana yardım etmek zorunda değilsin. Deneyimlerimin çoğu programlama sistemleri uygulamalarında, bu yüzden bahsettiğiniz bu güvenlik güvenliği kurallarına aşina değildim. Bir göz atacağım ve kendimi eğitmeye çalışacağım. Hiçbir şey atlamaya çalışmıyorum, sadece bu web sitelerinin selenyum kullanan bir kullanıcıyı nasıl algıladığını bilmekle ilgileniyordum.
Ryan Weinstein

1
Ben de geliştiriciyim :). Öğrenme, geride kalabileceğim bir nedendir. Yardım etmeyi umursam, sadece niyetlerini bilmediğimi ve web sitesi güvenliğini atlamanıza tam olarak yardımcı olamadığımı açıklığa kavuşturmak istedim. Ancak sorunuzu cevaplamak, tespit ettikleri selenyum değildir. Kurallar şüpheli davranışlar tespit etti ve rahatsız edici müşteriye karşı uygun önlemleri almaya karar verdi. Sizi, yaptığınız şeyden daha fazla yapmadığınız şeyle yakalarlar. Repo bağlantısında, bir fikir edinmek için bu dosyaya göz atabilirsiniz base_rules / modsecurity_crs_20_protocol_violations.conf
Bassel Samman

6

Tüm doğru verileri gönderiyor olsanız bile (ör. Selenium bir uzantı olarak görünmüyorsa, makul bir çözünürlük / bit derinliğiniz var & c), ziyaretçi davranışını profilin aktör bir kullanıcı veya otomatik bir sistemdir.

Örneğin, bir siteyi ziyaret ettikten sonra, fareyi doğrudan ilgili düğmeye götürerek bir saniyeden daha kısa bir süre içinde hemen bir işlem gerçekleştirecek, kullanıcının gerçekten yapamayacağı bir şeydir.

Tarayıcınızın ne kadar benzersiz olduğunu kontrol etmek için https://panopticlick.eff.org/ gibi bir siteyi kullanmak için bir hata ayıklama aracı olarak da yararlı olabilir ; ayrıca Selenyum'da çalıştığınızı gösteren belirli parametrelerin olup olmadığını doğrulamanıza yardımcı olur.


3
Bu web sitesini zaten kullandım ve parmak izi normal tarayıcımla aynı. Ayrıca hiçbir şeyi otomatikleştirmiyorum. Sadece normal şekilde göz atıyorum.
Ryan Weinstein

6

Gördüğüm bot algılama, aşağıdaki cevaplarda okuduğumdan daha karmaşık veya en azından farklı görünüyor.

DENEY 1:

  1. Bir Python konsolundan Selenium ile bir tarayıcı ve web sayfası açıyorum.
  2. Fare, sayfa yüklendikten sonra bir bağlantının görüneceğini bildiğim belirli bir konumda zaten. Asla fareyi hareket ettirmem.
  3. Sol fare düğmesine bir kez basıyorum (bu, Python'un tarayıcıya çalıştığı konsoldan odaklanmak için gereklidir).
  4. Sol fare düğmesine tekrar basıyorum (unutmayın, imleç verilen bağlantının üzerindedir).
  5. Bağlantı olması gerektiği gibi normal şekilde açılır.

DENEY 2:

  1. Daha önce olduğu gibi, bir Python konsolundan Selenium ile bir tarayıcı ve web sayfası açıyorum.

  2. Bu sefer, fareyle tıklamak yerine, aynı öğeyi rastgele bir ofsetle tıklatmak için Selenyum'u (Python konsolunda) kullanıyorum.

  3. Bağlantı açılmıyor, ancak bir kayıt sayfasına yönlendirildim.

ÇIKARIMLARI:

  • Selenium aracılığıyla bir web tarayıcısı açmak, insan görünmemi engellemiyor
  • fareyi bir insan gibi hareket ettirmek insan olarak sınıflandırılmak zorunda değildir
  • ofset ile Selenyum aracılığıyla bir şeyi tıklamak hala alarm verir

Gizemli görünüyor, ancak sanırım sadece bir eylemin Selenyum'dan kaynaklanıp kaynaklanmadığını belirleyebilirler, ancak tarayıcının kendisinin Selenyum yoluyla açılıp açılmadığını umursamıyorlar. Veya pencerenin odaklanıp odaklanmadığını belirleyebilirler mi? Herhangi bir görüş varsa duymak ilginç olurdu.


3
İnancım, Selenyum'un öğeleri bulmak ve erişmek için javascript aracılığıyla sayfaya bir şey enjekte etmesidir. Bu enjeksiyon tespit ettiklerine inandığım şey.
zeusalmighty

Haklısın, Bu test% 100 geçerlidir. Benzer sonuçlarla benzer bir test yaptım. Enter sekmesini veya anahtarları gönderebilirim. Öğelere eriştiğim anda sayfanın çalışması durdu. Yani sürücü tarayıcıya bazı javascript enjekte ederse. Bu javascript'i krom uzantısını kullanarak şifreleyebilir ve bir sonraki sayfada aynı uzantıyı kullanarak şifresini çözebiliriz. İlerleyen günlerde ona bakmaya çalışacağım.
trixo

6

Bulduğum bir şey daha, bazı web sitelerinin Kullanıcı Aracısını kontrol eden bir platform kullanmasıdır. Değer şunları içeriyorsa: "HeadlessChrome" başsız mod kullanılırken davranış garip olabilir.

Bunun çözümü, örneğin Java'da kullanıcı aracısı değerini geçersiz kılmak olacaktır:

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

Bazı siteler bunu tespit ediyor:

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 ve Firefox, selenium 3.5.0, ChromeDriver 2.31.488774, geckodriver 0.18.0
jerrypy

4

Aşağıdaki kodla bir html sayfası yazın. DOM selenyumunda, dış HTML'de bir web sürücüsü özniteliği uygulandığını göreceksiniz

<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
Özellik yalnızca Firefox'ta eklenir.
Louis

1
Ve tarayıcıyı kontrol eden selenyum uzantısından kaldırmak mümkündür. Yine de işe yarayacak.
m3nda

3

Javascript "anahtar" değişkenini böyle değiştirerek buldum:

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

Selenium Webdriver'ı Google Chrome ile birlikte kullanırken bazı web sitelerinde çalışır, çünkü birçok site Selenium tarafından hurdaya ayrılmamak için bu değişkeni kontrol eder.


2

Bana öyle geliyor ki Selenium ile yapmanın en basit yolu, tarayıcı parmak izini geri gönderen XHR'yi durdurmaktır.

Ancak bu yalnızca Selenyum'a özgü bir sorun olduğundan, sadece başka bir şey kullanmak daha iyidir. Selenyumun böyle şeyleri daha kolay değil, daha kolay hale getirmesi gerekiyor.


Selenyum için diğer seçenekler nelerdir?
Tai

Sanırım İstekler ana python seçeneği olurdu. Tarayıcınızın gönderdiği isteklerin aynısını gönderirseniz, normal bir tarayıcı olarak görünürsünüz.
pguardiario

2

"Enable-automation" parametresini kullanmayı deneyebilirsiniz

var options = new ChromeOptions();

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

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

Ancak, bu yeteneğin ChromeDriver 79.0.3945.16'da düzeltildiğini uyarmak istiyorum . Bu yüzden muhtemelen kromun eski sürümlerini kullanmalısınız.

Ayrıca, başka bir seçenek olarak, Chrome yerine InternetExplorerDriver'ı kullanmayı deneyebilirsiniz. Bana gelince, IE herhangi bir kesmek olmadan hiç engellemez.

Daha fazla bilgi için buraya bir göz atın:

Selenyum webdriver: Selenyum algılamasını önlemek için navigator.webdriver bayrağını değiştirme

Chrome v76 içindeki "Chrome otomatik yazılım tarafından kontrol ediliyor" bilgi çubuğunu gizleyemiyor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.