From 92a9768475161ecee061d48df6df683f020aef1e Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Thu, 25 Sep 2025 18:28:06 -0400 Subject: [PATCH 1/4] Fix uc_gui_click_captcha() on Windows --- seleniumbase/core/browser_launcher.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/seleniumbase/core/browser_launcher.py b/seleniumbase/core/browser_launcher.py index cebfb54a993..1e02737089d 100644 --- a/seleniumbase/core/browser_launcher.py +++ b/seleniumbase/core/browser_launcher.py @@ -1249,6 +1249,8 @@ def _uc_gui_click_captcha( ctype=None, ): cdp_mode_on_at_start = __is_cdp_swap_needed(driver) + if cdp_mode_on_at_start and (not ctype or ctype == "cf_t"): + return driver.cdp.gui_click_captcha() _on_a_captcha_page = None if ctype == "cf_t": if not _on_a_cf_turnstile_page(driver): From 226da5e8cd71dc71922c2adaceada9ce8ec22a33 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Thu, 25 Sep 2025 18:28:24 -0400 Subject: [PATCH 2/4] Refresh Python dependencies --- requirements.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 69d1995b7ef..af8c6cbfa1b 100755 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ six>=1.17.0 parse>=1.20.2 parse-type>=0.6.6 colorama>=0.4.6 -pyyaml>=6.0.2 +pyyaml>=6.0.3 pygments>=2.19.2 pyreadline3>=3.5.3;platform_system=="Windows" tabcompleter>=1.4.0 diff --git a/setup.py b/setup.py index 84ab945e6e8..99e003fc739 100755 --- a/setup.py +++ b/setup.py @@ -173,7 +173,7 @@ 'parse>=1.20.2', 'parse-type>=0.6.6', 'colorama>=0.4.6', - 'pyyaml>=6.0.2', + 'pyyaml>=6.0.3', 'pygments>=2.19.2', 'pyreadline3>=3.5.3;platform_system=="Windows"', "tabcompleter>=1.4.0", From 66aa049786462da347a348a0d74674bb68b288ff Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Thu, 25 Sep 2025 18:29:17 -0400 Subject: [PATCH 3/4] Update examples --- examples/cdp_mode/raw_async.py | 1 + help_docs/syntax_formats.md | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/examples/cdp_mode/raw_async.py b/examples/cdp_mode/raw_async.py index 11ed056c427..8e598e66364 100644 --- a/examples/cdp_mode/raw_async.py +++ b/examples/cdp_mode/raw_async.py @@ -19,6 +19,7 @@ async def main(): time.sleep(1) element = await page.select("h1") assert element.text == "Welcome!" + driver.stop() if __name__ == "__main__": # Call an async function with awaited methods diff --git a/help_docs/syntax_formats.md b/help_docs/syntax_formats.md index ebc7e00265a..35b0d376abe 100644 --- a/help_docs/syntax_formats.md +++ b/help_docs/syntax_formats.md @@ -1021,18 +1021,20 @@ import asyncio import time from seleniumbase import cdp_driver - async def main(): - url = "https://www.priceline.com/" - driver = await cdp_driver.start_async(lang="en") + url = "seleniumbase.io/simple/login" + driver = await cdp_driver.start_async(incognito=True) page = await driver.get(url) - time.sleep(3) print(await page.evaluate("document.title")) - element = await page.select('[data-testid*="endLocation"]') + element = await page.select("#username") + await element.send_keys_async("demo_user") + element = await page.select("#password") + await element.send_keys_async("secret_pass") + element = await page.select("#log-in") await element.click_async() time.sleep(1) - await element.send_keys_async("Boston") - time.sleep(2) + element = await page.select("h1") + assert element.text == "Welcome!" driver.stop() if __name__ == "__main__": @@ -1050,7 +1052,7 @@ This format provides a pure CDP way of using SeleniumBase (without Selenium or a ```python from seleniumbase import sb_cdp - +@decorators.print_runtime("CDP Priceline Example") def main(): url = "https://www.priceline.com/" sb = sb_cdp.Chrome(url, lang="en") @@ -1063,11 +1065,14 @@ def main(): location = "Amsterdam" where_to = 'div[data-automation*="experiences"] input' button = 'button[data-automation*="experiences-search"]' + sb.wait_for_text("Where to?") sb.gui_click_element(where_to) sb.press_keys(where_to, location) sb.sleep(1) sb.gui_click_element(button) - sb.sleep(3) + sb.sleep(2) + sb.click_if_visible('button[aria-label="Close"]') + sb.sleep(1) print(sb.get_title()) print("************") for i in range(8): @@ -1078,7 +1083,6 @@ def main(): print("* %s" % card.text) sb.driver.stop() - if __name__ == "__main__": main() ``` From 1e20fa79222924b7d96d9d1af09fb30322326c17 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Thu, 25 Sep 2025 18:29:34 -0400 Subject: [PATCH 4/4] Version 4.41.10 --- seleniumbase/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index 249d4805d86..baebf676a8e 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.41.9" +__version__ = "4.41.10"