chromedriverでSeleniumを使用していることをWebサイトで検出できますか?

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

ChromedriverでSeleniumをテストしてきましたが、自動化がまったく行われていなくても、一部のページでSeleniumを使用していることを検出できることに気付きました。SeleniumとXephyrを介してChromeを使用して手動でブラウジングしている場合でも、疑わしいアクティビティが検出されたというページが表示されることがよくあります。ユーザーエージェントとブラウザのフィンガープリントを確認しましたが、これらはすべて通常のChromeブラウザとまったく同じです。

通常のChromeでこれらのサイトを参照すると、すべて正常に機能しますが、Seleniumを使用した瞬間に検出されます。

理論的には、chromedriverとchromeは、どのWebサーバーでも文字通りまったく同じように見えるはずですが、どういうわけか、それらはそれを検出できます。

テストコードが必要な場合は、これを試してください。

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

スタブハブを閲覧すると、1つまたは2つのリクエスト内でリダイレクトされて「ブロック」されます。私はこれを調査してきましたが、ユーザーがSeleniumを使用していることをどのように判断できるのかわかりません。

どうやってやっているの?

更新の編集:

FirefoxにSeleniumIDEプラグインをインストールしましたが、追加のプラグインのみを使用して通常のfirefoxブラウザーでstubhub.comにアクセスすると、禁止されました。

編集:

Fiddlerを使用して送受信されているHTTPリクエストを表示すると、「偽のブラウザ」のリクエストの応答ヘッダーに「no-cache」が含まれていることがよくあります。

編集:

このような結果JavaScriptからSeleniumWebdriverページにいることを検出する方法はありますかますか?Webdriverを使用していることを検出する方法はないはずです。しかし、この証拠はそうではないことを示唆しています。

編集:

サイトはサーバーに指紋をアップロードしますが、確認したところ、セレンの指紋はクロムを使用した場合の指紋と同じです。

編集:

これは、サーバーに送信する指紋ペイロードの1つです。

{"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は1回の使用で機能しますが、最初のページを読み込んだ後に検出されます。明らかに、Seleniumを検出するためにいくつかのjavascriptが実行されています。

19 answers

78
colossatr0n 2018-08-31 17:49.

Macユーザーの場合

cdc_VimまたはPerlを使用した変数の置き換え

あなたは使用することができますvim@Vic SeedoubleyewがERTI-クリスEelmaa @での回答で指摘したように、またはperl交換するために、cdc_変数をchromedriverその変数についての詳細を学ぶためにERTI-クリスEelmaa @で記事を参照してください)。ソースコードを再コンパイルしたり、16進エディターを使用しvimたりperlする必要がないようにする。chromedriver編集する前に、必ずオリジナルのコピーを作成してください。また、以下の方法はでテストされましたchromedriver version 2.41.578706


Vimの使用

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、であること、および元のバイナリが元の場所から移動されたか、名前が変更されていることを確認してください。


この方法での私の経験

以前、ログインしようとしたときにWebサイトで検出されていましたがcdc_、同じサイズの文字列に置き換えた後、ログインできました。他の人が言っているように、すでに検出されている場合は、この方法を使用した後でも、他の多くの理由があります。そのため、VPN、別のネットワーク、またはあなたが持っているものを使用して、あなたを検出していたサイトにアクセスしてみる必要があるかもしれません。

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

基本的に、セレン検出が機能する方法は、セレンで実行したときに表示される事前定義されたjavascript変数をテストすることです。ボット検出スクリプトは、通常、何も言葉を含む(ウィンドウオブジェクトの)変数のいずれかで「セレン」/「webdriverを」、とも呼ばれる文書変数に見える$cdc_とし$wdc_。もちろん、これはすべて、使用しているブラウザによって異なります。すべての異なるブラウザは異なるものを公開します。

私はchromeを使用していたので、$cdc_ドキュメント変数として存在しなくなったことを確認するだけで、出来上がり(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によると、16進エディターでchromedriver.exeを開くだけで、実際にコンパイルせずに手動で置換することもできます。

107
alecxe 2015-10-29 13:39.

質問と投稿された回答ですでに理解しているように、ここでは「DistilNetworks」と呼ばれるアンチWebスクレイピングとボット検出サービスが機能しています。そして、会社のCEOのインタビューによると:

彼らは新しいボットを作成できますが、使用しているツールであるSeleniumを識別する方法を見つけたため、そのボットを何度繰り返してもSeleniumをブロックしています。現在、Pythonとさまざまなテクノロジーを使用してこれを行っています。あるタイプのボットからパターンが出現するのを確認したら、それらが使用するテクノロジーをリバースエンジニアリングし、悪意のあるものとして識別します。

彼らがセレンをどれだけ正確に検出しているかを理解するには、時間と追加の課題が必要ですが、現時点で確実に言えることは次のとおりです。

  • これは、セレンで実行するアクションとは関係ありません。サイトに移動すると、すぐに検出されて禁止されます。アクション間に人為的なランダムな遅延を追加しようとしましたが、ページが読み込まれた後に一時停止してください-何も役に立ちませんでした
  • それはブラウザの指紋でもありません-クリーンなプロファイルで複数のブラウザで試してみましたが、シークレットモードではありません-何も役に立ちませんでした
  • インタビューのヒントによると、これは「リバースエンジニアリング」だったので、これはブラウザで実行されているJSコードで行われていると思われます。これは、セレンWebドライバを介して自動化されたブラウザであることを示しています。

明らかに次の理由から、回答として投稿することにしました。

chromedriverでSeleniumを使用していることをWebサイトで検出できますか?

はい。


また、私が実験していないのは、古いセレンと古いブラウザバージョンです。理論的には、DistilNetworksボット検出器が現在依存している特定の時点でセレンに実装/追加されたものがある可能性があります。次に、これが当てはまる場合、関連する変更が行われたポイント/バージョンを検出し(ええ、検出器を検出しましょう)、変更ログと変更セットを調べます。これにより、どこを見ればよいかについての詳細情報が得られる可能性があります。そして、彼らはWebdriverを利用したブラウザを検出するために何を使用していますか。テストする必要があるのは単なる理論です。

26
aianitro 2016-09-12 13:21.

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 !+""
18
ShayanKM 2018-12-06 02:56.

JavaScriptの結果を難読化する

chromedriverのソースコードを確認しました。これにより、いくつかのjavascriptファイルがブラウザに挿入されます。
このリンクのすべてのJavaScriptファイルはWebページに挿入されます: https //chromium.googlesource.com/chromium/src/+/master/chrome/test/chromedriver/js/

そこで、リバースエンジニアリングを使用し、16進編集によってjsファイルを難読化しました。これで、セレンの活動を明らかにするために、JavaScript変数、関数名、固定文字列が使用されなくなったと確信しました。しかし、それでもいくつかのサイトとreCaptchaはセレンを検出します!
たぶん彼らはchromedriverjsの実行によって引き起こされた変更をチェックします:)


編集1:

Chromeの「ナビゲーター」パラメーターの変更

'navigator'には、chromedriverの使用法を簡単に明らかにするいくつかのパラメーターがあることを発見しました。これらはパラメータです:

  • 「navigator.webdriver」非自動モードでは、「未定義」です。自動モードでは、「true」です。
  • 「navigator.plugins」ヘッドレスクロームの長さは0です。そこで、プラグインの長さチェックプロセスをだますために、いくつかの偽の要素を追加しました。
  • " navigator.languages"はデフォルトのクロム値 '["en-US"、 "en"、 "es"]'に設定されました。

だから私が必要としたのは、Webページでjavascriptを実行するためのChrome拡張機能でした。記事で提供されているSeleniumを使用したJavascriptNavigatorオブジェクトの変更を使用して拡張機能を作成し、Seleniumでの拡張機能の使用(Python)を使用してzip形式の拡張機能をプロジェクトに追加しました。値を正常に変更しました。しかし、それでも何も変わりません!

これらのような他の変数は見つかりませんでしたが、それらが存在しないという意味ではありません。それでもreCaptchaはchromedriverを検出するので、変更する変数がもっとあるはずです。次のステップは、私はしたくないことを検出サービスのリバースエンジニアリングする必要があります。

では、この自動化プロセスにもっと時間を費やしたり、別の方法を探したりする価値があるかどうかわかりません。

15
DebanjanB 2020-06-23 07:29.

Seleniumとは何ですか?WebDriverとは何ですか?制御されたChromeDriverがChromeまたはChromiumを必要としないのはなぜですか?によって駆動されていることが検出されたWebサイトについて、多くの分析と議論が行われています。これが私の2セントです:

記事によると、さまざまなWebページまたはサービスをさまざまなブラウザに提供するユーザーエージェント使用したブラウザ検出は、通常、最良のアイデアの1つではありません。Webは、ユーザーが使用しているブラウザーやデバイスに関係なく、すべての人がアクセスできるようになっています。特定のブラウザをターゲットにするのではなく、機能の可用性に基づいて徐々にそれ自体を強化するWebサイトを開発するためのベストプラクティスが概説されています。

ただし、ブラウザーと標準は完全ではなく、一部のWebサイトがブラウザーを検出し、ブラウザーがSeleniumで制御されるセレンのChromeDriverとWebDriverの違いは何ですか?によって駆動されている場合は、まだいくつかのエッジケースがあります。ブラウザはさまざまな方法で検出でき、一般的に使用されるメカニズムは次のとおりです。

関連する詳細な説明recaptcha 3は、私がセレン/クロムドライバーを使用していることをどのように認識しますか?ことができますrecaptcha 3は、私がセレン/クロムドライバーを使用していることをどのように認識しますか?

  • 用語の検出HeadlessChromeを内部にヘッドレスクロームのUserAgent

関連する詳細な説明はLinuxでヘッドレスChromeを使用して拒否されたページにアクセスし、ヘッド付きChromeはPythonを介してSeleniumを使用するWindowsで動作します

関連する詳細な説明は、「Seleniumを使用してChaseサイトのログインを自動化できません

  • 使用してボットManagerサービスをからアカマイ

SeleniumとPythonを使用して値が渡されると、動的ドロップダウンにhttps://www.nseindia.com/の自動提案が表示されません。で、関連する詳細な説明を見つけることができます。SeleniumとPythonを使用して値が渡されると、動的ドロップダウンにhttps://www.nseindia.com/の自動提案が表示されません。

  • 使用してボット保護サービスをからDatadome

DataDomeを使用しているWebサイトは、SeleniumとPythonを使用してスクレイピング中にキャプチャがブロックされますしてDataDomeを使用しているWebサイトは、SeleniumとPythonを使用してスクレイピング中にキャプチャがブロックされます関連する詳細なディスカッションを見つけることができますDataDomeを使用しているWebサイトは、SeleniumとPythonを使用してスクレイピング中にキャプチャがブロックされます

ただし、ユーザーエージェントを使用してブラウザーを検出するのは簡単に見えますが、それをうまく行うのは実際には少し難しいです。

:この時点で言及する価値があります:ユーザーエージェントスニッフィングを使用することはめったに良い考えではありません。特定の問題に対処するには、常により優れた、より広く互換性のある方法があります。


ブラウザ検出に関する考慮事項

ブラウザの検出の背後にある考え方は、次のいずれかになります。

  • Webブラウザの特定のバリアントまたは特定のバージョンの特定のバグを回避しようとしています。
  • 一部のブラウザがまだサポートしていない特定の機能の存在を確認しようとしています。
  • 使用しているブラウザに応じて異なるHTMLを提供しようとしています。

UserAgentsによるブラウザ検出の代替手段

ブラウザ検出の代替手段のいくつかは次のとおりです。

  • ブラウザが機能のAPIをどのように実装しているかを検出し、そこからどのように使用するかを決定するためのテストを実装します。例として、正規表現でのChromeのフラグなしの実験的なルックビハインドサポートがあります
  • プログレッシブエンハンスメントの設計手法を採用します。これには、ボトムアップアプローチを使用して、より単純なレイヤーから開始し、それぞれがより多くの機能を使用する連続するレイヤーでサイトの機能を向上させる、レイヤーでのWebサイトの開発が含まれます。
  • グレースフルデグラデーションのトップダウンアプローチを採用し、必要すべての機能を使用して可能な限り最高のサイトを構築し、それを微調整して古いブラウザーで機能するようにします。

解決

Selenium駆動のWebDriverが検出されないようにするために、ニッチなアプローチには、以下のアプローチのいずれか/すべてが含まれます。

  • 回転のUserAgentをあなたのすべての実行中にテストスイート使用してfake_useragent、以下のようにモジュール:

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

SeleniumでGoogleChromeユーザーエージェントを変更する方法は?する方法で、関連する詳細な説明を見つけることができますSeleniumでGoogleChromeユーザーエージェントを変更する方法は?

  • 次のように使用して、各テストUserAgentをローテーションします。Network.setUserAgentOverrideexecute_cdp_cmd()

    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;"))
    

関連する詳細な説明は、SeleniumとPythonを使用してユーザーエージェントを変更する方法

  • Webdriverのプロパティ値を次のように変更します。navigatorundefined

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

関連する詳細な説明は、Selenium webdriver:seleniumの検出を防ぐためにnavigator.webdriverフラグを変更

  • 値を変更navigator.pluginsnavigator.languagesWebGLのヘアライン機能画像の欠落など

関連する詳細な説明検出できないバージョンのSeleniumWebdriverはありますか?

関連する詳細な説明はSeleniumとPythonでGoogleのキャプチャをバイパスする方法は?するSeleniumとPythonでGoogleのキャプチャをバイパスする方法は?


reCAPTCHAへの対処

2captcharecaptcha-v3を扱っている間、私はロボットはないというテキスト関連付けられたチェックボックスをクリックするのではなく、を抽出して使用することで認証を取得する方が簡単な場合がありdata-sitekeyます。

関連する詳細な説明はSeleniumおよびPythonリクエストを使用してプログラムで有効な応答を取得するために、ReCaptcha V2の32ビットデータサイトキーを識別する方法は?

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

クロムの特定のユーザープロファイルでセレンを使用してみてください。そうすれば、特定のユーザーとして使用して、必要なものを定義できます。そうすることで、「実際の」ユーザーとして実行されます。プロセスエクスプローラーでクロムプロセスを確認してください。タグとの違いがわかります。

例えば:

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)

クロームタグリストはこちら

13
bryce 2017-01-28 13:05.

partial interface Navigator { readonly attribute boolean webdriver; };

ナビゲーターインターフェイスのwebdriverIDL属性は、webdriver-activeフラグの値を返す必要があります。これは最初はfalseです。

このプロパティにより、Webサイトは、ユーザーエージェントがWebDriverによって制御されていることを確認でき、サービス拒否攻撃を軽減するために使用できます。

2017 W3C Editor's Draft ofWebDriverから直接引用。これは、少なくとも、セレンのドライバーの将来の反復が誤用を防ぐために識別可能であることを強く意味します。結局のところ、ソースコードがないと、特定のChromeドライバーを正確に検出できる原因を特定するのは困難です。

8
deamentiaemundi 2015-10-28 13:44.

Firefoxはwindow.navigator.webdriver === true、Webドライバーを使用している場合に設定されると言われています。これは古い仕様の1つ(例:archive.org)によるものでしたが、付録の非常にあいまいな表現を除いて、新しい仕様では見つかりませんでした。

それのテストはファイルfingerprint_test.jsのセレンコードにあり、最後のコメントは「現在Firefoxでのみ実装されています」と言っていますが、いくつかの簡単な操作でその方向のコードを特定することはできませんgrepでした。現在(41.0.2)FirefoxリリースツリーにもChromiumツリーにもありません。

また、2015年1月のFirefoxドライバーb82512999938でのフィンガープリントに関する古いコミットに対するコメントを見つけました。そのコードはまだSeleniumGITにあります-マスターは昨日ダウンロードさjavascript/firefox-driver/extension/content/server.jsれ、現在のw3cWebドライバー仕様のわずかに異なる言葉の付録にリンクするコメントが付いています。

8
FDG 2019-01-29 04:47.

@ Erti-Chris Eelmaaのすばらしい答えに加えて、煩わしくwindow.navigator.webdriver、読み取り専用です。値を変更した場合のイベントfalseには、まだがありtrueます。そのため、自動化されたソフトウェアによって駆動されるブラウザを引き続き検出できます。 MDN

変数は--enable-automationchromeのフラグによって管理されます。chromedriverはそのフラグでchromeを起動し、chromeはをに設定window.navigator.webdrivertrueます。あなたはここでそれを見つけることができます。「スイッチの除外」にフラグを追加する必要があります。たとえば(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.

私が見つけたもう1つのことは、一部のWebサイトがユーザーエージェントをチェックするプラットフォームを使用していることです。値に「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");
6
Bassel Samman 2015-10-24 13:28.

Webアプリケーションファイアウォールの背後にあるようです。modsecurityとowaspを見て、それらがどのように機能するかを確認してください。実際には、あなたが求めているのは、ボット検出の回避を行う方法です。それはセレンWebドライバーの目的ではありません。これは、他のWebアプリケーションにヒットしないようにWebアプリケーションをテストするためのものです。可能ですが、基本的には、WAFがルールセットで何を探すかを確認し、可能であればセレンでそれを具体的に回避する必要があります。それでも、使用しているWAFがわからないため、機能しない可能性があります。あなたは正しい最初のステップを実行しました。それはユーザーエージェントを偽造することです。それでもうまくいかなかった場合は、WAFが導入されているので、もっと注意が必要です。

編集:他の答えから取られたポイント。最初に、ユーザーエージェントが実際に正しく設定されていることを確認してください。たぶん、それはローカルWebサーバーにヒットするか、発信するトラフィックを盗聴します。

6
M3RS 2018-04-12 08:41.

私が見たボット検出は、以下の回答で読んだものよりも洗練されているか、少なくとも異なっているようです。

実験1:

  1. PythonコンソールからSeleniumを使用してブラウザーとWebページを開きます。
  2. マウスは、ページが読み込まれるとリンクが表示されることがわかっている特定の場所にすでにあります。マウスを動かすことはありません。
  3. マウスの左ボタンを1回押します(これは、Pythonが実行されているコンソールからブラウザーにフォーカスを移すために必要です)。
  4. マウスの左ボタンをもう一度押します(カーソルが特定のリンクの上にあることを思い出してください)。
  5. リンクは正常に開きます。

実験2:

  1. 以前と同じように、PythonコンソールからSeleniumを使用してブラウザーとWebページを開きます。

  2. 今回は、マウスでクリックする代わりに、(Pythonコンソールで)Seleniumを使用して、ランダムなオフセットで同じ要素をクリックします。

  3. リンクが開きませんが、サインアップページに移動します。

影響:

  • Seleniumを介してWebブラウザーを開くことは、私が人間のように見えることを妨げるものではありません。
  • 人間のようにマウスを動かすことは、人間として分類される必要はありません
  • オフセットのあるSeleniumを介して何かをクリックしても、アラームが発生します

不思議なようですが、ブラウザ自体がSelenium経由で開かれたかどうかは気にせず、アクションがSeleniumから発生したものかどうかを判断できると思います。または、ウィンドウにフォーカスがあるかどうかを判断できますか?誰かが何か洞察を持っているかどうか聞くのは興味深いでしょう。

5
lfaraone 2015-10-26 12:01.

すべての適切なデータを送信している場合でも(たとえば、Seleniumが拡張機能として表示されない、妥当な解像度/ビット深度があるなど)、訪問者の行動をプロファイルして、次のことを判断するためのサービスやツールが多数あります。アクターはユーザーまたは自動システムです。

たとえば、サイトにアクセスしてすぐに、マウスを関連するボタンに直接移動することで、1秒以内に何らかのアクションを実行することは、ユーザーが実際に行うことのないことです。

https://panopticlick.eff.org/などのサイトを使用してブラウザの一意性を確認することもデバッグツールとして役立つ場合があります。また、Seleniumで実行していることを示す特定のパラメーターがあるかどうかを確認するのにも役立ちます。

4
PC3TJ 2015-10-28 18:10.

次のコードでhtmlページを記述します。DOMでは、seleniumがouterHTMLにwebdriver属性を適用していることがわかります。

<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.

一部のサイトはこれを検出しています:

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.

Seleniumでそれを行う最も簡単な方法は、ブラウザーのフィンガープリントを送り返すXHRをインターセプトすることだと私には思えます。

ただし、これはSeleniumのみの問題であるため、他のものを使用する方がよいでしょう。セレンは、このようなことをそれほど難しくするのではなく、簡単にすることになっています。

3
Juliagu 2019-05-04 04:36.

javascriptの「key」変数を次のように変更していることがわかりました。

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

多くのサイトがSeleniumによって廃棄されないようにするためにこの変数をチェックするため、GoogleChromeと一緒にSeleniumWebdriverを使用する場合に一部のWebサイトで機能します。

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

パラメータ「enable-automation」の使用を試みることができます

var options = new ChromeOptions();

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

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

ただし、この機能はChromeDriver79.0.3945.16で修正されていることを警告したいと思います。したがって、おそらく古いバージョンのクロムを使用する必要があります。

また、別のオプションとして、Chromeの代わりにInternetExplorerDriverを使用してみることができます。私の場合、IEはハッキングなしではまったくブロックしません。

詳細については、こちらをご覧ください。

Selenium webdriver:seleniumの検出を防ぐためにnavigator.webdriverフラグを変更

Chromev76内の「Chromeは自動化されたソフトウェアによって制御されています」情報バーを非表示にできません

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

今週のコミックコンですべての素晴らしいものに追いつく方法

今週のコミックコンですべての素晴らしいものに追いつく方法

サンディエゴコミックコンは今週開幕し、オタクのアナウンス、ポスター、予告編、お気に入りの番組や映画のからかいでいっぱいになります。SDCCは、コンベンションフロア全体の多くのパネルで行われているため、すべてに対応するのは難しい場合があります。

Googleの9千万ドルの和解はアプリ開発者にとってもGoogleにとっても勝利ですか?

Googleの9千万ドルの和解はアプリ開発者にとってもGoogleにとっても勝利ですか?

小さなアプリ開発者は金曜日に発表された法的な和解でグーグルから9千万ドルをこじ開けた。アップルとの同様の合意に続いて熱くなった。金曜日のブログ投稿で、Googleは、Androidメーカーが市場での優位性を悪用してPlayストア経由でのアプリ内購入に対して30%の料金を不当に請求したと主張するアプリ開発者との訴訟を解決するために、9千万ドルを支払うことに合意したと述べました。

RadioShackのTwitterはハッキングされていませんでした、それはただの暗号のサクラです

RadioShackのTwitterはハッキングされていませんでした、それはただの暗号のサクラです

今週、RadioShackのTwitterアカウントは、奇妙なものから完全にひどいものになりました。短い順序で、会社のフィード全体が、バイブレーター、「ビッグティット」(スペルミス)、有名人やその他の企業アカウントを荒らしているツイートなど、NSFW素材の真の山になりました。

ヒッグス粒子から10年後、物理学にとって次の大きなものは何ですか?

ヒッグス粒子から10年後、物理学にとって次の大きなものは何ですか?

大型ハドロン衝突型加速器のトンネル内にあるコンパクトミュオンソレノイド(CMS)検出器。2012年7月4日、CERNの科学者たちは、1960年代に最初に提案された素粒子であるヒッグス粒子の観測を確認しました。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

Un breve viaje espacial sobre conceptualizar el diseño

Complicarse la vida, mezclar churros con meninas (nada de ovejas) y encontrar valor en un trastero que adquiriste en una puja.

Un breve viaje espacial sobre conceptualizar el diseño

Bien. Hay un momento en toda salida al espacio exterior en el que de la tensión, la velocidad y las altas temperaturas derivadas del cruce de estratosfera a ionosfera se pasa a un momento de súbita calma, donde se despliega la vista completa del paisaje espacial que nos rodea.

Seguindo Todos os Protocolos (2022), de Fábio Leal

Seguindo Todos os Protocolos (2022), de Fábio Leal

Chico quer transar. Até aí, tudo bem.

多元宇宙—Junø

多元宇宙—Junø

チェーン間アカウントがJunoに登場します。異なるブロックチェーン間でスマートコントラクトの構成可能性と真の相互運用性を提供します。

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

1.ドラマを見た後、起業する考えはありますか?あなたのビジネスはボトルネックに遭遇しましたか?方向性がなくてわからない場合は、ドラマを追いかけて行くことを心からお勧めします。(?)ブラフではなく、最も完璧なビジネス例を隠すドラマがあります。2.ブレイキング・バッドとその弁護士ドラマ「ブレイキング・バッド」を見た友人たちは、演劇の中で、穏やかな表情で、弁護士のソウル・グッドマンに深く感銘を受けなければなりません。口を開けて、感覚の弱い傭兵の性格を持っています。道徳の面で、サル・グッドマンは無意識のうちに劇に欠かせない役割を果たし、彼自身のシリーズ「絶望的な弁護士」(ベター・コール・ソール)を生み出しました。ウェントウのテキストとビデオは、劇中のソウル・グッドマンのテレビコマーシャルです。製品(サービス)、競争戦略、市場ポジショニング、ブランド名、ターゲット顧客グループ、コミュニケーション軸から広告まで、サル・グッドマンの役割のビジネス設定は、「最低」と見なすことができる超超超超超超完全です。ブランドコミュニケーションのコスト」「変化」のモデル。なぜ?私の分析をご覧ください。3.ソウル・グッドマンの「事業戦略」1.基本情報ブランド名:Saul Goodman製品:法律相談サービス対象顧客:麻薬中毒、飲酒運転、事故など。法律知識の欠如は、一般的に公立弁護士にしか余裕がなく、真面目な弁護士も「特別な法律を持つ消費者」を避けます。恐れてはいけない「​​ニーズ」。コミュニケーションの主軸:この国のすべての男性、女性、子供は有罪判決を受けるまで無実だと思います。地域:アルバカーキ市スローガン:Thrallに電話したほうがいいです!(ベター・コール・ソール)広告:2つの可能性のある犯罪状況をシミュレートします+サウルの主張+サウルのスローガン2をより適切に呼び出します。

Language