From 872c18da8df08453ade245a5e1cfb4d3ec72698d Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Wed, 1 Apr 2026 01:00:49 -0400 Subject: [PATCH 1/3] Update CDP Mode --- seleniumbase/core/sb_cdp.py | 6 ++- seleniumbase/undetected/cdp_driver/config.py | 50 ++++++++++++++------ 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/seleniumbase/core/sb_cdp.py b/seleniumbase/core/sb_cdp.py index 2cf63185849..18798c1d97d 100644 --- a/seleniumbase/core/sb_cdp.py +++ b/seleniumbase/core/sb_cdp.py @@ -1068,7 +1068,11 @@ def press_keys(self, selector, text, timeout=None): ): text = text.replace("\n", "\r") for key in text: - element.send_keys(key) + try: + element.send_keys(key) + except AttributeError: + element = self.select(selector, timeout=0.1) + element.send_keys(key) time.sleep(float(0.042 + (random.random() / 110.0))) if submit: element.send_keys("\r\n") diff --git a/seleniumbase/undetected/cdp_driver/config.py b/seleniumbase/undetected/cdp_driver/config.py index b5279ac32b5..a1b4c96eeb0 100644 --- a/seleniumbase/undetected/cdp_driver/config.py +++ b/seleniumbase/undetected/cdp_driver/config.py @@ -1,3 +1,4 @@ +import json import logging import os import pathlib @@ -88,19 +89,19 @@ def __init__( if not browser_args: browser_args = [] if not user_data_dir: - self.user_data_dir = temp_profile_dir() + self.user_data_dir = temp_profile_dir(proxy=proxy) self._user_data_dir = self.user_data_dir self._custom_data_dir = False else: self.user_data_dir = user_data_dir profile = os.path.join(self.user_data_dir, "Default") preferences_file = os.path.join(profile, "Preferences") - preferences = get_default_preferences() + preferences = get_default_preferences(proxy=proxy) if not os.path.exists(profile): with suppress(Exception): os.makedirs(profile) - with open(preferences_file, "w") as f: - f.write(preferences) + with open(preferences_file, "w", encoding="utf-8") as f: + json.dump(preferences, f) mock_keychain = False if not browser_executable_path: browser_executable_path = find_chrome_executable() @@ -343,25 +344,46 @@ def is_root(): return ctypes.windll.shell32.IsUserAnAdmin() != 0 -def get_default_preferences(): - return ( - """{"credentials_enable_service": false, - "password_manager_enabled": false, - "password_manager_leak_detection": false}""" - ) +def get_default_preferences(proxy=None): + prefs = { + "profile": { + "password_manager_leak_detection": False, + "password_manager_enabled": False + }, + "credentials_enable_service": False, + "omnibox-max-zero-suggest-matches": 0, + "omnibox-zero-suggest-prefetching": 0, + "omnibox-zero-suggest-prefetching-on-srp": 0, + "omnibox-zero-suggest-prefetching-on-web": 0, + "omnibox-zero-suggest-in-memory-caching": 0, + "local_discovery": { + "notifications_enabled": False + }, + "autofill": { + "profile_enabled": False, + "credit_card_enabled": False + } + } + if proxy: + prefs["webrtc"] = { + "ip_handling_policy": "disable_non_proxied_udp", + "multiple_routes_enabled": False, + "nonproxied_udp_enabled": False + } + return prefs -def temp_profile_dir(): +def temp_profile_dir(proxy=None): """Generate a temp dir (path)""" path = os.path.normpath(tempfile.mkdtemp(prefix="uc_")) profile = os.path.join(path, "Default") preferences_file = os.path.join(profile, "Preferences") - preferences = get_default_preferences() + preferences = get_default_preferences(proxy=proxy) if not os.path.exists(profile): with suppress(Exception): os.makedirs(profile) - with open(preferences_file, "w") as f: - f.write(preferences) + with open(preferences_file, "w", encoding="utf-8") as f: + json.dump(preferences, f) return path From 1a936c7dc73f5d5f3e6fb17defc432f0e9964ed9 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Wed, 1 Apr 2026 01:01:33 -0400 Subject: [PATCH 2/3] Refresh Python dependencies --- mkdocs_build/requirements.txt | 4 ++-- requirements.txt | 4 ++-- setup.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mkdocs_build/requirements.txt b/mkdocs_build/requirements.txt index c3076d8cb10..4a954d203c0 100644 --- a/mkdocs_build/requirements.txt +++ b/mkdocs_build/requirements.txt @@ -1,8 +1,8 @@ # mkdocs dependencies for generating the seleniumbase.io website # Minimum Python version: 3.10 (for generating docs only) -regex>=2026.2.28 -pymdown-extensions>=10.21 +regex>=2026.3.32 +pymdown-extensions>=10.21.2 pipdeptree>=2.34.0 python-dateutil>=2.8.2 Markdown==3.10.2 diff --git a/requirements.txt b/requirements.txt index ec7408c2b50..d202ff5f7be 100755 --- a/requirements.txt +++ b/requirements.txt @@ -24,7 +24,7 @@ parse>=1.21.1 parse-type>=0.6.6 colorama>=0.4.6 pyyaml>=6.0.3 -pygments>=2.19.2 +pygments>=2.20.0 pyreadline3>=3.5.4;platform_system=="Windows" tabcompleter>=1.4.0 pdbp>=1.8.2 @@ -33,7 +33,7 @@ charset-normalizer>=3.4.6,<4 urllib3>=1.26.20,<2;python_version<"3.10" urllib3>=1.26.20,<3;python_version>="3.10" requests~=2.32.5;python_version<"3.10" -requests~=2.33.0;python_version>="3.10" +requests~=2.33.1;python_version>="3.10" sniffio==1.3.1 h11==0.16.0 outcome==1.3.0.post0 diff --git a/setup.py b/setup.py index 690a025a9f2..bd2fddb0e19 100755 --- a/setup.py +++ b/setup.py @@ -172,7 +172,7 @@ 'parse-type>=0.6.6', 'colorama>=0.4.6', 'pyyaml>=6.0.3', - 'pygments>=2.19.2', + 'pygments>=2.20.0', 'pyreadline3>=3.5.4;platform_system=="Windows"', 'tabcompleter>=1.4.0', 'pdbp>=1.8.2', @@ -181,7 +181,7 @@ 'urllib3>=1.26.20,<2;python_version<"3.10"', 'urllib3>=1.26.20,<3;python_version>="3.10"', 'requests~=2.32.5;python_version<"3.10"', - 'requests~=2.33.0;python_version>="3.10"', + 'requests~=2.33.1;python_version>="3.10"', 'sniffio==1.3.1', 'h11==0.16.0', 'outcome==1.3.0.post0', From 570ccb7a849daf82a87e1918ea6bc4193e4abc0a Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Wed, 1 Apr 2026 01:01:51 -0400 Subject: [PATCH 3/3] Version 4.47.9 --- seleniumbase/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index 70f87b4cebd..daa131f04b6 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.47.8" +__version__ = "4.47.9"