seleniumbase 4.43.2__tar.gz → 4.44.15__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {seleniumbase-4.43.2/seleniumbase.egg-info → seleniumbase-4.44.15}/PKG-INFO +35 -25
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/README.md +18 -12
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/pyproject.toml +4 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/requirements.txt +14 -10
- seleniumbase-4.44.15/seleniumbase/__version__.py +2 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/behave/behave_sb.py +8 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/browser_launcher.py +201 -51
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/detect_b_ver.py +51 -15
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/log_helper.py +2 -2
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/report_helper.py +1 -1
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/sb_cdp.py +276 -112
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/sb_driver.py +36 -5
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/base_case.py +174 -43
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/constants.py +25 -9
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/js_utils.py +7 -6
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/page_actions.py +24 -1
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/masterqa/master_qa.py +16 -2
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/plugins/base_plugin.py +8 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/plugins/driver_manager.py +120 -1
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/plugins/pytest_plugin.py +178 -17
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/plugins/sb_manager.py +134 -16
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/plugins/selenium_plugin.py +125 -0
- seleniumbase-4.44.15/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/cdp.py +1 -12
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/cdp_driver/browser.py +205 -99
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/cdp_driver/cdp_util.py +25 -1
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/cdp_driver/config.py +13 -4
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/cdp_driver/connection.py +4 -35
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/cdp_driver/element.py +81 -21
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/cdp_driver/tab.py +14 -23
- seleniumbase-4.44.15/seleniumbase/utilities/__init__.py +0 -0
- seleniumbase-4.44.15/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- seleniumbase-4.44.15/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15/seleniumbase.egg-info}/PKG-INFO +35 -25
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase.egg-info/SOURCES.txt +4 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase.egg-info/requires.txt +20 -12
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/setup.py +20 -12
- seleniumbase-4.43.2/seleniumbase/__version__.py +0 -2
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/.gitignore +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/LICENSE +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/MANIFEST.in +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/install.sh +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/pytest.ini +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/sbase/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/sbase/__main__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/sbase/steps.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.43.2/seleniumbase/drivers/cft_drivers → seleniumbase-4.44.15/seleniumbase/drivers/atlas_drivers}/__init__.py +0 -0
- {seleniumbase-4.43.2/seleniumbase/drivers/chs_drivers → seleniumbase-4.44.15/seleniumbase/drivers/brave_drivers}/__init__.py +0 -0
- {seleniumbase-4.43.2/seleniumbase/extensions → seleniumbase-4.44.15/seleniumbase/drivers/cft_drivers}/__init__.py +0 -0
- {seleniumbase-4.43.2/seleniumbase/fixtures → seleniumbase-4.44.15/seleniumbase/drivers/chs_drivers}/__init__.py +0 -0
- {seleniumbase-4.43.2/seleniumbase/js_code → seleniumbase-4.44.15/seleniumbase/drivers/comet_drivers}/__init__.py +0 -0
- {seleniumbase-4.43.2/seleniumbase/masterqa → seleniumbase-4.44.15/seleniumbase/drivers/opera_drivers}/__init__.py +0 -0
- {seleniumbase-4.43.2/seleniumbase/plugins → seleniumbase-4.44.15/seleniumbase/extensions}/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.43.2/seleniumbase/resources → seleniumbase-4.44.15/seleniumbase/fixtures}/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.43.2/seleniumbase/utilities → seleniumbase-4.44.15/seleniumbase/js_code}/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.43.2/seleniumbase/utilities/selenium_grid → seleniumbase-4.44.15/seleniumbase/masterqa}/__init__.py +0 -0
- {seleniumbase-4.43.2/seleniumbase/utilities/selenium_ide → seleniumbase-4.44.15/seleniumbase/plugins}/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/setup.cfg +0 -0
- {seleniumbase-4.43.2 → seleniumbase-4.44.15}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.44.15
|
|
4
4
|
Summary: A complete web automation framework for end-to-end testing.
|
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
|
6
6
|
Author: Michael Mintz
|
|
@@ -60,14 +60,14 @@ Requires-Python: >=3.8
|
|
|
60
60
|
Description-Content-Type: text/markdown
|
|
61
61
|
License-File: LICENSE
|
|
62
62
|
Requires-Dist: pip>=25.0.1; python_version < "3.9"
|
|
63
|
-
Requires-Dist: pip>=25.
|
|
63
|
+
Requires-Dist: pip>=25.3; python_version >= "3.9"
|
|
64
64
|
Requires-Dist: packaging>=25.0
|
|
65
65
|
Requires-Dist: setuptools~=70.2; python_version < "3.10"
|
|
66
66
|
Requires-Dist: setuptools>=80.9.0; python_version >= "3.10"
|
|
67
67
|
Requires-Dist: wheel>=0.45.1
|
|
68
68
|
Requires-Dist: attrs~=25.3.0; python_version < "3.9"
|
|
69
69
|
Requires-Dist: attrs>=25.4.0; python_version >= "3.9"
|
|
70
|
-
Requires-Dist: certifi>=2025.
|
|
70
|
+
Requires-Dist: certifi>=2025.11.12
|
|
71
71
|
Requires-Dist: exceptiongroup>=1.3.0
|
|
72
72
|
Requires-Dist: websockets~=13.1; python_version < "3.9"
|
|
73
73
|
Requires-Dist: websockets>=15.0.1; python_version >= "3.9"
|
|
@@ -75,7 +75,7 @@ Requires-Dist: filelock~=3.16.1; python_version < "3.9"
|
|
|
75
75
|
Requires-Dist: filelock~=3.19.1; python_version >= "3.9" and python_version < "3.10"
|
|
76
76
|
Requires-Dist: filelock>=3.20.0; python_version >= "3.10"
|
|
77
77
|
Requires-Dist: fasteners>=0.20
|
|
78
|
-
Requires-Dist: mycdp>=1.
|
|
78
|
+
Requires-Dist: mycdp>=1.3.0
|
|
79
79
|
Requires-Dist: pynose>=1.5.5
|
|
80
80
|
Requires-Dist: platformdirs~=4.3.6; python_version < "3.9"
|
|
81
81
|
Requires-Dist: platformdirs~=4.4.0; python_version >= "3.9" and python_version < "3.10"
|
|
@@ -94,7 +94,7 @@ Requires-Dist: pyyaml>=6.0.3
|
|
|
94
94
|
Requires-Dist: pygments>=2.19.2
|
|
95
95
|
Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
|
|
96
96
|
Requires-Dist: tabcompleter>=1.4.0
|
|
97
|
-
Requires-Dist: pdbp>=1.8.
|
|
97
|
+
Requires-Dist: pdbp>=1.8.1
|
|
98
98
|
Requires-Dist: idna>=3.11
|
|
99
99
|
Requires-Dist: chardet==5.2.0
|
|
100
100
|
Requires-Dist: charset-normalizer<4,>=3.4.4
|
|
@@ -106,24 +106,28 @@ Requires-Dist: sniffio==1.3.1
|
|
|
106
106
|
Requires-Dist: h11==0.16.0
|
|
107
107
|
Requires-Dist: outcome==1.3.0.post0
|
|
108
108
|
Requires-Dist: trio==0.27.0; python_version < "3.9"
|
|
109
|
-
Requires-Dist: trio<1,>=0.31.0; python_version >= "3.9"
|
|
109
|
+
Requires-Dist: trio<1,>=0.31.0; python_version >= "3.9" and python_version < "3.10"
|
|
110
|
+
Requires-Dist: trio<1,>=0.32.0; python_version >= "3.10"
|
|
110
111
|
Requires-Dist: trio-websocket~=0.12.2
|
|
111
|
-
Requires-Dist: wsproto==1.2.0
|
|
112
|
+
Requires-Dist: wsproto==1.2.0; python_version < "3.10"
|
|
113
|
+
Requires-Dist: wsproto==1.3.1; python_version >= "3.10"
|
|
112
114
|
Requires-Dist: websocket-client~=1.8.0; python_version < "3.9"
|
|
113
115
|
Requires-Dist: websocket-client~=1.9.0; python_version >= "3.9"
|
|
114
116
|
Requires-Dist: selenium==4.27.1; python_version < "3.9"
|
|
115
117
|
Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
|
|
116
|
-
Requires-Dist: selenium==4.
|
|
118
|
+
Requires-Dist: selenium==4.38.0; python_version >= "3.10"
|
|
117
119
|
Requires-Dist: cssselect==1.2.0; python_version < "3.9"
|
|
118
120
|
Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
|
|
119
121
|
Requires-Dist: sortedcontainers==2.4.0
|
|
120
|
-
Requires-Dist: execnet==2.1.1
|
|
122
|
+
Requires-Dist: execnet==2.1.1; python_version < "3.10"
|
|
123
|
+
Requires-Dist: execnet==2.1.2; python_version >= "3.10"
|
|
121
124
|
Requires-Dist: iniconfig==2.1.0; python_version < "3.10"
|
|
122
125
|
Requires-Dist: iniconfig==2.3.0; python_version >= "3.10"
|
|
123
126
|
Requires-Dist: pluggy==1.5.0; python_version < "3.9"
|
|
124
127
|
Requires-Dist: pluggy==1.6.0; python_version >= "3.9"
|
|
125
128
|
Requires-Dist: pytest==8.3.5; python_version < "3.9"
|
|
126
|
-
Requires-Dist: pytest==8.4.2; python_version >= "3.9"
|
|
129
|
+
Requires-Dist: pytest==8.4.2; python_version >= "3.9" and python_version < "3.11"
|
|
130
|
+
Requires-Dist: pytest==9.0.1; python_version >= "3.11"
|
|
127
131
|
Requires-Dist: pytest-html==4.0.2
|
|
128
132
|
Requires-Dist: pytest-metadata==3.1.1
|
|
129
133
|
Requires-Dist: pytest-ordering==0.6
|
|
@@ -151,7 +155,7 @@ Requires-Dist: allure-behave>=2.13.5; extra == "allure"
|
|
|
151
155
|
Provides-Extra: coverage
|
|
152
156
|
Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
|
|
153
157
|
Requires-Dist: coverage>=7.10.7; (python_version >= "3.9" and python_version < "3.10") and extra == "coverage"
|
|
154
|
-
Requires-Dist: coverage>=7.
|
|
158
|
+
Requires-Dist: coverage>=7.12.0; python_version >= "3.10" and extra == "coverage"
|
|
155
159
|
Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
|
|
156
160
|
Requires-Dist: pytest-cov>=7.0.0; python_version >= "3.9" and extra == "coverage"
|
|
157
161
|
Provides-Extra: flake8
|
|
@@ -170,7 +174,7 @@ Requires-Dist: mss==9.0.2; python_version < "3.9" and extra == "mss"
|
|
|
170
174
|
Requires-Dist: mss==10.0.0; python_version >= "3.9" and extra == "mss"
|
|
171
175
|
Provides-Extra: pdfminer
|
|
172
176
|
Requires-Dist: pdfminer.six==20250324; python_version < "3.9" and extra == "pdfminer"
|
|
173
|
-
Requires-Dist: pdfminer.six==
|
|
177
|
+
Requires-Dist: pdfminer.six==20251107; python_version >= "3.9" and extra == "pdfminer"
|
|
174
178
|
Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
|
|
175
179
|
Requires-Dist: cryptography==46.0.3; python_version >= "3.9" and extra == "pdfminer"
|
|
176
180
|
Requires-Dist: cffi==1.17.1; python_version < "3.9" and extra == "pdfminer"
|
|
@@ -186,7 +190,7 @@ Requires-Dist: pip-system-certs==4.0; platform_system == "Windows" and extra ==
|
|
|
186
190
|
Provides-Extra: proxy
|
|
187
191
|
Requires-Dist: proxy.py==2.4.3; extra == "proxy"
|
|
188
192
|
Provides-Extra: psutil
|
|
189
|
-
Requires-Dist: psutil==7.1.
|
|
193
|
+
Requires-Dist: psutil==7.1.2; extra == "psutil"
|
|
190
194
|
Provides-Extra: pyautogui
|
|
191
195
|
Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
|
|
192
196
|
Provides-Extra: selenium-stealth
|
|
@@ -273,29 +277,31 @@ Dynamic: summary
|
|
|
273
277
|
<br />
|
|
274
278
|
</p>
|
|
275
279
|
|
|
276
|
-
<p>SeleniumBase is a browser automation framework
|
|
280
|
+
<p>SeleniumBase is a browser automation framework that empowers software teams to innovate faster and handle modern web challenges with ease. With stealth options like CDP Mode, you'll avoid the usual restrictions imposed by websites deploying bot-detection services.</p>
|
|
277
281
|
|
|
278
282
|
--------
|
|
279
283
|
|
|
280
284
|
📚 Learn from [**over 200 examples** in the **SeleniumBase/examples/** folder](https://github.com/seleniumbase/SeleniumBase/tree/master/examples).
|
|
281
285
|
|
|
282
|
-
🐙 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> and <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a>
|
|
286
|
+
🐙 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> and <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> can bypass bot-detection, solve CAPTCHAs, and call advanced methods from the <a href="https://chromedevtools.github.io/devtools-protocol/" translate="no">Chrome Devtools Protocol</a>.
|
|
283
287
|
|
|
284
|
-
ℹ️
|
|
288
|
+
ℹ️ Many examples run with raw <code translate="no"><b>python</b></code>, although some use <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a> that expect <a href="https://docs.pytest.org/en/latest/how-to/usage.html" translate="no"><b>pytest</b></a> (a Python unit-testing framework included with SeleniumBase that can discover, collect, and run tests automatically).
|
|
285
289
|
|
|
286
290
|
--------
|
|
287
291
|
|
|
288
|
-
<p align="left">📗
|
|
292
|
+
<p align="left">📗 This script performs a Google Search using SeleniumBase UC Mode + CDP Mode:<br /><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a> (Results are saved as PDF, HTML, and PNG)</p>
|
|
289
293
|
|
|
290
294
|
```python
|
|
291
295
|
from seleniumbase import SB
|
|
292
296
|
|
|
293
|
-
with SB(
|
|
294
|
-
|
|
297
|
+
with SB(uc=True, test=True) as sb:
|
|
298
|
+
url = "https://google.com/ncr"
|
|
299
|
+
sb.activate_cdp_mode(url)
|
|
295
300
|
sb.type('[title="Search"]', "SeleniumBase GitHub page")
|
|
296
301
|
sb.click("div:not([jsname]) > * > input")
|
|
302
|
+
sb.sleep(2)
|
|
297
303
|
print(sb.get_page_title())
|
|
298
|
-
sb.sleep(
|
|
304
|
+
sb.sleep(1) # Wait for the "AI Overview" result
|
|
299
305
|
if sb.is_text_visible("Generating"):
|
|
300
306
|
sb.wait_for_text("AI Overview")
|
|
301
307
|
sb.save_as_pdf_to_logs() # Saved to ./latest_logs/
|
|
@@ -317,8 +323,8 @@ from seleniumbase import SB
|
|
|
317
323
|
with SB(uc=True, test=True, locale="en") as sb:
|
|
318
324
|
url = "https://gitlab.com/users/sign_in"
|
|
319
325
|
sb.activate_cdp_mode(url)
|
|
320
|
-
sb.sleep(2
|
|
321
|
-
sb.
|
|
326
|
+
sb.sleep(2)
|
|
327
|
+
sb.solve_captcha()
|
|
322
328
|
# (The rest is for testing and demo purposes)
|
|
323
329
|
sb.assert_text("Username", '[for="user_login"]', timeout=3)
|
|
324
330
|
sb.assert_element('label[for="user_login"]')
|
|
@@ -335,9 +341,9 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
|
335
341
|
from seleniumbase import sb_cdp
|
|
336
342
|
|
|
337
343
|
url = "https://gitlab.com/users/sign_in"
|
|
338
|
-
sb = sb_cdp.Chrome(url)
|
|
339
|
-
sb.sleep(2
|
|
340
|
-
sb.
|
|
344
|
+
sb = sb_cdp.Chrome(url, incognito=True)
|
|
345
|
+
sb.sleep(2)
|
|
346
|
+
sb.solve_captcha()
|
|
341
347
|
sb.highlight('h1:contains("GitLab")')
|
|
342
348
|
sb.highlight('button:contains("Sign in")')
|
|
343
349
|
sb.driver.stop()
|
|
@@ -871,6 +877,10 @@ pytest test_coffee_cart.py --trace
|
|
|
871
877
|
--edge # (Shortcut for "--browser=edge".)
|
|
872
878
|
--firefox # (Shortcut for "--browser=firefox".)
|
|
873
879
|
--safari # (Shortcut for "--browser=safari".)
|
|
880
|
+
--opera # (Shortcut for "--browser=opera".)
|
|
881
|
+
--brave # (Shortcut for "--browser=brave".)
|
|
882
|
+
--comet # (Shortcut for "--browser=comet".)
|
|
883
|
+
--atlas # (Shortcut for "--browser=atlas".)
|
|
874
884
|
--settings-file=FILE # (Override default SeleniumBase settings.)
|
|
875
885
|
--env=ENV # (Set the test env. Access with "self.env" in tests.)
|
|
876
886
|
--account=STR # (Set account. Access with "self.account" in tests.)
|
|
@@ -54,29 +54,31 @@
|
|
|
54
54
|
<br />
|
|
55
55
|
</p>
|
|
56
56
|
|
|
57
|
-
<p>SeleniumBase is a browser automation framework
|
|
57
|
+
<p>SeleniumBase is a browser automation framework that empowers software teams to innovate faster and handle modern web challenges with ease. With stealth options like CDP Mode, you'll avoid the usual restrictions imposed by websites deploying bot-detection services.</p>
|
|
58
58
|
|
|
59
59
|
--------
|
|
60
60
|
|
|
61
61
|
📚 Learn from [**over 200 examples** in the **SeleniumBase/examples/** folder](https://github.com/seleniumbase/SeleniumBase/tree/master/examples).
|
|
62
62
|
|
|
63
|
-
🐙 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> and <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a>
|
|
63
|
+
🐙 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> and <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> can bypass bot-detection, solve CAPTCHAs, and call advanced methods from the <a href="https://chromedevtools.github.io/devtools-protocol/" translate="no">Chrome Devtools Protocol</a>.
|
|
64
64
|
|
|
65
|
-
ℹ️
|
|
65
|
+
ℹ️ Many examples run with raw <code translate="no"><b>python</b></code>, although some use <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a> that expect <a href="https://docs.pytest.org/en/latest/how-to/usage.html" translate="no"><b>pytest</b></a> (a Python unit-testing framework included with SeleniumBase that can discover, collect, and run tests automatically).
|
|
66
66
|
|
|
67
67
|
--------
|
|
68
68
|
|
|
69
|
-
<p align="left">📗
|
|
69
|
+
<p align="left">📗 This script performs a Google Search using SeleniumBase UC Mode + CDP Mode:<br /><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a> (Results are saved as PDF, HTML, and PNG)</p>
|
|
70
70
|
|
|
71
71
|
```python
|
|
72
72
|
from seleniumbase import SB
|
|
73
73
|
|
|
74
|
-
with SB(
|
|
75
|
-
|
|
74
|
+
with SB(uc=True, test=True) as sb:
|
|
75
|
+
url = "https://google.com/ncr"
|
|
76
|
+
sb.activate_cdp_mode(url)
|
|
76
77
|
sb.type('[title="Search"]', "SeleniumBase GitHub page")
|
|
77
78
|
sb.click("div:not([jsname]) > * > input")
|
|
79
|
+
sb.sleep(2)
|
|
78
80
|
print(sb.get_page_title())
|
|
79
|
-
sb.sleep(
|
|
81
|
+
sb.sleep(1) # Wait for the "AI Overview" result
|
|
80
82
|
if sb.is_text_visible("Generating"):
|
|
81
83
|
sb.wait_for_text("AI Overview")
|
|
82
84
|
sb.save_as_pdf_to_logs() # Saved to ./latest_logs/
|
|
@@ -98,8 +100,8 @@ from seleniumbase import SB
|
|
|
98
100
|
with SB(uc=True, test=True, locale="en") as sb:
|
|
99
101
|
url = "https://gitlab.com/users/sign_in"
|
|
100
102
|
sb.activate_cdp_mode(url)
|
|
101
|
-
sb.sleep(2
|
|
102
|
-
sb.
|
|
103
|
+
sb.sleep(2)
|
|
104
|
+
sb.solve_captcha()
|
|
103
105
|
# (The rest is for testing and demo purposes)
|
|
104
106
|
sb.assert_text("Username", '[for="user_login"]', timeout=3)
|
|
105
107
|
sb.assert_element('label[for="user_login"]')
|
|
@@ -116,9 +118,9 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
|
116
118
|
from seleniumbase import sb_cdp
|
|
117
119
|
|
|
118
120
|
url = "https://gitlab.com/users/sign_in"
|
|
119
|
-
sb = sb_cdp.Chrome(url)
|
|
120
|
-
sb.sleep(2
|
|
121
|
-
sb.
|
|
121
|
+
sb = sb_cdp.Chrome(url, incognito=True)
|
|
122
|
+
sb.sleep(2)
|
|
123
|
+
sb.solve_captcha()
|
|
122
124
|
sb.highlight('h1:contains("GitLab")')
|
|
123
125
|
sb.highlight('button:contains("Sign in")')
|
|
124
126
|
sb.driver.stop()
|
|
@@ -652,6 +654,10 @@ pytest test_coffee_cart.py --trace
|
|
|
652
654
|
--edge # (Shortcut for "--browser=edge".)
|
|
653
655
|
--firefox # (Shortcut for "--browser=firefox".)
|
|
654
656
|
--safari # (Shortcut for "--browser=safari".)
|
|
657
|
+
--opera # (Shortcut for "--browser=opera".)
|
|
658
|
+
--brave # (Shortcut for "--browser=brave".)
|
|
659
|
+
--comet # (Shortcut for "--browser=comet".)
|
|
660
|
+
--atlas # (Shortcut for "--browser=atlas".)
|
|
655
661
|
--settings-file=FILE # (Override default SeleniumBase settings.)
|
|
656
662
|
--env=ENV # (Set the test env. Access with "self.env" in tests.)
|
|
657
663
|
--account=STR # (Set account. Access with "self.account" in tests.)
|
|
@@ -43,6 +43,10 @@ packages = [
|
|
|
43
43
|
"seleniumbase.drivers",
|
|
44
44
|
"seleniumbase.drivers.cft_drivers",
|
|
45
45
|
"seleniumbase.drivers.chs_drivers",
|
|
46
|
+
"seleniumbase.drivers.opera_drivers",
|
|
47
|
+
"seleniumbase.drivers.brave_drivers",
|
|
48
|
+
"seleniumbase.drivers.comet_drivers",
|
|
49
|
+
"seleniumbase.drivers.atlas_drivers",
|
|
46
50
|
"seleniumbase.extensions",
|
|
47
51
|
"seleniumbase.fixtures",
|
|
48
52
|
"seleniumbase.js_code",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
pip>=25.0.1;python_version<"3.9"
|
|
2
|
-
pip>=25.
|
|
2
|
+
pip>=25.3;python_version>="3.9"
|
|
3
3
|
packaging>=25.0
|
|
4
4
|
setuptools~=70.2;python_version<"3.10"
|
|
5
5
|
setuptools>=80.9.0;python_version>="3.10"
|
|
6
6
|
wheel>=0.45.1
|
|
7
7
|
attrs~=25.3.0;python_version<"3.9"
|
|
8
8
|
attrs>=25.4.0;python_version>="3.9"
|
|
9
|
-
certifi>=2025.
|
|
9
|
+
certifi>=2025.11.12
|
|
10
10
|
exceptiongroup>=1.3.0
|
|
11
11
|
websockets~=13.1;python_version<"3.9"
|
|
12
12
|
websockets>=15.0.1;python_version>="3.9"
|
|
@@ -14,7 +14,7 @@ filelock~=3.16.1;python_version<"3.9"
|
|
|
14
14
|
filelock~=3.19.1;python_version>="3.9" and python_version<"3.10"
|
|
15
15
|
filelock>=3.20.0;python_version>="3.10"
|
|
16
16
|
fasteners>=0.20
|
|
17
|
-
mycdp>=1.
|
|
17
|
+
mycdp>=1.3.0
|
|
18
18
|
pynose>=1.5.5
|
|
19
19
|
platformdirs~=4.3.6;python_version<"3.9"
|
|
20
20
|
platformdirs~=4.4.0;python_version>="3.9" and python_version<"3.10"
|
|
@@ -33,7 +33,7 @@ pyyaml>=6.0.3
|
|
|
33
33
|
pygments>=2.19.2
|
|
34
34
|
pyreadline3>=3.5.4;platform_system=="Windows"
|
|
35
35
|
tabcompleter>=1.4.0
|
|
36
|
-
pdbp>=1.8.
|
|
36
|
+
pdbp>=1.8.1
|
|
37
37
|
idna>=3.11
|
|
38
38
|
chardet==5.2.0
|
|
39
39
|
charset-normalizer>=3.4.4,<4
|
|
@@ -45,24 +45,28 @@ sniffio==1.3.1
|
|
|
45
45
|
h11==0.16.0
|
|
46
46
|
outcome==1.3.0.post0
|
|
47
47
|
trio==0.27.0;python_version<"3.9"
|
|
48
|
-
trio>=0.31.0,<1;python_version>="3.9"
|
|
48
|
+
trio>=0.31.0,<1;python_version>="3.9" and python_version<"3.10"
|
|
49
|
+
trio>=0.32.0,<1;python_version>="3.10"
|
|
49
50
|
trio-websocket~=0.12.2
|
|
50
|
-
wsproto==1.2.0
|
|
51
|
+
wsproto==1.2.0;python_version<"3.10"
|
|
52
|
+
wsproto==1.3.1;python_version>="3.10"
|
|
51
53
|
websocket-client~=1.8.0;python_version<"3.9"
|
|
52
54
|
websocket-client~=1.9.0;python_version>="3.9"
|
|
53
55
|
selenium==4.27.1;python_version<"3.9"
|
|
54
56
|
selenium==4.32.0;python_version>="3.9" and python_version<"3.10"
|
|
55
|
-
selenium==4.
|
|
57
|
+
selenium==4.38.0;python_version>="3.10"
|
|
56
58
|
cssselect==1.2.0;python_version<"3.9"
|
|
57
59
|
cssselect==1.3.0;python_version>="3.9"
|
|
58
60
|
sortedcontainers==2.4.0
|
|
59
|
-
execnet==2.1.1
|
|
61
|
+
execnet==2.1.1;python_version<"3.10"
|
|
62
|
+
execnet==2.1.2;python_version>="3.10"
|
|
60
63
|
iniconfig==2.1.0;python_version<"3.10"
|
|
61
64
|
iniconfig==2.3.0;python_version>="3.10"
|
|
62
65
|
pluggy==1.5.0;python_version<"3.9"
|
|
63
66
|
pluggy==1.6.0;python_version>="3.9"
|
|
64
67
|
pytest==8.3.5;python_version<"3.9"
|
|
65
|
-
pytest==8.4.2;python_version>="3.9"
|
|
68
|
+
pytest==8.4.2;python_version>="3.9" and python_version<"3.11"
|
|
69
|
+
pytest==9.0.1;python_version>="3.11"
|
|
66
70
|
pytest-html==4.0.2
|
|
67
71
|
pytest-metadata==3.1.1
|
|
68
72
|
pytest-ordering==0.6
|
|
@@ -89,7 +93,7 @@ rich>=14.2.0,<15
|
|
|
89
93
|
|
|
90
94
|
coverage>=7.6.1;python_version<"3.9"
|
|
91
95
|
coverage>=7.10.7;python_version>="3.9" and python_version<"3.10"
|
|
92
|
-
coverage>=7.
|
|
96
|
+
coverage>=7.12.0;python_version>="3.10"
|
|
93
97
|
pytest-cov>=5.0.0;python_version<"3.9"
|
|
94
98
|
pytest-cov>=7.0.0;python_version>="3.9"
|
|
95
99
|
flake8==5.0.4;python_version<"3.9"
|
|
@@ -113,6 +113,7 @@ import sys
|
|
|
113
113
|
from contextlib import suppress
|
|
114
114
|
from seleniumbase import config as sb_config
|
|
115
115
|
from seleniumbase.config import settings
|
|
116
|
+
from seleniumbase.core import detect_b_ver
|
|
116
117
|
from seleniumbase.core import download_helper
|
|
117
118
|
from seleniumbase.core import log_helper
|
|
118
119
|
from seleniumbase.core import proxy_helper
|
|
@@ -890,6 +891,13 @@ def get_configured_sb(context):
|
|
|
890
891
|
"\nOnly ONE default browser is allowed!\n"
|
|
891
892
|
"%s browsers were selected: %s" % (len(browsers), browsers)
|
|
892
893
|
)
|
|
894
|
+
if sb.browser in ["opera", "brave", "comet", "atlas"]:
|
|
895
|
+
bin_loc = detect_b_ver.get_binary_location(sb.browser)
|
|
896
|
+
if bin_loc and os.path.exists(bin_loc):
|
|
897
|
+
sb_config._cdp_browser = sb.browser
|
|
898
|
+
sb_config._cdp_bin_loc = bin_loc
|
|
899
|
+
sb_config.binary_location = bin_loc
|
|
900
|
+
sb.binary_location = bin_loc
|
|
893
901
|
# Recorder Mode can still optimize scripts in "-D headless2" mode.
|
|
894
902
|
if sb.recorder_ext and sb.headless:
|
|
895
903
|
sb.headless = False
|