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,
});
ただし、最初のページのロード後にのみプロパティが更新されます。スクリプトが実行される前に、サイトが変数を検出すると思います。
あなたはそれを見ました。あなたが参照した答えは、過去2年間に進化した2017のW3C EditorのDraft状態を指していました。現在の実装では、次のことを厳密に説明しています。
webdriver-active
flagは、の場合、true
に設定されます。ユーザーエージェントはremote controlの下にあり、最初はfalse
に設定されています。
さらに、
Navigator includes NavigatorAutomationInformation;
次のことに注意してください。
NavigatorAutomationInformation
interfaceは、WorkerNavigatorで公開しないでください。
NavigatorAutomationInformation
interfaceは次のように定義されます:
interface mixin NavigatorAutomationInformation {
readonly attribute boolean webdriver;
};
webdriver-active
flagが設定されている場合はtrueを返し、そうでない場合はfalseを返します。
最後に、navigator.webdriver
は、WebDriverによって制御されていることをドキュメントに通知するために、協力するユーザーエージェントのための標準的な方法を定義します。自動化中に代替コードパスをトリガーできます。
これらのパラメーターを変更すると、navigationがブロックされ、WebDriverインスタンスが検出される場合があります。
前(ブラウザコンソールウィンドウ内):
> 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