Skip to content

Commit ab2de31

Browse files
committed
Add more options for capturing CDP logs
1 parent 39cf213 commit ab2de31

File tree

9 files changed

+98
-3
lines changed

9 files changed

+98
-3
lines changed

examples/raw_parameter_script.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
sb.no_sandbox = False
7272
sb.disable_js = False
7373
sb.disable_gpu = False
74+
sb.log_cdp_events = False
7475
sb._multithreaded = False
7576
sb._reuse_session = False
7677
sb._crumbs = False

help_docs/method_summary.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ self.get_new_driver(
282282
undetectable=None,
283283
uc_cdp_events=None,
284284
uc_subprocess=None,
285+
log_cdp_events=None,
285286
no_sandbox=None,
286287
disable_gpu=None,
287288
headless2=None,

seleniumbase/behave/behave_sb.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
-D enable-sync (Enable "Chrome Sync".)
7676
-D uc | -D undetected (Use undetected-chromedriver to evade bot-detection)
7777
-D uc-cdp-events (Capture CDP events when running in "-D undetected" mode)
78+
-D log-cdp ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
7879
-D remote-debug (Sync to Chrome Remote Debugger chrome://inspect/#devices)
7980
-D dashboard (Enable the SeleniumBase Dashboard. Saved at: dashboard.html)
8081
-D dash-title=STRING (Set the title shown for the generated dashboard.)
@@ -181,6 +182,7 @@ def get_configured_sb(context):
181182
sb.undetectable = False
182183
sb.uc_cdp_events = False
183184
sb.uc_subprocess = False
185+
sb.log_cdp_events = False
184186
sb.no_sandbox = False
185187
sb.disable_gpu = False
186188
sb._multithreaded = False
@@ -549,6 +551,10 @@ def get_configured_sb(context):
549551
sb.uc_subprocess = True
550552
sb.undetectable = True
551553
continue
554+
# Handle: -D log-cdp-events / log_cdp_events / log-cdp
555+
if low_key in ["log-cdp-events", "log_cdp_events", "log-cdp"]:
556+
sb.log_cdp_events = True
557+
continue
552558
# Handle: -D no-sandbox / no_sandbox
553559
if low_key in ["no-sandbox", "no_sandbox"]:
554560
sb.no_sandbox = True

seleniumbase/core/browser_launcher.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,7 @@ def _set_chrome_options(
714714
undetectable,
715715
uc_cdp_events,
716716
uc_subprocess,
717+
log_cdp_events,
717718
no_sandbox,
718719
disable_gpu,
719720
headless2,
@@ -787,6 +788,10 @@ def _set_chrome_options(
787788
"excludeSwitches",
788789
["enable-automation", "enable-logging", "enable-blink-features"],
789790
)
791+
if log_cdp_events:
792+
chrome_options.set_capability(
793+
"goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"}
794+
)
790795
if mobile_emulator and not is_using_uc(undetectable, browser_name):
791796
emulator_settings = {}
792797
device_metrics = {}
@@ -1258,6 +1263,7 @@ def get_driver(
12581263
undetectable=False,
12591264
uc_cdp_events=False,
12601265
uc_subprocess=False,
1266+
log_cdp_events=False,
12611267
no_sandbox=False,
12621268
disable_gpu=False,
12631269
headless2=False,
@@ -1468,6 +1474,7 @@ def get_driver(
14681474
undetectable,
14691475
uc_cdp_events,
14701476
uc_subprocess,
1477+
log_cdp_events,
14711478
no_sandbox,
14721479
disable_gpu,
14731480
headless2,
@@ -1521,6 +1528,7 @@ def get_driver(
15211528
undetectable,
15221529
uc_cdp_events,
15231530
uc_subprocess,
1531+
log_cdp_events,
15241532
no_sandbox,
15251533
disable_gpu,
15261534
headless2,
@@ -1578,6 +1586,7 @@ def get_remote_driver(
15781586
undetectable,
15791587
uc_cdp_events,
15801588
uc_subprocess,
1589+
log_cdp_events,
15811590
no_sandbox,
15821591
disable_gpu,
15831592
headless2,
@@ -1698,6 +1707,7 @@ def get_remote_driver(
16981707
undetectable,
16991708
uc_cdp_events,
17001709
uc_subprocess,
1710+
log_cdp_events,
17011711
no_sandbox,
17021712
disable_gpu,
17031713
headless2,
@@ -1861,6 +1871,7 @@ def get_remote_driver(
18611871
undetectable,
18621872
uc_cdp_events,
18631873
uc_subprocess,
1874+
log_cdp_events,
18641875
no_sandbox,
18651876
disable_gpu,
18661877
headless2,
@@ -1974,6 +1985,7 @@ def get_local_driver(
19741985
undetectable,
19751986
uc_cdp_events,
19761987
uc_subprocess,
1988+
log_cdp_events,
19771989
no_sandbox,
19781990
disable_gpu,
19791991
headless2,
@@ -2382,6 +2394,10 @@ def get_local_driver(
23822394
edge_options.add_experimental_option(
23832395
"excludeSwitches", ["enable-automation", "enable-logging"]
23842396
)
2397+
if log_cdp_events:
2398+
edge_options.set_capability(
2399+
"ms:loggingPrefs", {"performance": "ALL", "browser": "ALL"}
2400+
)
23852401
if not enable_sync:
23862402
edge_options.add_argument("--disable-sync")
23872403
if (
@@ -2712,6 +2728,7 @@ def get_local_driver(
27122728
undetectable,
27132729
uc_cdp_events,
27142730
uc_subprocess,
2731+
log_cdp_events,
27152732
no_sandbox,
27162733
disable_gpu,
27172734
headless2,

seleniumbase/fixtures/base_case.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3737,6 +3737,7 @@ def get_new_driver(
37373737
undetectable=None,
37383738
uc_cdp_events=None,
37393739
uc_subprocess=None,
3740+
log_cdp_events=None,
37403741
no_sandbox=None,
37413742
disable_gpu=None,
37423743
headless2=None,
@@ -3793,6 +3794,7 @@ def get_new_driver(
37933794
undetectable - the option to use an undetectable chromedriver
37943795
uc_cdp_events - capture CDP events in "undetectable" mode (Chrome)
37953796
uc_subprocess - use the undetectable chromedriver as a subprocess
3797+
log_cdp_events - capture {"performance": "ALL", "browser": "ALL"})
37963798
no_sandbox - the option to enable the "No-Sandbox" feature (Chrome)
37973799
disable_gpu - the option to enable Chrome's "Disable GPU" feature
37983800
headless2 - the option to use the newer headless mode (Chromium)
@@ -3895,6 +3897,8 @@ def get_new_driver(
38953897
uc_cdp_events = self.uc_cdp_events
38963898
if uc_subprocess is None:
38973899
uc_subprocess = self.uc_subprocess
3900+
if log_cdp_events is None:
3901+
log_cdp_events = self.log_cdp_events
38983902
if no_sandbox is None:
38993903
no_sandbox = self.no_sandbox
39003904
if disable_gpu is None:
@@ -3992,6 +3996,7 @@ def get_new_driver(
39923996
undetectable=undetectable,
39933997
uc_cdp_events=uc_cdp_events,
39943998
uc_subprocess=uc_subprocess,
3999+
log_cdp_events=log_cdp_events,
39954000
no_sandbox=no_sandbox,
39964001
disable_gpu=disable_gpu,
39974002
headless2=headless2,
@@ -14233,6 +14238,7 @@ def setUp(self, masterqa_mode=False):
1423314238
self.undetectable = sb_config.undetectable
1423414239
self.uc_cdp_events = sb_config.uc_cdp_events
1423514240
self.uc_subprocess = sb_config.uc_subprocess
14241+
self.log_cdp_events = sb_config.log_cdp_events
1423614242
self.no_sandbox = sb_config.no_sandbox
1423714243
self.disable_gpu = sb_config.disable_gpu
1423814244
self.headless2 = sb_config.headless2
@@ -14556,6 +14562,7 @@ def setUp(self, masterqa_mode=False):
1455614562
undetectable=self.undetectable,
1455714563
uc_cdp_events=self.uc_cdp_events,
1455814564
uc_subprocess=self.uc_subprocess,
14565+
log_cdp_events=self.log_cdp_events,
1455914566
no_sandbox=self.no_sandbox,
1456014567
disable_gpu=self.disable_gpu,
1456114568
headless2=self.headless2,

seleniumbase/plugins/driver_manager.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ def Driver(
8888
undetectable=None, # Use undetected-chromedriver to evade bot-detection.
8989
uc_cdp_events=None, # Capture CDP events in undetected-chromedriver mode.
9090
uc_subprocess=None, # Use undetected-chromedriver as a subprocess.
91+
log_cdp_events=None, # capture {"performance": "ALL", "browser": "ALL"})
9192
no_sandbox=None, # (DEPRECATED) - "--no-sandbox" is always used now.
9293
disable_gpu=None, # (DEPRECATED) - GPU is disabled if not "swiftshader".
9394
incognito=None, # Enable Chromium's Incognito mode.
@@ -120,6 +121,7 @@ def Driver(
120121
undetected=None, # Shortcut / Duplicate of "undetectable".
121122
uc_cdp=None, # Shortcut / Duplicate of "uc_cdp_events".
122123
uc_sub=None, # Shortcut / Duplicate of "uc_subprocess".
124+
log_cdp=None, # Shortcut / Duplicate of "log_cdp_events".
123125
wire=None, # Shortcut / Duplicate of "use_wire".
124126
pls=None, # Shortcut / Duplicate of "page_load_strategy".
125127
):
@@ -352,6 +354,20 @@ def Driver(
352354
uc_cdp_events = True
353355
else:
354356
uc_cdp_events = False
357+
if log_cdp_events is None and log_cdp is None:
358+
if (
359+
"--log-cdp-events" in sys_argv
360+
or "--log_cdp_events" in sys_argv
361+
or "--log-cdp" in sys_argv
362+
or "--log_cdp" in sys_argv
363+
):
364+
log_cdp_events = True
365+
else:
366+
log_cdp_events = False
367+
elif log_cdp_events or log_cdp:
368+
log_cdp_events = True
369+
else:
370+
log_cdp_events = False
355371
if use_auto_ext is None:
356372
if "--use-auto-ext" in sys_argv:
357373
use_auto_ext = True
@@ -458,6 +474,7 @@ def Driver(
458474
undetectable=undetectable,
459475
uc_cdp_events=uc_cdp_events,
460476
uc_subprocess=uc_subprocess,
477+
log_cdp_events=log_cdp_events,
461478
no_sandbox=no_sandbox,
462479
disable_gpu=disable_gpu,
463480
headless2=headless2,

seleniumbase/plugins/pytest_plugin.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def pytest_addoption(parser):
9090
--enable-sync (Enable "Chrome Sync" on websites.)
9191
--uc | --undetected (Use undetected-chromedriver to evade bot-detection.)
9292
--uc-cdp-events (Capture CDP events when running in "--undetected" mode.)
93+
--log-cdp ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
9394
--remote-debug (Sync to Chrome Remote Debugger chrome://inspect/#devices)
9495
--ftrace | --final-trace (Debug Mode after each test. Don't use with CI!)
9596
--dashboard (Enable the SeleniumBase Dashboard. Saved at: dashboard.html)
@@ -1012,6 +1013,17 @@ def pytest_addoption(parser):
10121013
Using this enables the "Disable GPU" feature.
10131014
(GPU is disabled by default if swiftshader off.)""",
10141015
)
1016+
parser.addoption(
1017+
"--log_cdp",
1018+
"--log-cdp",
1019+
"--log_cdp_events",
1020+
"--log-cdp-events",
1021+
action="store_true",
1022+
dest="log_cdp_events",
1023+
default=None,
1024+
help="""Capture CDP events. Then you can print them.
1025+
Eg. print(driver.get_log("performance"))""",
1026+
)
10151027
parser.addoption(
10161028
"--remote_debug",
10171029
"--remote-debug",
@@ -1520,6 +1532,7 @@ def pytest_configure(config):
15201532
sb_config.undetectable = True
15211533
sb_config.no_sandbox = config.getoption("no_sandbox")
15221534
sb_config.disable_gpu = config.getoption("disable_gpu")
1535+
sb_config.log_cdp_events = config.getoption("log_cdp_events")
15231536
sb_config.remote_debug = config.getoption("remote_debug")
15241537
sb_config.final_debug = config.getoption("final_debug")
15251538
sb_config.dashboard = config.getoption("dashboard")

seleniumbase/plugins/sb_manager.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def SB(
5454
undetectable=None, # Use undetected-chromedriver to evade bot-detection.
5555
uc_cdp_events=None, # Capture CDP events in undetected-chromedriver mode.
5656
uc_subprocess=None, # Use undetected-chromedriver as a subprocess.
57+
log_cdp_events=None, # capture {"performance": "ALL", "browser": "ALL"})
5758
incognito=None, # Enable Chromium's Incognito mode.
5859
guest_mode=None, # Enable Chromium's Guest mode.
5960
dark_mode=None, # Enable Chromium's Dark mode.
@@ -99,6 +100,7 @@ def SB(
99100
undetected=None, # Shortcut / Duplicate of "undetectable".
100101
uc_cdp=None, # Shortcut / Duplicate of "uc_cdp_events".
101102
uc_sub=None, # Shortcut / Duplicate of "uc_subprocess".
103+
log_cdp=None, # Shortcut / Duplicate of "log_cdp_events".
102104
wire=None, # Shortcut / Duplicate of "use_wire".
103105
pls=None, # Shortcut / Duplicate of "page_load_strategy".
104106
sjw=None, # Shortcut / Duplicate of "skip_js_waits".
@@ -470,6 +472,20 @@ def SB(
470472
uc_cdp_events = True
471473
else:
472474
uc_cdp_events = False
475+
if log_cdp_events is None and log_cdp is None:
476+
if (
477+
"--log-cdp-events" in sys_argv
478+
or "--log_cdp_events" in sys_argv
479+
or "--log-cdp" in sys_argv
480+
or "--log_cdp" in sys_argv
481+
):
482+
log_cdp_events = True
483+
else:
484+
log_cdp_events = False
485+
elif log_cdp_events or log_cdp:
486+
log_cdp_events = True
487+
else:
488+
log_cdp_events = False
473489
if use_auto_ext is None:
474490
if "--use-auto-ext" in sys_argv:
475491
use_auto_ext = True
@@ -659,6 +675,7 @@ def SB(
659675
sb_config.undetectable = undetectable
660676
sb_config.uc_cdp_events = uc_cdp_events
661677
sb_config.uc_subprocess = uc_subprocess
678+
sb_config.log_cdp_events = log_cdp_events
662679
sb_config.no_sandbox = None
663680
sb_config.disable_gpu = None
664681
sb_config.disable_js = disable_js
@@ -761,6 +778,7 @@ def SB(
761778
sb.undetectable = sb_config.undetectable
762779
sb.uc_cdp_events = sb_config.uc_cdp_events
763780
sb.uc_subprocess = sb_config.uc_subprocess
781+
sb.log_cdp_events = sb_config.log_cdp_events
764782
sb.no_sandbox = sb_config.no_sandbox
765783
sb.disable_gpu = sb_config.disable_gpu
766784
sb.disable_js = sb_config.disable_js

seleniumbase/plugins/selenium_plugin.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class SeleniumBrowser(Plugin):
6969
--enable-sync (Enable "Chrome Sync" on websites.)
7070
--uc | --undetected (Use undetected-chromedriver to evade bot-detection.)
7171
--uc-cdp-events (Capture CDP events when running in "--undetected" mode.)
72+
--log-cdp ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
7273
--remote-debug (Sync to Chrome Remote Debugger chrome://inspect/#devices)
7374
--enable-3d-apis (Enables WebGL and 3D APIs.)
7475
--swiftshader (Chrome "--use-gl=angle" / "--use-angle=swiftshader-webgl")
@@ -730,7 +731,8 @@ def options(self, parser, env):
730731
action="store_true",
731732
dest="no_sandbox",
732733
default=False,
733-
help="""Using this enables the "No Sandbox" feature.
734+
help="""(DEPRECATED) - "--no-sandbox" is always used now.
735+
Using this enables the "No Sandbox" feature.
734736
(This setting is now always enabled by default.)""",
735737
)
736738
parser.addoption(
@@ -739,8 +741,20 @@ def options(self, parser, env):
739741
action="store_true",
740742
dest="disable_gpu",
741743
default=False,
742-
help="""Using this enables the "Disable GPU" feature.
743-
(This setting is now always enabled by default.)""",
744+
help="""(DEPRECATED) - GPU is disabled if no swiftshader.
745+
Using this enables the "Disable GPU" feature.
746+
(GPU is disabled by default if swiftshader off.)""",
747+
)
748+
parser.addoption(
749+
"--log_cdp",
750+
"--log-cdp",
751+
"--log_cdp_events",
752+
"--log-cdp-events",
753+
action="store_true",
754+
dest="log_cdp_events",
755+
default=None,
756+
help="""Capture CDP events. Then you can print them.
757+
Eg. print(driver.get_log("performance"))""",
744758
)
745759
parser.addoption(
746760
"--remote_debug",
@@ -1103,6 +1117,7 @@ def beforeTest(self, test):
11031117
test.test.use_auto_ext = self.options.use_auto_ext
11041118
test.test.undetectable = self.options.undetectable
11051119
test.test.uc_cdp_events = self.options.uc_cdp_events
1120+
test.test.log_cdp_events = self.options.log_cdp_events
11061121
if test.test.uc_cdp_events and not test.test.undetectable:
11071122
test.test.undetectable = True
11081123
test.test.uc_subprocess = self.options.uc_subprocess

0 commit comments

Comments
 (0)