diff --git a/examples/cdp_mode/raw_cdp_copilot.py b/examples/cdp_mode/raw_cdp_copilot.py index 03885363ac6..af2addac826 100644 --- a/examples/cdp_mode/raw_cdp_copilot.py +++ b/examples/cdp_mode/raw_cdp_copilot.py @@ -4,7 +4,7 @@ sb = sb_cdp.Chrome(url, locale="en", guest=True) textarea = "textarea#userInput" sb.wait_for_element(textarea) -sb.sleep(1.5) +sb.sleep(1.3) sb.click_if_visible('[aria-label="Dismiss"]') sb.sleep(0.5) sb.click('button[data-testid*="chat-mode-"]') diff --git a/examples/cdp_mode/raw_cdp_kohls.py b/examples/cdp_mode/raw_cdp_kohls.py deleted file mode 100644 index 290eed5054b..00000000000 --- a/examples/cdp_mode/raw_cdp_kohls.py +++ /dev/null @@ -1,37 +0,0 @@ -from seleniumbase import sb_cdp - -url = "https://www.kohls.com/" -sb = sb_cdp.Chrome(url, locale="en", ad_block=True) -sb.sleep(2.8) -search = "Mickey Mouse Blanket" -req_1 = "Mickey" -req_2 = "Blanket" -sb.press_keys('input[name="search"]', search + "\n") -sb.sleep(5) -item_selector = 'div[data-testid*="wallet-wrapper"]' -if not sb.is_element_present(item_selector): - item_selector = "li.products_grid" -for item in sb.find_elements(item_selector): - if "Sponsored" in item.text: - item.remove_from_dom() -sb.remove_elements("#tce-sticky-wrapper") -sb.remove_elements("li.sponsored-product") -sb.remove_elements("#tce-dec-ces-3-banner") -print('*** Kohls Search for "%s":' % search) -print(' (Results must contain "%s" and "%s".)' % (req_1, req_2)) -title_selector = "div.prod_nameBlock p" -if not sb.is_element_present(title_selector): - title_selector = 'a[class*="sm:text"][href*="/product/"]' -for item in sb.find_elements(title_selector): - if item: - item.flash(color="44CC88") - title = item.text - if title: - if ( - req_1.lower() in title.lower() - and req_2.lower() in title.lower() - ): - print("* " + title) - sb.sleep(0.1) -sb.sleep(1) -sb.driver.stop() diff --git a/examples/cdp_mode/raw_copilot.py b/examples/cdp_mode/raw_copilot.py index 90236c419cd..009033000bf 100644 --- a/examples/cdp_mode/raw_copilot.py +++ b/examples/cdp_mode/raw_copilot.py @@ -5,7 +5,7 @@ sb.activate_cdp_mode(url) textarea = "textarea#userInput" sb.wait_for_element(textarea) - sb.sleep(1.5) + sb.sleep(1.3) sb.click_if_visible('[aria-label="Dismiss"]') sb.sleep(0.5) sb.click('button[data-testid*="chat-mode-"]') diff --git a/examples/cdp_mode/raw_driver.py b/examples/cdp_mode/raw_driver.py index 2faa4c862d0..87e359ba357 100644 --- a/examples/cdp_mode/raw_driver.py +++ b/examples/cdp_mode/raw_driver.py @@ -5,7 +5,7 @@ atexit.register(driver.quit) url = "www.planetminecraft.com/account" driver.activate_cdp_mode(url) -driver.sleep(1) +driver.sleep(2) driver.solve_captcha() driver.wait_for_element_absent("input[disabled]") driver.sleep(2) diff --git a/examples/cdp_mode/raw_planetmc.py b/examples/cdp_mode/raw_planetmc.py index 0e00de1c645..ab1c0e1fbd9 100644 --- a/examples/cdp_mode/raw_planetmc.py +++ b/examples/cdp_mode/raw_planetmc.py @@ -3,7 +3,7 @@ with SB(uc=True, test=True, guest=True) as sb: url = "www.planetminecraft.com/account/sign_in/" sb.activate_cdp_mode(url) - sb.sleep(2.5) + sb.sleep(2) sb.solve_captcha() sb.wait_for_element_absent("input[disabled]") sb.sleep(2) diff --git a/requirements.txt b/requirements.txt index fe4e41d3b43..3fda0cb765f 100755 --- a/requirements.txt +++ b/requirements.txt @@ -7,14 +7,14 @@ wheel>=0.45.1 attrs~=25.3.0;python_version<"3.9" attrs>=25.4.0;python_version>="3.9" certifi>=2025.11.12 -exceptiongroup>=1.3.0 +exceptiongroup>=1.3.1 websockets~=13.1;python_version<"3.9" websockets>=15.0.1;python_version>="3.9" filelock~=3.16.1;python_version<"3.9" filelock~=3.19.1;python_version>="3.9" and python_version<"3.10" filelock>=3.20.0;python_version>="3.10" fasteners>=0.20 -mycdp>=1.3.0 +mycdp>=1.3.1 pynose>=1.5.5 platformdirs~=4.3.6;python_version<"3.9" platformdirs~=4.4.0;python_version>="3.9" and python_version<"3.10" @@ -49,7 +49,7 @@ trio>=0.31.0,<1;python_version>="3.9" and python_version<"3.10" trio>=0.32.0,<1;python_version>="3.10" trio-websocket~=0.12.2 wsproto==1.2.0;python_version<"3.10" -wsproto==1.3.1;python_version>="3.10" +wsproto~=1.3.2;python_version>="3.10" websocket-client~=1.8.0;python_version<"3.9" websocket-client~=1.9.0;python_version>="3.9" selenium==4.27.1;python_version<"3.9" diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index 2e736d98186..f25699b531a 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.44.16" +__version__ = "4.44.17" diff --git a/seleniumbase/core/sb_cdp.py b/seleniumbase/core/sb_cdp.py index 0d04f488b0a..4731559950d 100644 --- a/seleniumbase/core/sb_cdp.py +++ b/seleniumbase/core/sb_cdp.py @@ -115,7 +115,18 @@ def get(self, url, **kwargs): driver = self.driver if hasattr(driver, "cdp_base"): driver = driver.cdp_base - self.loop.run_until_complete(self.page.get(url, **kwargs)) + load_timeout = 60.0 + wait_timeout = 30.0 + if hasattr(sb_config, "_cdp_proxy") and sb_config._cdp_proxy: + load_timeout = 90.0 + wait_timeout = 45.0 + try: + task = self.page.get(url, **kwargs) + self.loop.run_until_complete( + asyncio.wait_for(task, timeout=load_timeout) + ) + except asyncio.TimeoutError: + print("Timeout loading %s" % url) url_protocol = url.split(":")[0] safe_url = True if url_protocol not in ["about", "data", "chrome"]: @@ -127,7 +138,14 @@ def get(self, url, **kwargs): else: time.sleep(0.012) self.__slow_mode_pause_if_set() - self.loop.run_until_complete(self.page.wait()) + try: + self.loop.run_until_complete( + asyncio.wait_for(self.page.wait(), timeout=wait_timeout) + ) + except asyncio.TimeoutError: + pass + except Exception: + pass def open(self, url, **kwargs): self.get(url, **kwargs) @@ -2909,4 +2927,15 @@ def __init__(self, url=None, **kwargs): driver = cdp_util.start_sync(**kwargs) loop = asyncio.new_event_loop() page = loop.run_until_complete(driver.get(url)) + wait_timeout = 30.0 + if hasattr(sb_config, "_cdp_proxy") and sb_config._cdp_proxy: + wait_timeout = 45.0 + try: + loop.run_until_complete( + asyncio.wait_for(page.wait(), timeout=wait_timeout) + ) + except asyncio.TimeoutError: + pass + except Exception: + pass super().__init__(loop, page, driver) diff --git a/setup.py b/setup.py index d6a1475b0ef..e54afa365fc 100755 --- a/setup.py +++ b/setup.py @@ -156,14 +156,14 @@ 'attrs~=25.3.0;python_version<"3.9"', 'attrs>=25.4.0;python_version>="3.9"', "certifi>=2025.11.12", - "exceptiongroup>=1.3.0", + "exceptiongroup>=1.3.1", 'websockets~=13.1;python_version<"3.9"', 'websockets>=15.0.1;python_version>="3.9"', 'filelock~=3.16.1;python_version<"3.9"', 'filelock~=3.19.1;python_version>="3.9" and python_version<"3.10"', 'filelock>=3.20.0;python_version>="3.10"', 'fasteners>=0.20', - "mycdp>=1.3.0", + "mycdp>=1.3.1", "pynose>=1.5.5", 'platformdirs~=4.3.6;python_version<"3.9"', 'platformdirs~=4.4.0;python_version>="3.9" and python_version<"3.10"', @@ -198,7 +198,7 @@ 'trio>=0.32.0,<1;python_version>="3.10"', 'trio-websocket~=0.12.2', 'wsproto==1.2.0;python_version<"3.10"', - 'wsproto==1.3.1;python_version>="3.10"', + 'wsproto~=1.3.2;python_version>="3.10"', 'websocket-client~=1.8.0;python_version<"3.9"', 'websocket-client~=1.9.0;python_version>="3.9"', 'selenium==4.27.1;python_version<"3.9"',