Skip to content

Commit 0678243

Browse files
committed
Update Recorder Mode
1 parent 63137d4 commit 0678243

File tree

5 files changed

+92
-11
lines changed

5 files changed

+92
-11
lines changed

seleniumbase/console_scripts/sb_mkrec.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ def main():
8484
error_msg = None
8585
invalid_cmd = None
8686
use_edge = False
87+
use_opera = False
88+
use_brave = False
89+
use_comet = False
90+
use_atlas = False
8791
use_uc = False
8892
esc_end = False
8993
start_page = None
@@ -138,6 +142,14 @@ def main():
138142
help_me = True
139143
elif option.lower() == "--edge":
140144
use_edge = True
145+
elif option.lower() == "--opera":
146+
use_opera = True
147+
elif option.lower() == "--brave":
148+
use_brave = True
149+
elif option.lower() == "--comet":
150+
use_comet = True
151+
elif option.lower() == "--atlas":
152+
use_atlas = True
141153
elif option.lower() == "--ee":
142154
esc_end = True
143155
elif option.lower() in ("--gui", "--headed"):
@@ -275,6 +287,14 @@ def main():
275287
)
276288
if use_edge:
277289
run_cmd += " --edge"
290+
elif use_opera:
291+
run_cmd += " --opera"
292+
elif use_brave:
293+
run_cmd += " --brave"
294+
elif use_comet:
295+
run_cmd += " --comet"
296+
elif use_atlas:
297+
run_cmd += " --atlas"
278298
if force_gui:
279299
run_cmd += " --gui"
280300
if use_uc:

seleniumbase/console_scripts/sb_recorder.py

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,14 @@ def do_recording(file_name, url, overwrite_enabled, use_chrome, window):
144144
)
145145
if not use_chrome:
146146
command += " --edge"
147+
elif "--opera" in command_args:
148+
command += " --opera"
149+
elif "--brave" in command_args:
150+
command += " --brave"
151+
elif "--comet" in command_args:
152+
command += " --comet"
153+
elif "--atlas" in command_args:
154+
command += " --atlas"
147155
if (
148156
"--uc" in command_args
149157
or "--cdp" in command_args
@@ -226,10 +234,37 @@ def create_tkinter_gui():
226234
chk = tk.Checkbutton(window, text="Overwrite existing files", variable=cbx)
227235
chk.pack()
228236
chk.select()
237+
use_stealth = False
238+
command_args = sys.argv[2:]
239+
if (
240+
"--uc" in command_args
241+
or "--cdp" in command_args
242+
or "--undetected" in command_args
243+
or "--undetectable" in command_args
244+
):
245+
use_stealth = True
246+
browser_display = "Use Chrome over Edge"
247+
if "--opera" in command_args:
248+
browser_display = "Use Opera over Edge"
249+
elif "--brave" in command_args:
250+
browser_display = "Use Brave over Edge"
251+
elif "--comet" in command_args:
252+
browser_display = "Use Comet over Edge"
253+
elif "--atlas" in command_args:
254+
browser_display = "Use Atlas over Edge"
229255
cbb = tk.IntVar()
230-
chkb = tk.Checkbutton(window, text="Use Chrome over Edge", variable=cbb)
231-
chkb.pack()
232-
chkb.select()
256+
if not use_stealth:
257+
chkb = tk.Checkbutton(window, text=browser_display, variable=cbb)
258+
chkb.pack()
259+
if "--edge" not in command_args:
260+
chkb.select()
261+
else:
262+
chkb = tk.Checkbutton(
263+
window, text="Stealthy Chrome Mode", variable=cbb
264+
)
265+
chkb.pack()
266+
chkb.select()
267+
chkb.config(state=tk.DISABLED)
233268
tk.Label(window, text="").pack()
234269
url = tk.StringVar()
235270
tk.Label(window, text="Enter the URL to start recording on:").pack()

seleniumbase/fixtures/base_case.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5063,8 +5063,7 @@ def activate_cdp_mode(self, url=None, **kwargs):
50635063
self.undetectable = True
50645064

50655065
def activate_recorder(self):
5066-
"""Activate Recorder Mode on the current tab/window.
5067-
For persistent Recorder Mode, use the extension instead."""
5066+
"""Activate Recorder Mode on the newest tab / window."""
50685067
from seleniumbase.js_code.recorder_js import recorder_js
50695068

50705069
if not self.is_chromium():
@@ -5077,16 +5076,17 @@ def activate_recorder(self):
50775076
"The %s Recorder is for Chromium only!\n"
50785077
" (Supported browsers: Chrome and Edge)" % sc
50795078
)
5080-
url = self.driver.current_url
5079+
url = self.get_current_url()
50815080
if url.startswith(("data:", "about:", "chrome:", "edge:")):
50825081
message = (
50835082
"The URL in Recorder-Mode cannot start with: "
50845083
'"data:", "about:", "chrome:", or "edge:"!'
50855084
)
50865085
print("\n" + message)
50875086
return
5088-
if self.recorder_ext:
5087+
if self.recorder_ext and not self.undetectable:
50895088
return # The Recorder extension is already active
5089+
self.switch_to_newest_tab()
50905090
with suppress(Exception):
50915091
recorder_on = self.get_session_storage_item("recorder_activated")
50925092
if not recorder_on == "yes":

seleniumbase/plugins/pytest_plugin.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1622,10 +1622,12 @@ def pytest_addoption(parser):
16221622
if (
16231623
using_recorder
16241624
and browser_changes == 1
1625-
and browser_text not in ["chrome", "edge"]
1625+
and browser_text not in [
1626+
"chrome", "edge", "opera", "brave", "comet", "atlas"
1627+
]
16261628
):
16271629
message = (
1628-
"\n Recorder Mode ONLY supports Chrome and Edge!"
1630+
"\n Recorder Mode ONLY supports Chromium browsers!"
16291631
'\n (Your browser choice was: "%s")\n' % browser_list[0]
16301632
)
16311633
raise Exception(message)

seleniumbase/undetected/cdp_driver/browser.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,13 +469,37 @@ async def get(
469469
frame_id, loader_id, *_ = await connection.send(
470470
cdp.page.navigate(url)
471471
)
472-
if _cdp_recorder:
472+
major_browser_version = None
473+
try:
474+
major_browser_version = (
475+
int(self.info["Browser"].split("/")[-1].split(".")[0])
476+
)
477+
except Exception:
478+
pass
479+
if (
480+
_cdp_recorder
481+
and (
482+
not hasattr(sb_config, "browser")
483+
or (
484+
sb_config.browser == "chrome"
485+
and (
486+
not major_browser_version
487+
or major_browser_version >= 142
488+
)
489+
)
490+
)
491+
):
473492
# (The code below is for the Chrome 142 extension fix)
474493
from seleniumbase.js_code.recorder_js import recorder_js
475494
recorder_code = (
476495
"""window.onload = function() { %s };""" % recorder_js
477496
)
478-
await connection.send(cdp.runtime.evaluate(recorder_code))
497+
await connection.send(
498+
cdp.page.add_script_to_evaluate_on_new_document(recorder_code)
499+
)
500+
await connection.sleep(0.25)
501+
await self.wait(0.05)
502+
await connection.send(cdp.runtime.evaluate(recorder_js))
479503
# Update the frame_id on the tab
480504
connection.frame_id = frame_id
481505
connection.browser = self

0 commit comments

Comments
 (0)