From 1019b488f8804d266d8a806271c9935ed624bf3d Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Mon, 24 Feb 2025 16:05:05 -0500 Subject: [PATCH 1/5] Update CDP Mode --- seleniumbase/core/sb_cdp.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/seleniumbase/core/sb_cdp.py b/seleniumbase/core/sb_cdp.py index d8388022174..c5c4a3fa8e3 100644 --- a/seleniumbase/core/sb_cdp.py +++ b/seleniumbase/core/sb_cdp.py @@ -288,7 +288,7 @@ def find_elements_by_text(self, text, tag_name=None): return updated_elements def select(self, selector, timeout=None): - """Similar to find_element(), but without text-based search.""" + """Similar to find_element().""" if not timeout: timeout = settings.SMALL_TIMEOUT self.__add_light_pause() @@ -297,12 +297,25 @@ def select(self, selector, timeout=None): tag_name = selector.split(":contains(")[0].split(" ")[-1] text = selector.split(":contains(")[1].split(")")[0][1:-1] with suppress(Exception): + new_timeout = timeout + if new_timeout < 1: + new_timeout = 1 self.loop.run_until_complete( - self.page.select(tag_name, timeout=5) + self.page.select(tag_name, timeout=new_timeout) ) - self.loop.run_until_complete(self.page.find(text, timeout=5)) - element = self.find_elements_by_text(text, tag_name=tag_name)[0] - return self.__add_sync_methods(element) + self.loop.run_until_complete( + self.page.find(text, timeout=new_timeout) + ) + elements = self.find_elements_by_text(text, tag_name=tag_name) + if not elements: + plural = "s" + if timeout == 1: + plural = "" + msg = "\n Element {%s} was not found after %s second%s!" + message = msg % (selector, timeout, plural) + raise Exception(message) + element = self.__add_sync_methods(elements[0]) + return element failure = False try: element = self.loop.run_until_complete( @@ -313,11 +326,8 @@ def select(self, selector, timeout=None): plural = "s" if timeout == 1: plural = "" - message = "\n Element {%s} was not found after %s second%s!" % ( - selector, - timeout, - plural, - ) + msg = "\n Element {%s} was not found after %s second%s!" + message = msg % (selector, timeout, plural) if failure: raise Exception(message) element = self.__add_sync_methods(element) From 4b249b8bdec7009b4c43d2bc0da44ab3d799fba3 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Mon, 24 Feb 2025 16:05:59 -0500 Subject: [PATCH 2/5] Fix issue with post_message(message) --- seleniumbase/fixtures/js_utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/seleniumbase/fixtures/js_utils.py b/seleniumbase/fixtures/js_utils.py index 52a6e0cad78..18400189c4f 100644 --- a/seleniumbase/fixtures/js_utils.py +++ b/seleniumbase/fixtures/js_utils.py @@ -950,6 +950,8 @@ def post_message(driver, message, msg_dur=None, style="info"): set_messenger_theme(driver) try: execute_script(driver, messenger_script) + except TypeError: + pass except Exception: time.sleep(0.17) activate_messenger(driver) From b8d308d3b4bf1b898dee070a277f65070da90dac Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Mon, 24 Feb 2025 16:07:22 -0500 Subject: [PATCH 3/5] Fix issue with "pytest -h" --- seleniumbase/plugins/pytest_plugin.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/seleniumbase/plugins/pytest_plugin.py b/seleniumbase/plugins/pytest_plugin.py index 9dceda430e9..a9b4897793c 100644 --- a/seleniumbase/plugins/pytest_plugin.py +++ b/seleniumbase/plugins/pytest_plugin.py @@ -2496,6 +2496,9 @@ def pytest_unconfigure(config): """This runs after all tests have completed with pytest.""" if "--co" in sys_argv or "--collect-only" in sys_argv: return + reporter = config.pluginmanager.get_plugin("terminalreporter") + if not hasattr(reporter, "_sessionstarttime"): + return if hasattr(sb_config, "_multithreaded") and sb_config._multithreaded: import fasteners From 25365eface9e84091dfe09ec067a47afb6267628 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Mon, 24 Feb 2025 16:07:45 -0500 Subject: [PATCH 4/5] Update CDP Mode examples --- examples/cdp_mode/ReadMe.md | 2 +- examples/cdp_mode/raw_cf.py | 6 +++--- examples/cdp_mode/raw_pokemon.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/cdp_mode/ReadMe.md b/examples/cdp_mode/ReadMe.md index 2186fa903e4..48d7c46eb72 100644 --- a/examples/cdp_mode/ReadMe.md +++ b/examples/cdp_mode/ReadMe.md @@ -144,7 +144,7 @@ with SB(uc=True, test=True, locale_code="en", ad_block=True) as sb: sb.sleep(0.5) sb.scroll_into_view("a#advSearch") sb.sleep(0.5) - sb.cdp.mouse_click("a#advSearch") + sb.cdp.click("a#advSearch") sb.sleep(1.2) sb.cdp.click('img[src*="img/pokedex/detail/025.png"]') sb.cdp.assert_text("Pikachu", 'div[class*="title"]') diff --git a/examples/cdp_mode/raw_cf.py b/examples/cdp_mode/raw_cf.py index cb4652f9fa8..af11c133e92 100644 --- a/examples/cdp_mode/raw_cf.py +++ b/examples/cdp_mode/raw_cf.py @@ -1,16 +1,16 @@ """Using CDP Mode with PyAutoGUI to bypass CAPTCHAs.""" from seleniumbase import SB -with SB(uc=True, test=True, locale_code="en", incognito=True) as sb: +with SB(uc=True, test=True, locale_code="en", guest=True) as sb: url = "https://www.cloudflare.com/login" sb.activate_cdp_mode(url) sb.sleep(3) sb.uc_gui_handle_captcha() # PyAutoGUI press Tab and Spacebar sb.sleep(2) -with SB(uc=True, test=True, locale_code="en", incognito=True) as sb: +with SB(uc=True, test=True, locale_code="en", guest=True) as sb: url = "https://www.cloudflare.com/login" sb.activate_cdp_mode(url) - sb.sleep(2) + sb.sleep(3) sb.uc_gui_click_captcha() # PyAutoGUI click. (Linux needs it) sb.sleep(2) diff --git a/examples/cdp_mode/raw_pokemon.py b/examples/cdp_mode/raw_pokemon.py index 38d29e85972..4aecd0c19ee 100644 --- a/examples/cdp_mode/raw_pokemon.py +++ b/examples/cdp_mode/raw_pokemon.py @@ -14,7 +14,7 @@ sb.sleep(0.5) sb.scroll_into_view("a#advSearch") sb.sleep(0.5) - sb.cdp.mouse_click("a#advSearch") + sb.cdp.click("a#advSearch") sb.sleep(1.2) sb.cdp.click('img[src*="img/pokedex/detail/025.png"]') sb.cdp.assert_text("Pikachu", 'div[class*="title"]') From 5d57b3e663746c60bdd00bbb7d8d00a50951300e Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Mon, 24 Feb 2025 16:07:58 -0500 Subject: [PATCH 5/5] Version 4.35.1 --- seleniumbase/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index ff2fa154b90..9cf6d36f760 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.35.0" +__version__ = "4.35.1"