diff --git a/seleniumbase/core/browser_launcher.py b/seleniumbase/core/browser_launcher.py index 4c212fb5..760d6a12 100644 --- a/seleniumbase/core/browser_launcher.py +++ b/seleniumbase/core/browser_launcher.py @@ -168,6 +168,32 @@ def get_uc_driver_version(): return uc_driver_version +def has_cf(text): + if ( + "Just a moment..." in text + or 'id="challenge-error-text"' in text + or 'action="/?__cf_chl_f_tk' in text + or 'id="challenge-form"' in text + or "window._cf_chl_opt" in text + ): + return True + return False + + +def uc_open(driver, url): + if ( + (url.startswith("http:") or url.startswith("https:")) + and has_cf(requests_get(url).text) + ): + driver.execute_script('window.open("%s","_blank");' % url) + time.sleep(2.75) + driver.execute_script("window.close();") + driver.switch_to.window(driver.window_handles[-1]) + else: + driver.open(url) # The original one + return None + + def edgedriver_on_path(): return os.path.exists(LOCAL_EDGEDRIVER) @@ -742,6 +768,9 @@ def _set_chrome_options( chrome_options.add_argument("--use-gl=swiftshader") elif not is_using_uc(undetectable, browser_name): chrome_options.add_argument("--disable-gpu") + if not IS_LINUX and is_using_uc(undetectable, browser_name): + chrome_options.add_argument("--disable-dev-shm-usage") + chrome_options.add_argument("--disable-application-cache") if IS_LINUX: chrome_options.add_argument("--disable-dev-shm-usage") if is_using_uc(undetectable, browser_name): @@ -3008,6 +3037,7 @@ def get_local_driver( or not IS_LINUX or is_using_uc(undetectable, browser_name) ): + uc_activated = False try: if ( os.path.exists(LOCAL_CHROMEDRIVER) @@ -3051,6 +3081,7 @@ def get_local_driver( version_main=uc_chrome_version, use_subprocess=True, # Always! ) + uc_activated = True except URLError as e: if cert in e.args[0] and IS_MAC: mac_certificate_error = True @@ -3082,6 +3113,7 @@ def get_local_driver( version_main=uc_chrome_version, use_subprocess=True, # Always! ) + uc_activated = True else: service = ChromeService( executable_path=LOCAL_CHROMEDRIVER, @@ -3246,6 +3278,9 @@ def get_local_driver( service_args=["--disable-build-check"], options=chrome_options, ) + driver.open = driver.get # Save copy of original + if uc_activated: + driver.get = lambda url: uc_open(driver, url) return driver else: # Running headless on Linux (and not using --uc) try: