From 18ef213d96db7a3668be5bc2b1d5069e1715a493 Mon Sep 17 00:00:00 2001 From: ilike2burnthing <59480337+ilike2burnthing@users.noreply.github.com> Date: Sun, 21 Apr 2024 02:47:34 +0100 Subject: [PATCH 1/2] Update utils.py --- src/utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/utils.py b/src/utils.py index 79ccf87..a92f6e5 100644 --- a/src/utils.py +++ b/src/utils.py @@ -136,6 +136,9 @@ def get_webdriver(proxy: dict = None) -> WebDriver: # https://github.com/microsoft/vscode/issues/127800#issuecomment-873342069 # https://peter.sh/experiments/chromium-command-line-switches/#use-gl options.add_argument('--use-gl=swiftshader') + # required to bypass Cloudflare + # https://github.com/FlareSolverr/FlareSolverr/issues/1036 + options.add_argument("--disable-popup-blocking") language = os.environ.get('LANG', None) if language is not None: @@ -165,8 +168,6 @@ 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 From 4c486320946185cccaa1f7eedca6b5cb69585cab Mon Sep 17 00:00:00 2001 From: ilike2burnthing <59480337+ilike2burnthing@users.noreply.github.com> Date: Sun, 21 Apr 2024 02:48:36 +0100 Subject: [PATCH 2/2] Update flaresolverr_service.py --- src/flaresolverr_service.py | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/flaresolverr_service.py b/src/flaresolverr_service.py index 0987fed..68a68ca 100644 --- a/src/flaresolverr_service.py +++ b/src/flaresolverr_service.py @@ -287,20 +287,10 @@ 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: @@ -315,7 +305,6 @@ def _evil_logic(req: V1RequestBase, driver: WebDriver, method: str) -> Challenge _post_request(req, driver) else: 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: @@ -328,7 +317,6 @@ def _evil_logic(req: V1RequestBase, driver: WebDriver, method: str) -> Challenge _post_request(req, driver) else: access_page(driver, req.url) - driver = get_correct_window(driver) # wait for the page if utils.get_config_log_html(): @@ -387,6 +375,10 @@ def _evil_logic(req: V1RequestBase, driver: WebDriver, method: str) -> Challenge logging.debug("Timeout waiting for selector") click_verify(driver) + driver.execute_script(f'window.open("{req.url}", "_blank");') + time.sleep(3) + driver.close() + driver.switch_to.window(window_name=driver.window_handles[0]) # update the html (cloudflare reloads the page every 5 s) html_element = driver.find_element(By.TAG_NAME, "html") @@ -449,4 +441,3 @@ 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