From 800866d03390c70c14c4caa0955080284ca3b604 Mon Sep 17 00:00:00 2001 From: Tadas Gedgaudas <83356979+tadasgedgaudas@users.noreply.github.com> Date: Wed, 21 Feb 2024 01:41:02 +0200 Subject: [PATCH] Fix looping challenges. #1036 (#1065) Co-authored-by: Tadas Gedgaudas Co-authored-by: ilike2burnthing <59480337+ilike2burnthing@users.noreply.github.com> --- src/flaresolverr_service.py | 28 ++++++++++++++++++++++------ src/utils.py | 2 ++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/flaresolverr_service.py b/src/flaresolverr_service.py index 6cef3e4..0987fed 100644 --- a/src/flaresolverr_service.py +++ b/src/flaresolverr_service.py @@ -287,20 +287,35 @@ def click_verify(driver: WebDriver): time.sleep(2) +def get_correct_window(driver: WebDriver) -> WebDriver: + if len(driver.window_handles) > 1: + for window_handle in driver.window_handles: + driver.switch_to.window(window_handle) + current_url = driver.current_url + if not current_url.startswith("devtools://devtools"): + return driver + return driver + + +def access_page(driver: WebDriver, url: str) -> None: + driver.get(url) + driver.start_session() + driver.start_session() # required to bypass Cloudflare + + def _evil_logic(req: V1RequestBase, driver: WebDriver, method: str) -> ChallengeResolutionT: res = ChallengeResolutionT({}) res.status = STATUS_OK res.message = "" + # navigate to the page logging.debug(f'Navigating to... {req.url}') - driver.get(req.url) - driver.start_session() # required to bypass Cloudflare if method == 'POST': _post_request(req, driver) else: - driver.get(req.url) - driver.start_session() # required to bypass Cloudflare + access_page(driver, req.url) + driver = get_correct_window(driver) # set cookies if required if req.cookies is not None and len(req.cookies) > 0: @@ -312,8 +327,8 @@ def _evil_logic(req: V1RequestBase, driver: WebDriver, method: str) -> Challenge if method == 'POST': _post_request(req, driver) else: - driver.get(req.url) - driver.start_session() # required to bypass Cloudflare + access_page(driver, req.url) + driver = get_correct_window(driver) # wait for the page if utils.get_config_log_html(): @@ -433,4 +448,5 @@ def _post_request(req: V1RequestBase, driver: WebDriver): """ driver.get("data:text/html;charset=utf-8," + html_content) + driver.start_session() driver.start_session() # required to bypass Cloudflare diff --git a/src/utils.py b/src/utils.py index 3672511..b812387 100644 --- a/src/utils.py +++ b/src/utils.py @@ -164,6 +164,8 @@ def get_webdriver(proxy: dict = None) -> WebDriver: # For normal headless mode: # options.add_argument('--headless') + options.add_argument("--auto-open-devtools-for-tabs") + # if we are inside the Docker container, we avoid downloading the driver driver_exe_path = None version_main = None