diff --git a/setup.py b/setup.py index b6847a1..40dd0e1 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ from setuptools import setup setup( name="undetected-chromedriver", - version="1.4.0", + version="1.4.1", packages=["undetected_chromedriver"], install_requires=["selenium",], url="https://github.com/ultrafunkamsterdam/undetected_chromedriver", diff --git a/undetected_chromedriver/__init__.py b/undetected_chromedriver/__init__.py index 1ae4686..074c53d 100644 --- a/undetected_chromedriver/__init__.py +++ b/undetected_chromedriver/__init__.py @@ -49,26 +49,37 @@ class Chrome: kwargs["options"] = ChromeOptions() instance = object.__new__(_Chrome) instance.__init__(*args, **kwargs) - instance.execute_cdp_cmd( - "Page.addScriptToEvaluateOnNewDocument", - { - "source": """ - Object.defineProperty(window, 'navigator', { - value: new Proxy(navigator, { - has: (target, key) => (key === 'webdriver' ? false : key in target), - get: (target, key) => - key === 'webdriver' - ? undefined - : typeof target[key] === 'function' - ? target[key].bind(target) - : target[key] - }) - }); - """ - + "console.dir = console.log = function(){};" - if not enable_console_log else '' - }, - ) + + instance._orig_get = instance.get + + def _get_wrapped(*args, **kwargs): + if instance.execute_script("return navigator.webdriver"): + instance.execute_cdp_cmd( + + "Page.addScriptToEvaluateOnNewDocument", + {"source": """ + + Object.defineProperty(window, 'navigator', { + value: new Proxy(navigator, { + has: (target, key) => (key === 'webdriver' ? false : key in target), + get: (target, key) => + key === 'webdriver' + ? undefined + : typeof target[key] === 'function' + ? target[key].bind(target) + : target[key] + }) + }); + + (function () { + }) (); + + """ + ("console.log = console.dir = console.error = function(){};" if not enable_console_log else '' ) } + ) + return instance._orig_get(*args, **kwargs) + + instance.get = _get_wrapped + original_user_agent_string = instance.execute_script( "return navigator.userAgent" ) @@ -92,6 +103,7 @@ class ChromeOptions: instance.add_argument("start-maximized") instance.add_experimental_option("excludeSwitches", ["enable-automation"]) instance.add_experimental_option("useAutomationExtension", False) + instance.add_argument("--disable-blink-features=AutomationControlled"); logger.info(f"starting undetected_chromedriver.ChromeOptions({args}, {kwargs})") return instance