From 795365dbe49777832881569e81cc9a907c8b618a Mon Sep 17 00:00:00 2001 From: ilike2burnthing <59480337+ilike2burnthing@users.noreply.github.com> Date: Tue, 3 Jun 2025 05:38:06 +0100 Subject: [PATCH] Change from click to keys credit to @sh4dowb - #1497 --- src/flaresolverr_service.py | 40 ++++++------------------------------- 1 file changed, 6 insertions(+), 34 deletions(-) diff --git a/src/flaresolverr_service.py b/src/flaresolverr_service.py index cfc2088..a469bea 100644 --- a/src/flaresolverr_service.py +++ b/src/flaresolverr_service.py @@ -10,6 +10,7 @@ from func_timeout import FunctionTimedOut, func_timeout from selenium.common import TimeoutException from selenium.webdriver.chrome.webdriver import WebDriver from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.expected_conditions import ( presence_of_element_located, staleness_of, title_is) from selenium.webdriver.common.action_chains import ActionChains @@ -255,18 +256,9 @@ def _resolve_challenge(req: V1RequestBase, method: str) -> ChallengeResolutionT: def click_verify(driver: WebDriver): try: logging.debug("Try to find the Cloudflare verify checkbox...") - iframe = driver.find_element(By.XPATH, "//iframe[starts-with(@id, 'cf-chl-widget-')]") - driver.switch_to.frame(iframe) - checkbox = driver.find_element( - by=By.XPATH, - value='//*[@id="content"]/div/div/label/input', - ) - if checkbox: - actions = ActionChains(driver) - actions.move_to_element_with_offset(checkbox, 5, 7) - actions.click(checkbox) - actions.perform() - logging.debug("Cloudflare verify checkbox found and clicked!") + actions = ActionChains(driver) + actions.pause(5).send_keys(Keys.TAB).pause(1).send_keys(Keys.SPACE).perform() + logging.debug("Cloudflare verify checkbox found and clicked!") except Exception: logging.debug("Cloudflare verify checkbox not found on the page.") finally: @@ -290,22 +282,6 @@ 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 @@ -317,8 +293,7 @@ def _evil_logic(req: V1RequestBase, driver: WebDriver, method: str) -> Challenge if method == 'POST': _post_request(req, driver) else: - access_page(driver, req.url) - driver = get_correct_window(driver) + driver.get(req.url) # set cookies if required if req.cookies is not None and len(req.cookies) > 0: @@ -330,8 +305,7 @@ def _evil_logic(req: V1RequestBase, driver: WebDriver, method: str) -> Challenge if method == 'POST': _post_request(req, driver) else: - access_page(driver, req.url) - driver = get_correct_window(driver) + driver.get(req.url) # wait for the page if utils.get_config_log_html(): @@ -451,5 +425,3 @@ def _post_request(req: V1RequestBase, driver: WebDriver): """ driver.get("data:text/html;charset=utf-8,{html_content}".format(html_content=html_content)) - driver.start_session() - driver.start_session() # required to bypass Cloudflare