Skip to content

Commit 26a24a4

Browse files
authored
Merge pull request #3720 from seleniumbase/cdp-mode-patch-47
CDP Mode: Patch 47
2 parents 5c146c5 + b897de9 commit 26a24a4

File tree

4 files changed

+36
-33
lines changed

4 files changed

+36
-33
lines changed

seleniumbase/__version__.py

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

seleniumbase/core/browser_launcher.py

+17-10
Original file line numberDiff line numberDiff line change
@@ -519,16 +519,6 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
519519
import asyncio
520520
from seleniumbase.undetected.cdp_driver import cdp_util
521521

522-
if (
523-
hasattr(driver, "_is_using_cdp")
524-
and driver._is_using_cdp
525-
and hasattr(driver, "cdp")
526-
and driver.cdp
527-
):
528-
# CDP Mode was already initialized
529-
driver.disconnect()
530-
driver.cdp.open(url, **kwargs)
531-
return
532522
current_url = None
533523
try:
534524
current_url = driver.current_url
@@ -553,6 +543,23 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
553543
if url_protocol not in ["about", "data", "chrome"]:
554544
safe_url = False
555545

546+
if (
547+
hasattr(driver, "_is_using_cdp")
548+
and driver._is_using_cdp
549+
and hasattr(driver, "cdp")
550+
and driver.cdp
551+
and hasattr(driver.cdp, "loop")
552+
):
553+
# CDP Mode was already initialized
554+
driver.cdp.open(url, **kwargs)
555+
if not safe_url:
556+
time.sleep(constants.UC.CDP_MODE_OPEN_WAIT)
557+
if IS_WINDOWS:
558+
time.sleep(constants.UC.EXTRA_WINDOWS_WAIT)
559+
else:
560+
time.sleep(0.012)
561+
return
562+
556563
headless = False
557564
headed = None
558565
xvfb = None

seleniumbase/plugins/sb_manager.py

+11-16
Original file line numberDiff line numberDiff line change
@@ -1369,23 +1369,18 @@ def SB(
13691369
"%s%s%s%s%s"
13701370
% (c1, left_space, end_text, right_space, cr)
13711371
)
1372-
python3_12_or_newer = (sys.version_info >= (3, 12))
1373-
if undetectable:
1372+
if undetectable and hasattr(sb, "_drivers_browser_map"):
13741373
import asyncio
1375-
if not python3_12_or_newer and hasattr(sb_config, "_cdp_aclose"):
1376-
with suppress(Exception):
1377-
loop = asyncio.get_event_loop()
1378-
asyncio.set_event_loop(loop)
1379-
loop.run_until_complete(sb_config._cdp_aclose())
1380-
if python3_12_or_newer and hasattr(sb, "_drivers_browser_map"):
1381-
for driver in sb._drivers_browser_map.keys():
1382-
if hasattr(driver, "cdp") and driver.cdp:
1383-
asyncio.set_event_loop(driver.cdp.loop)
1384-
tasks = [tab.aclose() for tab in driver.cdp.get_tabs()]
1385-
tasks.append(driver.cdp.driver.connection.aclose())
1386-
driver.cdp.loop.run_until_complete(
1387-
asyncio.gather(*tasks)
1388-
)
1374+
for driver in sb._drivers_browser_map.keys():
1375+
if (
1376+
hasattr(driver, "cdp")
1377+
and driver.cdp
1378+
and hasattr(driver.cdp, "loop")
1379+
):
1380+
asyncio.set_event_loop(driver.cdp.loop)
1381+
tasks = [tab.aclose() for tab in driver.cdp.get_tabs()]
1382+
tasks.append(driver.cdp.driver.connection.aclose())
1383+
driver.cdp.loop.run_until_complete(asyncio.gather(*tasks))
13891384
driver.cdp.loop.close()
13901385
gc.collect()
13911386
if test and test_name and not test_passed and raise_test_failure:

seleniumbase/undetected/cdp_driver/connection.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
)
2020
import websockets
2121
from websockets.protocol import State
22-
from seleniumbase import config as sb_config
2322
from . import cdp_util as util
2423
import mycdp as cdp
2524
import mycdp.network
@@ -271,11 +270,10 @@ async def aopen(self, **kw):
271270
max_size=MAX_SIZE,
272271
)
273272
self.listener = Listener(self)
274-
sb_config._cdp_aclose = self.aclose
275273
except (Exception,) as e:
276274
logger.debug("Exception during opening of websocket: %s", e)
277275
if self.listener:
278-
self.listener.cancel()
276+
await self.listener.cancel()
279277
raise
280278
if not self.listener or not self.listener.running:
281279
self.listener = Listener(self)
@@ -300,7 +298,7 @@ async def aclose(self):
300298
self.websocket_url
301299
)
302300
if self.listener and self.listener.running:
303-
self.listener.cancel()
301+
await self.listener.cancel()
304302
self.enabled_domains.clear()
305303
logger.debug(
306304
"\n❌ Closed websocket connection to %s", self.websocket_url
@@ -446,7 +444,6 @@ async def send(
446444
if not _is_update:
447445
await self._register_handlers()
448446
await self.websocket.send(tx.message)
449-
sb_config._cdp_aclose = self.aclose
450447
try:
451448
return await tx
452449
except ProtocolException as e:
@@ -557,9 +554,13 @@ def time_before_considered_idle(self):
557554
def time_before_considered_idle(self, seconds: Union[int, float]):
558555
self._time_before_considered_idle = seconds
559556

560-
def cancel(self):
557+
async def cancel(self):
561558
if self.task and not self.task.cancelled():
562559
self.task.cancel()
560+
try:
561+
await self.task
562+
except asyncio.CancelledError:
563+
pass
563564

564565
@property
565566
def running(self):

0 commit comments

Comments
 (0)