From 32960b6f77d53a93238efd38b21bf59b8907d6be Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Wed, 12 Feb 2025 22:28:57 -0500 Subject: [PATCH 1/4] Update CDP Mode --- seleniumbase/undetected/__init__.py | 26 ++++++++++++++++---------- seleniumbase/undetected/webelement.py | 5 +++-- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/seleniumbase/undetected/__init__.py b/seleniumbase/undetected/__init__.py index 83cff37b382..4a6827ea9ef 100644 --- a/seleniumbase/undetected/__init__.py +++ b/seleniumbase/undetected/__init__.py @@ -454,17 +454,20 @@ def reconnect(self, timeout=0.1): self.start_session() time.sleep(0.0075) with suppress(Exception): - for i in range(5): - if self.current_url.startswith("chrome-extension://"): + for window_handle in self.window_handles: + self.switch_to.window(window_handle) + if self.current_url.startswith( + "chrome-extension://" + ): self.close() if self.service.is_connectable(): self.stop_client() self.service.stop() self.service.start() self.start_session() - time.sleep(0.0075) - else: - break + time.sleep(0.003) + with suppress(Exception): + self.switch_to.window(self.window_handles[-1]) self._is_connected = True def disconnect(self): @@ -487,17 +490,20 @@ def connect(self): self.start_session() time.sleep(0.0075) with suppress(Exception): - for i in range(5): - if self.current_url.startswith("chrome-extension://"): + for window_handle in self.window_handles: + self.switch_to.window(window_handle) + if self.current_url.startswith( + "chrome-extension://" + ): self.close() if self.service.is_connectable(): self.stop_client() self.service.stop() self.service.start() self.start_session() - time.sleep(0.0075) - else: - break + time.sleep(0.003) + with suppress(Exception): + self.switch_to.window(self.window_handles[-1]) self._is_connected = True def start_session(self, capabilities=None): diff --git a/seleniumbase/undetected/webelement.py b/seleniumbase/undetected/webelement.py index ee252e56bc6..f0d2025321d 100644 --- a/seleniumbase/undetected/webelement.py +++ b/seleniumbase/undetected/webelement.py @@ -26,10 +26,11 @@ def uc_click( driver.js_click(selector, by=by, timeout=1) else: super().click() + driver = self._parent if not reconnect_time: - self._parent.reconnect(0.5) + driver.reconnect(0.5) else: - self._parent.reconnect(reconnect_time) + driver.reconnect(reconnect_time) def uc_reconnect(self, reconnect_time=None): if not reconnect_time: From d028e3be820fcc304f9466c9b6c3e3261ac5ed93 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Wed, 12 Feb 2025 22:29:43 -0500 Subject: [PATCH 2/4] Update examples --- examples/boilerplates/samples/google_test.py | 2 +- examples/boilerplates/samples/test_page_objects.py | 2 +- examples/cdp_mode/raw_priceline.py | 2 +- examples/presenter/uc_presentation_4.py | 2 +- examples/raw_google.py | 2 +- examples/raw_gui_click.py | 4 ++-- examples/raw_pyautogui.py | 4 ++-- examples/test_cdp_ad_blocking.py | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/boilerplates/samples/google_test.py b/examples/boilerplates/samples/google_test.py index 7ffd3cda38a..edb89ffc71d 100644 --- a/examples/boilerplates/samples/google_test.py +++ b/examples/boilerplates/samples/google_test.py @@ -4,7 +4,7 @@ from .google_objects import HomePage, ResultsPage except Exception: from google_objects import HomePage, ResultsPage - BaseCase.main(__name__, __file__) + BaseCase.main(__name__, __file__, "--uc") class GoogleTests(BaseCase): diff --git a/examples/boilerplates/samples/test_page_objects.py b/examples/boilerplates/samples/test_page_objects.py index 6983b31735b..c485fd1b893 100644 --- a/examples/boilerplates/samples/test_page_objects.py +++ b/examples/boilerplates/samples/test_page_objects.py @@ -1,6 +1,6 @@ """An example using the Classic Page Object Model.""" from seleniumbase import BaseCase -BaseCase.main(__name__, __file__) +BaseCase.main(__name__, __file__, "--uc") class GooglePage: diff --git a/examples/cdp_mode/raw_priceline.py b/examples/cdp_mode/raw_priceline.py index 6b604cb45fd..bac866019a3 100644 --- a/examples/cdp_mode/raw_priceline.py +++ b/examples/cdp_mode/raw_priceline.py @@ -27,7 +27,7 @@ sb.sleep(0.8) for y in range(1, 9): sb.scroll_to_y(y * 400) - sb.sleep(1.25) + sb.sleep(0.75) hotel_names = sb.find_elements('a[data-autobot-element-id*="HOTEL_NAME"]') hotel_prices = sb.find_elements('span[font-size="4,,,5"]') print("Priceline Hotels in %s:" % location) diff --git a/examples/presenter/uc_presentation_4.py b/examples/presenter/uc_presentation_4.py index d9cb619d2f9..dbba53dad8b 100644 --- a/examples/presenter/uc_presentation_4.py +++ b/examples/presenter/uc_presentation_4.py @@ -796,7 +796,7 @@ def test_presentation_4(self): sb.sleep(0.8) for y in range(1, 9): sb.scroll_to_y(y * 400) - sb.sleep(1.25) + sb.sleep(0.75) hotel_names = sb.find_elements( 'a[data-autobot-element-id*="HOTEL_NAME"]' ) diff --git a/examples/raw_google.py b/examples/raw_google.py index a37faae637c..48032236eea 100644 --- a/examples/raw_google.py +++ b/examples/raw_google.py @@ -1,6 +1,6 @@ from seleniumbase import SB -with SB(test=True) as sb: +with SB(test=True, uc=True) as sb: sb.open("https://google.com/ncr") sb.type('[title="Search"]', "SeleniumBase GitHub page\n") sb.click('[href*="github.com/seleniumbase/"]') diff --git a/examples/raw_gui_click.py b/examples/raw_gui_click.py index acb2d12304a..614aada2345 100644 --- a/examples/raw_gui_click.py +++ b/examples/raw_gui_click.py @@ -1,8 +1,8 @@ import sys from seleniumbase import SB -# An incomplete UserAgent forces CAPTCHA-solving on macOS -agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0" +# An bad UserAgent forces CAPTCHA-solving on macOS +agent = "cool" if "linux" in sys.platform or "win32" in sys.platform: agent = None # Use the default UserAgent diff --git a/examples/raw_pyautogui.py b/examples/raw_pyautogui.py index bbf8b4f57f7..5e3bca507ae 100644 --- a/examples/raw_pyautogui.py +++ b/examples/raw_pyautogui.py @@ -1,8 +1,8 @@ import sys from seleniumbase import SB -# An incomplete UserAgent forces CAPTCHA-solving on macOS -agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0" +# An bad UserAgent forces CAPTCHA-solving on macOS +agent = "cool" if "linux" in sys.platform or "win32" in sys.platform: agent = None # Use the default UserAgent diff --git a/examples/test_cdp_ad_blocking.py b/examples/test_cdp_ad_blocking.py index 3ff4648df5e..0dea44296da 100644 --- a/examples/test_cdp_ad_blocking.py +++ b/examples/test_cdp_ad_blocking.py @@ -5,8 +5,8 @@ class CDPNetworkBlockingTests(BaseCase): def test_cdp_network_blocking(self): self.open("about:blank") - if not self.is_chromium(): - message = "This test is only for Chromium browsers!" + if self._reuse_session or not self.is_chromium(): + message = "Skipping test if reusing session or not Chromium!" print(message) self.skip(message) self.execute_cdp_cmd( From 31fccae0cb741f66017940e566c35e7051ad85aa Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Wed, 12 Feb 2025 22:29:59 -0500 Subject: [PATCH 3/4] Refresh mkdocs dependencies --- mkdocs_build/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs_build/requirements.txt b/mkdocs_build/requirements.txt index b8b8dc07c39..fc5cc0f18e8 100644 --- a/mkdocs_build/requirements.txt +++ b/mkdocs_build/requirements.txt @@ -14,7 +14,7 @@ pathspec==0.12.1 Babel==2.17.0 paginate==0.5.7 mkdocs==1.6.1 -mkdocs-material==9.6.3 +mkdocs-material==9.6.4 mkdocs-exclude-search==0.6.6 mkdocs-simple-hooks==0.1.5 mkdocs-material-extensions==1.3.1 From 23d7dea74b81509b7a0b69feb484ac25d9fb022b Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Wed, 12 Feb 2025 22:30:20 -0500 Subject: [PATCH 4/4] Version 4.34.14 --- seleniumbase/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index efed7ed2220..867034d70c4 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.34.13" +__version__ = "4.34.14"