web-dev-qa-db-ja.com

Selenium webdriver:navigator.webdriverフラグを変更してSeleniumの検出を防ぐ

Seleniumとchromeを使用して、Webサイトで非常に基本的なタスクを自動化しようとしていますが、何らかの理由でWebサイトはchrome 。Webサイトは、このような公開されたDOM変数に依存していると思われます https://stackoverflow.com/a/41904453/648236 は、Selenium駆動のブラウザーを検出します。

私の質問は、navigator.webdriverフラグをfalseにする方法はありますか?変更を加えた後、Seleniumソースを再コンパイルすることはできますが、リポジトリのどこにもNavigatorAutomationInformationソースが見つからないようです https://github.com/SeleniumHQ/Selenium

どんな助けも大歓迎です

追伸:私も https://w3c.github.io/webdriver/#interface から以下を試しました

Object.defineProperty(navigator, 'webdriver', {
    get: () => false,
  });

ただし、最初のページのロード後にのみプロパティが更新されます。スクリプトが実行される前に、サイトが変数を検出すると思います。

8
Ajanth

あなたはそれを見ました。あなたが参照した答えは、過去2年間に進化した2017W3C EditorのDraft状態を指していました。現在の実装では、次のことを厳密に説明しています。

webdriver-activeflagは、の場合、trueに設定されます。ユーザーエージェントremote controlの下にあり、最初はfalseに設定されています。

さらに、

Navigator includes NavigatorAutomationInformation;

次のことに注意してください。

NavigatorAutomationInformationinterfaceは、WorkerNavigatorで公開しないでください。

NavigatorAutomationInformationinterfaceは次のように定義されます:

interface mixin NavigatorAutomationInformation {
    readonly attribute boolean webdriver;
};

webdriver-activeflagが設定されている場合はtrueを返し、そうでない場合はfalseを返します。

最後に、navigator.webdriverは、WebDriverによって制御されていることをドキュメントに通知するために、協力するユーザーエージェントのための標準的な方法を定義します。自動化中に代替コードパスをトリガーできます。

これらのパラメーターを変更すると、navigationがブロックされ、WebDriverインスタンスが検出される場合があります。

4
DebanjanB

前(ブラウザコンソールウィンドウ内):

> navigator.webdriver
true

変更(セレン):

// C#
var options = new ChromeOptions();
options.AddExcludedArguments(new List<string>() { "enable-automation" });

// Python
options.add_experimental_option("excludeSwitches", ['enable-automation'])

後(ブラウザコンソールウィンドウで):

> navigator.webdriver
undefined
11
someone else