Skip to content

Commit a2e8bb7

Browse files
committed
Update CDP Mode
1 parent 44ba6a0 commit a2e8bb7

File tree

6 files changed

+54
-13
lines changed

6 files changed

+54
-13
lines changed

examples/cdp_mode/ReadMe.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,9 @@ sb.cdp.get_element_attribute(selector, attribute)
368368
sb.cdp.get_element_html(selector)
369369
sb.cdp.set_locale(locale)
370370
sb.cdp.set_attributes(selector, attribute, value)
371+
sb.cdp.gui_press_key(key)
372+
sb.cdp.gui_press_keys(keys)
373+
sb.cdp.gui_write(text)
371374
sb.cdp.gui_click_x_y(x, y)
372375
sb.cdp.gui_click_element(selector)
373376
sb.cdp.internalize_links()

seleniumbase/core/browser_launcher.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,9 @@ def uc_open_with_cdp_mode(driver, url=None):
620620
cdp.reset_window_size = CDPM.reset_window_size
621621
cdp.set_locale = CDPM.set_locale
622622
cdp.set_attributes = CDPM.set_attributes
623+
cdp.gui_press_key = CDPM.gui_press_key
624+
cdp.gui_press_keys = CDPM.gui_press_keys
625+
cdp.gui_write = CDPM.gui_write
623626
cdp.gui_click_x_y = CDPM.gui_click_x_y
624627
cdp.gui_click_element = CDPM.gui_click_element
625628
cdp.internalize_links = CDPM.internalize_links
@@ -721,6 +724,9 @@ def uc_click(
721724
timeout=settings.SMALL_TIMEOUT,
722725
reconnect_time=None,
723726
):
727+
if __is_cdp_swap_needed(driver):
728+
driver.cdp.click(selector)
729+
return
724730
with suppress(Exception):
725731
rct = float(by) # Add shortcut: driver.uc_click(selector, RCT)
726732
if not reconnect_time:

seleniumbase/core/sb_cdp.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -942,6 +942,45 @@ def __get_configured_pyautogui(self, pyautogui_copy):
942942
)
943943
return pyautogui_copy
944944

945+
def gui_press_key(self, key):
946+
self.__install_pyautogui_if_missing()
947+
import pyautogui
948+
pyautogui = self.__get_configured_pyautogui(pyautogui)
949+
gui_lock = fasteners.InterProcessLock(
950+
constants.MultiBrowser.PYAUTOGUILOCK
951+
)
952+
with gui_lock:
953+
pyautogui.press(key)
954+
time.sleep(0.0375)
955+
self.__slow_mode_pause_if_set()
956+
self.loop.run_until_complete(self.page.wait())
957+
958+
def gui_press_keys(self, keys):
959+
self.__install_pyautogui_if_missing()
960+
import pyautogui
961+
pyautogui = self.__get_configured_pyautogui(pyautogui)
962+
gui_lock = fasteners.InterProcessLock(
963+
constants.MultiBrowser.PYAUTOGUILOCK
964+
)
965+
with gui_lock:
966+
for key in keys:
967+
pyautogui.press(key)
968+
time.sleep(0.0375)
969+
self.__slow_mode_pause_if_set()
970+
self.loop.run_until_complete(self.page.wait())
971+
972+
def gui_write(self, text):
973+
self.__install_pyautogui_if_missing()
974+
import pyautogui
975+
pyautogui = self.__get_configured_pyautogui(pyautogui)
976+
gui_lock = fasteners.InterProcessLock(
977+
constants.MultiBrowser.PYAUTOGUILOCK
978+
)
979+
with gui_lock:
980+
pyautogui.write(text)
981+
self.__slow_mode_pause_if_set()
982+
self.loop.run_until_complete(self.page.wait())
983+
945984
def __gui_click_x_y(self, x, y, timeframe=0.25, uc_lock=False):
946985
self.__install_pyautogui_if_missing()
947986
import pyautogui

seleniumbase/plugins/driver_manager.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -550,11 +550,7 @@ def Driver(
550550
or uc_sub
551551
):
552552
undetectable = True
553-
if (
554-
(undetectable or undetected or uc)
555-
and (uc_subprocess is None)
556-
and (uc_sub is None)
557-
):
553+
if undetectable or undetected or uc:
558554
uc_subprocess = True # Use UC as a subprocess by default.
559555
elif (
560556
"--undetectable" in sys_argv

seleniumbase/plugins/sb_manager.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -608,11 +608,7 @@ def SB(
608608
or uc_sub
609609
):
610610
undetectable = True
611-
if (
612-
(undetectable or undetected or uc)
613-
and (uc_subprocess is None)
614-
and (uc_sub is None)
615-
):
611+
if undetectable or undetected or uc:
616612
uc_subprocess = True # Use UC as a subprocess by default.
617613
elif (
618614
"--undetectable" in sys_argv

seleniumbase/undetected/cdp_driver/connection.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
TypeVar,
1919
)
2020
import websockets
21+
from websockets.protocol import State
2122
from . import cdp_util as util
2223
import mycdp as cdp
2324
import mycdp.network
@@ -261,7 +262,7 @@ async def aopen(self, **kw):
261262
"""
262263
Opens the websocket connection. Shouldn't be called manually by users.
263264
"""
264-
if not self.websocket or self.websocket.closed:
265+
if not self.websocket or self.websocket.state is State.CLOSED:
265266
try:
266267
self.websocket = await websockets.connect(
267268
self.websocket_url,
@@ -288,7 +289,7 @@ async def aclose(self):
288289
"""
289290
Closes the websocket connection. Shouldn't be called manually by users.
290291
"""
291-
if self.websocket and not self.websocket.closed:
292+
if self.websocket and self.websocket.state is not State.CLOSED:
292293
if self.listener and self.listener.running:
293294
self.listener.cancel()
294295
self.enabled_domains.clear()
@@ -393,7 +394,7 @@ async def send(
393394
when multiple calls to connection.send() are made.
394395
"""
395396
await self.aopen()
396-
if not self.websocket or self.closed:
397+
if not self.websocket or self.websocket.state is State.CLOSED:
397398
return
398399
if self._owner:
399400
browser = self._owner

0 commit comments

Comments
 (0)