From 93adbcf0ef96c1430b633002923468d98e29132b Mon Sep 17 00:00:00 2001 From: UltrafunkAmsterdam Date: Wed, 8 Feb 2023 17:08:44 +0100 Subject: [PATCH] 4.4.5 **patch to fix headless mode** -https://stackoverflow.com/a/73840130/7058266 -https://support.google.com/chrome/a/answer/7679408#hdlssMod110 thanks @mdmintz for the info --- undetected_chromedriver/__init__.py | 13 +++++++++---- undetected_chromedriver/patcher.py | 8 ++++---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/undetected_chromedriver/__init__.py b/undetected_chromedriver/__init__.py index 520106d..91e68d1 100644 --- a/undetected_chromedriver/__init__.py +++ b/undetected_chromedriver/__init__.py @@ -123,6 +123,7 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): use_subprocess=True, debug=False, no_sandbox=True, + **kw, ): """ @@ -286,6 +287,9 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): # see if a custom user profile is specified in options for arg in options.arguments: + if any([_ in arg for _ in ('--headless', 'headless')]): + options.arguments.remove(arg) + options.headless = True if "lang" in arg: m = re.search("(?:--)?lang(?:[ =])?(.*)", arg) try: @@ -354,9 +358,7 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): options.binary_location = ( browser_executable_path or find_chrome_executable() ) - self._delay = 3 - self.user_data_dir = user_data_dir self.keep_user_data_dir = keep_user_data_dir @@ -365,13 +367,16 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): if no_sandbox: options.arguments.extend(["--no-sandbox", "--test-type"]) if headless or options.headless: - options.headless = True + if self.patcher.version_main < 108: + options.add_argument('--headless=chrome') + elif self.patcher.version_main >= 108: + options.add_argument( '--headless=new' ) + options.add_argument("--window-size=1920,1080") options.add_argument("--start-maximized") options.add_argument("--no-sandbox") # fixes "could not connect to chrome" error when running # on linux using privileged user like root (which i don't recommend) - options.add_argument( "--log-level=%d" % log_level or divmod(logging.getLogger().getEffectiveLevel(), 10)[0] diff --git a/undetected_chromedriver/patcher.py b/undetected_chromedriver/patcher.py index af87e5e..6303905 100644 --- a/undetected_chromedriver/patcher.py +++ b/undetected_chromedriver/patcher.py @@ -48,6 +48,8 @@ class Patcher(object): d = "~/.undetected_chromedriver" data_path = os.path.abspath(os.path.expanduser(d)) + + def __init__(self, executable_path=None, force=False, version_main: int = 0): """ @@ -61,13 +63,13 @@ class Patcher(object): """ self.force = force - + self._custom_exe_path = False prefix = "undetected" if not os.path.exists(self.data_path): os.makedirs(self.data_path, exist_ok=True) - self.executable_path = executable_path + if not executable_path: self.executable_path = os.path.join( self.data_path, "_".join([prefix, self.exe_name]) @@ -85,8 +87,6 @@ class Patcher(object): os.path.join(".", self.executable_path) ) - self._custom_exe_path = False - if executable_path: self._custom_exe_path = True self.executable_path = executable_path