From a756d91999539497c8215aff59f520da7ed14633 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Thu, 30 Apr 2026 14:56:24 -0400 Subject: [PATCH 1/3] Update CDP Mode --- seleniumbase/core/sb_cdp.py | 8 ++++++-- seleniumbase/undetected/cdp_driver/tab.py | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/seleniumbase/core/sb_cdp.py b/seleniumbase/core/sb_cdp.py index 60f3079c4ac..3a03c1afc7f 100644 --- a/seleniumbase/core/sb_cdp.py +++ b/seleniumbase/core/sb_cdp.py @@ -2308,6 +2308,9 @@ def __click_captcha(self, use_cdp=False): selector = "#challenge-form div > div" elif self.is_element_present('[style="display: grid;"] div div'): selector = '[style="display: grid;"] div div' + time.sleep(0.025) + self.set_attributes(selector, "style", "text-align: left;") + time.sleep(0.025) elif self.is_element_present("[class*=spacer] + div div"): selector = '[class*=spacer] + div div' elif self.is_element_present(".spacer div:not([class])"): @@ -2443,10 +2446,11 @@ def __click_captcha(self, use_cdp=False): element_rect = self.get_gui_element_rect(selector, timeout=1) e_x = element_rect["x"] e_y = element_rect["y"] - x_offset = 28 + x_offset = 25 y_offset = 32 if shared_utils.is_windows(): - y_offset = 28 + x_offset = 27 + y_offset = 29 x = e_x + x_offset y = e_y + y_offset sb_config._saved_cf_x_y = (x, y) diff --git a/seleniumbase/undetected/cdp_driver/tab.py b/seleniumbase/undetected/cdp_driver/tab.py index c46eb8d7a04..788b8ac4495 100644 --- a/seleniumbase/undetected/cdp_driver/tab.py +++ b/seleniumbase/undetected/cdp_driver/tab.py @@ -1706,6 +1706,9 @@ async def solve_captcha(self): selector = "#challenge-form div > div" elif await self.is_element_present('[style="display: grid;"] div div'): selector = '[style="display: grid;"] div div' + await self.sleep(0.025) + await self.set_attributes(selector, "style", "text-align: left;") + await self.sleep(0.025) elif await self.is_element_present("[class*=spacer] + div div"): selector = '[class*=spacer] + div div' elif await self.is_element_present(".spacer div:not([class])"): @@ -1837,10 +1840,11 @@ async def solve_captcha(self): element_rect = await self.get_gui_element_rect(selector, timeout=1) e_x = element_rect["x"] e_y = element_rect["y"] - x_offset = 28 + x_offset = 25 y_offset = 32 if await asyncio.to_thread(shared_utils.is_windows): - y_offset = 28 + x_offset = 27 + y_offset = 29 x = e_x + x_offset y = e_y + y_offset sb_config._saved_cf_x_y = (x, y) # For debugging later From 0e8b32f9b894cbbac546256f33630b16b08be49a Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Thu, 30 Apr 2026 15:06:57 -0400 Subject: [PATCH 2/3] Update CDP Mode examples --- examples/cdp_mode/playwright/raw_indeed_sync.py | 3 +++ examples/cdp_mode/raw_cf_captcha.py | 4 ++-- examples/cdp_mode/raw_glassdoor.py | 17 ++++++++++++++--- examples/cdp_mode/raw_indeed.py | 2 +- examples/cdp_mode/raw_indeed_login.py | 13 +++++++------ examples/cdp_mode/raw_planetmc.py | 2 +- 6 files changed, 28 insertions(+), 13 deletions(-) diff --git a/examples/cdp_mode/playwright/raw_indeed_sync.py b/examples/cdp_mode/playwright/raw_indeed_sync.py index 0f3699b26e8..dfdf47f4acf 100644 --- a/examples/cdp_mode/playwright/raw_indeed_sync.py +++ b/examples/cdp_mode/playwright/raw_indeed_sync.py @@ -3,6 +3,9 @@ sb = sb_cdp.Chrome() sb.open("https://www.indeed.com/companies/search") +sb.sleep(2) +sb.solve_captcha() +sb.sleep(1) endpoint_url = sb.get_endpoint_url() with sync_playwright() as p: diff --git a/examples/cdp_mode/raw_cf_captcha.py b/examples/cdp_mode/raw_cf_captcha.py index 31c1486918c..be2c0b48351 100644 --- a/examples/cdp_mode/raw_cf_captcha.py +++ b/examples/cdp_mode/raw_cf_captcha.py @@ -1,9 +1,9 @@ from seleniumbase import SB -with SB(uc=True, test=True, guest=True) as sb: +with SB(uc=True, test=True, incognito=True) as sb: url = "https://www.cloudflare.com/login" sb.activate_cdp_mode(url) sb.wait_for_element('div[data-testid*="challenge-widget"]') - sb.sleep(2) + sb.sleep(2.5) sb.solve_captcha() sb.sleep(3) diff --git a/examples/cdp_mode/raw_glassdoor.py b/examples/cdp_mode/raw_glassdoor.py index 9077885e1d6..631d004379c 100644 --- a/examples/cdp_mode/raw_glassdoor.py +++ b/examples/cdp_mode/raw_glassdoor.py @@ -1,13 +1,24 @@ from seleniumbase import SB -with SB(uc=True, test=True, ad_block=True) as sb: +with SB(uc=True, test=True, incognito=True) as sb: url = "https://www.glassdoor.com/Reviews/index.htm" sb.activate_cdp_mode(url) - sb.sleep(1.5) + sb.sleep(2.1) sb.solve_captcha() - sb.sleep(0.5) + sb.sleep(0.6) sb.highlight('[data-test="global-nav-glassdoor-logo"]') sb.highlight('[data-test="site-header-companies"]') sb.highlight('[data-test="search-button"]') sb.highlight('[data-test="sign-in-button"]') sb.highlight('[data-test="company-search-autocomplete"]') + sb.press_keys("#employer-autocomplete", "NASA Goddard\n") + sb.sleep(0.5) + sb.click('button[data-role-variant="primary"] span:contains("Search")') + sb.sleep(2) + sb.click('[aria-label*="NASA"] img') + sb.sleep(2) + print(sb.get_page_title()) + sb.save_as_pdf_to_logs() + sb.save_page_source_to_logs() + sb.save_screenshot_to_logs() + print("Logs have been saved to: ./latest_logs/") diff --git a/examples/cdp_mode/raw_indeed.py b/examples/cdp_mode/raw_indeed.py index 3b8f27cca27..82346aa8b0c 100644 --- a/examples/cdp_mode/raw_indeed.py +++ b/examples/cdp_mode/raw_indeed.py @@ -3,9 +3,9 @@ with SB(uc=True, test=True) as sb: url = "https://www.indeed.com/companies/search" sb.activate_cdp_mode(url) + sb.sleep(2) search_box = "input#company-search" if not sb.is_element_present(search_box): - sb.sleep(2) sb.solve_captcha() sb.sleep(1) company = "NASA Jet Propulsion Laboratory" diff --git a/examples/cdp_mode/raw_indeed_login.py b/examples/cdp_mode/raw_indeed_login.py index e21efe474b0..e1dd619eb19 100644 --- a/examples/cdp_mode/raw_indeed_login.py +++ b/examples/cdp_mode/raw_indeed_login.py @@ -1,14 +1,15 @@ """An example of clicking at custom CAPTCHA coordinates.""" from seleniumbase import SB -with SB(uc=True, test=True, locale="en") as sb: +with SB(uc=True, test=True, incognito=True) as sb: url = "https://secure.indeed.com/auth" sb.activate_cdp_mode(url) - sb.sleep(1) + sb.sleep(1.8) + sb.solve_captcha() + sb.sleep(1.8) sb.type('input[type="email"]', "test@test.com") - sb.sleep(1) + sb.sleep(1.5) sb.click('button[type="submit"]') - sb.sleep(3.5) - selector = 'div[class*="pass-Captcha"]' - sb.click_with_offset(selector, 32, 42) + sb.sleep(3.2) + sb.solve_captcha() sb.sleep(4.5) diff --git a/examples/cdp_mode/raw_planetmc.py b/examples/cdp_mode/raw_planetmc.py index ab1c0e1fbd9..09ee37d7998 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) + sb.sleep(3) sb.solve_captcha() sb.wait_for_element_absent("input[disabled]") sb.sleep(2) From 854529fb1ecefd9a3c6c1cbdc3f21b2a00efb68d Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Thu, 30 Apr 2026 15:10:14 -0400 Subject: [PATCH 3/3] Version 4.48.4 --- seleniumbase/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index dde7ae473a5..3353a900f9b 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.48.3" +__version__ = "4.48.4"