Merge pull request #3467 from seleniumbase/cdp-mode-patch-28

CDP Mode - Patch 28
This commit is contained in:
Michael Mintz 2025-02-01 14:58:58 -05:00 committed by GitHub
commit 1acc69c93d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 90 additions and 7 deletions

View File

@ -0,0 +1,27 @@
# An example of switching between multiple drivers
from seleniumbase import SB
with SB(uc=True, test=True) as sb:
url1 = "https://seleniumbase.io/antibot/login"
sb.activate_cdp_mode(url1)
url2 = "https://seleniumbase.io/hobbit/login"
driver2 = sb.get_new_driver(undetectable=True)
sb.activate_cdp_mode(url2)
sb.sleep(1)
sb.switch_to_default_driver()
sb.assert_url_contains("antibot")
print(sb.get_current_url())
sb.type("input#username", "demo_user")
sb.type("input#password", "secret_pass")
sb.cdp.gui_click_element("button")
sb.sleep(1)
sb.cdp.gui_click_element("a#log-in")
sb.assert_text("Welcome!", "h1")
sb.sleep(2)
sb.switch_to_driver(driver2)
sb.assert_url_contains("hobbit")
print(sb.get_current_url())
sb.cdp.gui_click_element("button")
sb.assert_text("Welcome to Middle Earth!")
sb.click("img")
sb.sleep(3)

View File

@ -0,0 +1,14 @@
from seleniumbase import BaseCase
BaseCase.main(__name__, __file__, "--uc")
class MultipleDriversTest(BaseCase):
def test_multiple_drivers(self):
url1 = "https://seleniumbase.io/demo_page"
self.activate_cdp_mode(url1)
driver1 = self.driver
url2 = "https://seleniumbase.io/coffee/"
driver2 = self.get_new_driver(undetectable=True)
self.activate_cdp_mode(url2)
print("\n" + driver1.get_current_url())
print(driver2.get_current_url())

View File

@ -0,0 +1,17 @@
from seleniumbase import SB
with SB(uc=True, test=True) as sb:
url1 = "https://seleniumbase.io/demo_page"
sb.activate_cdp_mode(url1)
driver1 = sb.driver
url2 = "https://seleniumbase.io/coffee/"
driver2 = sb.get_new_driver(undetectable=True)
sb.activate_cdp_mode(url2)
print(driver1.get_current_url())
print(driver2.get_current_url())
sb.switch_to_default_driver()
sb.assert_url_contains("demo_page")
print(sb.get_current_url())
sb.switch_to_driver(driver2)
sb.assert_url_contains("coffee")
print(sb.get_current_url())

View File

@ -2,7 +2,7 @@
# Minimum Python version: 3.9 (for generating docs only)
regex>=2024.11.6
pymdown-extensions>=10.14.2
pymdown-extensions>=10.14.3
pipdeptree>=2.25.0
python-dateutil>=2.8.2
Markdown==3.7
@ -11,10 +11,10 @@ ghp-import==2.1.0
watchdog==6.0.0
cairocffi==1.7.1
pathspec==0.12.1
Babel==2.16.0
Babel==2.17.0
paginate==0.5.7
mkdocs==1.6.1
mkdocs-material==9.5.50
mkdocs-material==9.6.1
mkdocs-exclude-search==0.6.6
mkdocs-simple-hooks==0.1.5
mkdocs-material-extensions==1.3.1

View File

@ -4,7 +4,7 @@ setuptools~=70.2;python_version<"3.10"
setuptools>=75.8.0;python_version>="3.10"
wheel>=0.45.1
attrs>=25.1.0
certifi>=2024.12.14
certifi>=2025.1.31
exceptiongroup>=1.2.2
websockets~=13.1;python_version<"3.9"
websockets>=14.2;python_version>="3.9"

View File

@ -1,2 +1,2 @@
# seleniumbase package
__version__ = "4.34.4"
__version__ = "4.34.5"

View File

@ -749,6 +749,7 @@ def uc_open_with_cdp_mode(driver, url=None):
core_items.browser = cdp.browser
core_items.tab = cdp.tab
core_items.util = cdp.util
cdp._swap_driver = CDPM._swap_driver
cdp.core = core_items
cdp.loop = cdp.get_event_loop()
driver.cdp = cdp

View File

@ -19,6 +19,11 @@ class CDPMethods():
self.page = page
self.driver = driver
def _swap_driver(self, driver):
self.driver = driver
self.page = driver.cdp.page
self.loop = driver.cdp.loop
def __slow_mode_pause_if_set(self):
if (
(hasattr(sb_config, "demo_mode") and sb_config.demo_mode)

View File

@ -4358,6 +4358,8 @@ class BaseCase(unittest.TestCase):
self.driver = driver
if self.driver in self._drivers_browser_map:
self.browser = self._drivers_browser_map[self.driver]
if self.__is_cdp_swap_needed():
self.cdp._swap_driver(self.driver)
self.bring_active_window_to_front()
def switch_to_default_driver(self):
@ -4366,6 +4368,8 @@ class BaseCase(unittest.TestCase):
self.driver = self._default_driver
if self.driver in self._drivers_browser_map:
self.browser = self._drivers_browser_map[self.driver]
if self.__is_cdp_swap_needed():
self.cdp._swap_driver(self.driver)
self.bring_active_window_to_front()
def save_screenshot(

View File

@ -25,6 +25,7 @@ __all__ = (
"CDP",
"find_chrome_executable",
)
IS_MAC = "darwin" in sys.platform
IS_POSIX = sys.platform.startswith(("darwin", "cygwin", "linux"))
logger = logging.getLogger("uc")
logger.setLevel(logging.getLogger().getEffectiveLevel())
@ -311,7 +312,21 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
setattr(service_, "creationflags", creationflags)
if hasattr(service_, "creation_flags"):
setattr(service_, "creation_flags", creationflags)
super().__init__(options=options, service=service_)
try:
super().__init__(options=options, service=service_)
except OSError as e:
if IS_MAC and "Bad CPU type in executable" in str(e):
print(str(e))
message = (
"Missing a macOS dependency:\n"
"Your Mac needs Rosetta 2 to use UC Mode!\n"
'Run: "softwareupdate --install-rosetta"\n'
"Info: "
"https://apple.stackexchange.com/a/408379/607628"
)
raise Exception(message)
else:
raise
self.reactor = None
if enable_cdp_events:
if logging.getLogger().getEffectiveLevel() == logging.DEBUG:

View File

@ -153,7 +153,7 @@ setup(
'setuptools>=75.8.0;python_version>="3.10"',
'wheel>=0.45.1',
'attrs>=25.1.0',
"certifi>=2024.12.14",
"certifi>=2025.1.31",
"exceptiongroup>=1.2.2",
'websockets~=13.1;python_version<"3.9"',
'websockets>=14.2;python_version>="3.9"',