Skip to content

Commit 1acc69c

Browse files
authored
Merge pull request #3467 from seleniumbase/cdp-mode-patch-28
CDP Mode - Patch 28
2 parents a2a6e99 + ea60505 commit 1acc69c

File tree

11 files changed

+90
-7
lines changed

11 files changed

+90
-7
lines changed

examples/cdp_mode/raw_cdp_drivers.py

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# An example of switching between multiple drivers
2+
from seleniumbase import SB
3+
4+
with SB(uc=True, test=True) as sb:
5+
url1 = "https://seleniumbase.io/antibot/login"
6+
sb.activate_cdp_mode(url1)
7+
url2 = "https://seleniumbase.io/hobbit/login"
8+
driver2 = sb.get_new_driver(undetectable=True)
9+
sb.activate_cdp_mode(url2)
10+
sb.sleep(1)
11+
sb.switch_to_default_driver()
12+
sb.assert_url_contains("antibot")
13+
print(sb.get_current_url())
14+
sb.type("input#username", "demo_user")
15+
sb.type("input#password", "secret_pass")
16+
sb.cdp.gui_click_element("button")
17+
sb.sleep(1)
18+
sb.cdp.gui_click_element("a#log-in")
19+
sb.assert_text("Welcome!", "h1")
20+
sb.sleep(2)
21+
sb.switch_to_driver(driver2)
22+
sb.assert_url_contains("hobbit")
23+
print(sb.get_current_url())
24+
sb.cdp.gui_click_element("button")
25+
sb.assert_text("Welcome to Middle Earth!")
26+
sb.click("img")
27+
sb.sleep(3)

examples/multiple_cdp_drivers.py

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from seleniumbase import BaseCase
2+
BaseCase.main(__name__, __file__, "--uc")
3+
4+
5+
class MultipleDriversTest(BaseCase):
6+
def test_multiple_drivers(self):
7+
url1 = "https://seleniumbase.io/demo_page"
8+
self.activate_cdp_mode(url1)
9+
driver1 = self.driver
10+
url2 = "https://seleniumbase.io/coffee/"
11+
driver2 = self.get_new_driver(undetectable=True)
12+
self.activate_cdp_mode(url2)
13+
print("\n" + driver1.get_current_url())
14+
print(driver2.get_current_url())

examples/raw_cdp_drivers.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from seleniumbase import SB
2+
3+
with SB(uc=True, test=True) as sb:
4+
url1 = "https://seleniumbase.io/demo_page"
5+
sb.activate_cdp_mode(url1)
6+
driver1 = sb.driver
7+
url2 = "https://seleniumbase.io/coffee/"
8+
driver2 = sb.get_new_driver(undetectable=True)
9+
sb.activate_cdp_mode(url2)
10+
print(driver1.get_current_url())
11+
print(driver2.get_current_url())
12+
sb.switch_to_default_driver()
13+
sb.assert_url_contains("demo_page")
14+
print(sb.get_current_url())
15+
sb.switch_to_driver(driver2)
16+
sb.assert_url_contains("coffee")
17+
print(sb.get_current_url())

mkdocs_build/requirements.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Minimum Python version: 3.9 (for generating docs only)
33

44
regex>=2024.11.6
5-
pymdown-extensions>=10.14.2
5+
pymdown-extensions>=10.14.3
66
pipdeptree>=2.25.0
77
python-dateutil>=2.8.2
88
Markdown==3.7
@@ -11,10 +11,10 @@ ghp-import==2.1.0
1111
watchdog==6.0.0
1212
cairocffi==1.7.1
1313
pathspec==0.12.1
14-
Babel==2.16.0
14+
Babel==2.17.0
1515
paginate==0.5.7
1616
mkdocs==1.6.1
17-
mkdocs-material==9.5.50
17+
mkdocs-material==9.6.1
1818
mkdocs-exclude-search==0.6.6
1919
mkdocs-simple-hooks==0.1.5
2020
mkdocs-material-extensions==1.3.1

requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ setuptools~=70.2;python_version<"3.10"
44
setuptools>=75.8.0;python_version>="3.10"
55
wheel>=0.45.1
66
attrs>=25.1.0
7-
certifi>=2024.12.14
7+
certifi>=2025.1.31
88
exceptiongroup>=1.2.2
99
websockets~=13.1;python_version<"3.9"
1010
websockets>=14.2;python_version>="3.9"

seleniumbase/__version__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# seleniumbase package
2-
__version__ = "4.34.4"
2+
__version__ = "4.34.5"

seleniumbase/core/browser_launcher.py

+1
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,7 @@ def uc_open_with_cdp_mode(driver, url=None):
749749
core_items.browser = cdp.browser
750750
core_items.tab = cdp.tab
751751
core_items.util = cdp.util
752+
cdp._swap_driver = CDPM._swap_driver
752753
cdp.core = core_items
753754
cdp.loop = cdp.get_event_loop()
754755
driver.cdp = cdp

seleniumbase/core/sb_cdp.py

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ def __init__(self, loop, page, driver):
1919
self.page = page
2020
self.driver = driver
2121

22+
def _swap_driver(self, driver):
23+
self.driver = driver
24+
self.page = driver.cdp.page
25+
self.loop = driver.cdp.loop
26+
2227
def __slow_mode_pause_if_set(self):
2328
if (
2429
(hasattr(sb_config, "demo_mode") and sb_config.demo_mode)

seleniumbase/fixtures/base_case.py

+4
Original file line numberDiff line numberDiff line change
@@ -4358,6 +4358,8 @@ def switch_to_driver(self, driver):
43584358
self.driver = driver
43594359
if self.driver in self._drivers_browser_map:
43604360
self.browser = self._drivers_browser_map[self.driver]
4361+
if self.__is_cdp_swap_needed():
4362+
self.cdp._swap_driver(self.driver)
43614363
self.bring_active_window_to_front()
43624364

43634365
def switch_to_default_driver(self):
@@ -4366,6 +4368,8 @@ def switch_to_default_driver(self):
43664368
self.driver = self._default_driver
43674369
if self.driver in self._drivers_browser_map:
43684370
self.browser = self._drivers_browser_map[self.driver]
4371+
if self.__is_cdp_swap_needed():
4372+
self.cdp._swap_driver(self.driver)
43694373
self.bring_active_window_to_front()
43704374

43714375
def save_screenshot(

seleniumbase/undetected/__init__.py

+16-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"CDP",
2626
"find_chrome_executable",
2727
)
28+
IS_MAC = "darwin" in sys.platform
2829
IS_POSIX = sys.platform.startswith(("darwin", "cygwin", "linux"))
2930
logger = logging.getLogger("uc")
3031
logger.setLevel(logging.getLogger().getEffectiveLevel())
@@ -311,7 +312,21 @@ def __init__(
311312
setattr(service_, "creationflags", creationflags)
312313
if hasattr(service_, "creation_flags"):
313314
setattr(service_, "creation_flags", creationflags)
314-
super().__init__(options=options, service=service_)
315+
try:
316+
super().__init__(options=options, service=service_)
317+
except OSError as e:
318+
if IS_MAC and "Bad CPU type in executable" in str(e):
319+
print(str(e))
320+
message = (
321+
"Missing a macOS dependency:\n"
322+
"Your Mac needs Rosetta 2 to use UC Mode!\n"
323+
'Run: "softwareupdate --install-rosetta"\n'
324+
"Info: "
325+
"https://apple.stackexchange.com/a/408379/607628"
326+
)
327+
raise Exception(message)
328+
else:
329+
raise
315330
self.reactor = None
316331
if enable_cdp_events:
317332
if logging.getLogger().getEffectiveLevel() == logging.DEBUG:

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@
153153
'setuptools>=75.8.0;python_version>="3.10"',
154154
'wheel>=0.45.1',
155155
'attrs>=25.1.0',
156-
"certifi>=2024.12.14",
156+
"certifi>=2025.1.31",
157157
"exceptiongroup>=1.2.2",
158158
'websockets~=13.1;python_version<"3.9"',
159159
'websockets>=14.2;python_version>="3.9"',

0 commit comments

Comments
 (0)