seleniumbase 4.49.5__tar.gz → 4.49.7__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.49.5/seleniumbase.egg-info → seleniumbase-4.49.7}/PKG-INFO +23 -37
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/README.md +15 -13
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/requirements.txt +2 -2
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/__init__.py +0 -3
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/behave/behave_sb.py +0 -6
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/browser_launcher.py +6 -79
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/sb_driver.py +0 -23
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/base_case.py +3 -39
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/constants.py +1 -6
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/driver_manager.py +0 -14
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/pytest_plugin.py +59 -29
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/sb_manager.py +0 -15
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/selenium_plugin.py +0 -19
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/__init__.py +0 -1
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/cdp_driver/browser.py +7 -4
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/cdp_driver/connection.py +6 -2
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/patcher.py +2 -1
- {seleniumbase-4.49.5 → seleniumbase-4.49.7/seleniumbase.egg-info}/PKG-INFO +23 -37
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase.egg-info/requires.txt +6 -26
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/setup.py +7 -30
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/.gitignore +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/LICENSE +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/MANIFEST.in +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/install.sh +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/pyproject.toml +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/pytest.ini +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/sbase/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/sbase/__main__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/sbase/steps.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/sb_cdp.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/setup.cfg +0 -0
- {seleniumbase-4.49.5 → seleniumbase-4.49.7}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.49.
|
|
3
|
+
Version: 4.49.7
|
|
4
4
|
Summary: A framework for stealthy Chromium automation with CDP Mode. Includes CAPTCHA-bypass, E2E Testing, and a Playwright integration.
|
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
|
6
6
|
Author: Michael Mintz
|
|
@@ -39,6 +39,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
39
39
|
Classifier: Programming Language :: Python :: 3.12
|
|
40
40
|
Classifier: Programming Language :: Python :: 3.13
|
|
41
41
|
Classifier: Programming Language :: Python :: 3.14
|
|
42
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
42
43
|
Classifier: Topic :: Internet
|
|
43
44
|
Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
|
|
44
45
|
Classifier: Topic :: Scientific/Engineering
|
|
@@ -70,7 +71,7 @@ Requires-Dist: exceptiongroup>=1.3.1
|
|
|
70
71
|
Requires-Dist: websockets~=15.0.1; python_version < "3.10"
|
|
71
72
|
Requires-Dist: websockets>=16.0; python_version >= "3.10"
|
|
72
73
|
Requires-Dist: filelock~=3.19.1; python_version < "3.10"
|
|
73
|
-
Requires-Dist: filelock>=3.29.
|
|
74
|
+
Requires-Dist: filelock>=3.29.1; python_version >= "3.10"
|
|
74
75
|
Requires-Dist: fasteners>=0.20
|
|
75
76
|
Requires-Dist: mycdp>=1.3.7
|
|
76
77
|
Requires-Dist: pynose>=1.5.5
|
|
@@ -90,7 +91,7 @@ Requires-Dist: pygments>=2.20.0
|
|
|
90
91
|
Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
|
|
91
92
|
Requires-Dist: tabcompleter>=1.4.1
|
|
92
93
|
Requires-Dist: pdbp>=1.8.2
|
|
93
|
-
Requires-Dist: idna>=3.
|
|
94
|
+
Requires-Dist: idna>=3.18
|
|
94
95
|
Requires-Dist: charset-normalizer<4,>=3.4.7
|
|
95
96
|
Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
|
|
96
97
|
Requires-Dist: urllib3<3,>=2.7.0; python_version >= "3.10"
|
|
@@ -135,9 +136,9 @@ Requires-Dist: markdown-it-py==4.2.0; python_version >= "3.10"
|
|
|
135
136
|
Requires-Dist: mdurl==0.1.2
|
|
136
137
|
Requires-Dist: rich<16,>=15.0.0
|
|
137
138
|
Provides-Extra: allure
|
|
138
|
-
Requires-Dist: allure-pytest>=2.
|
|
139
|
-
Requires-Dist: allure-python-commons>=2.
|
|
140
|
-
Requires-Dist: allure-behave>=2.
|
|
139
|
+
Requires-Dist: allure-pytest>=2.16.0; extra == "allure"
|
|
140
|
+
Requires-Dist: allure-python-commons>=2.16.0; extra == "allure"
|
|
141
|
+
Requires-Dist: allure-behave>=2.16.0; extra == "allure"
|
|
141
142
|
Provides-Extra: coverage
|
|
142
143
|
Requires-Dist: coverage>=7.10.7; python_version < "3.10" and extra == "coverage"
|
|
143
144
|
Requires-Dist: coverage>=7.14.1; python_version >= "3.10" and extra == "coverage"
|
|
@@ -147,9 +148,6 @@ Requires-Dist: flake8==7.3.0; extra == "flake8"
|
|
|
147
148
|
Requires-Dist: mccabe==0.7.0; extra == "flake8"
|
|
148
149
|
Requires-Dist: pyflakes==3.4.0; extra == "flake8"
|
|
149
150
|
Requires-Dist: pycodestyle==2.14.0; extra == "flake8"
|
|
150
|
-
Provides-Extra: ipdb
|
|
151
|
-
Requires-Dist: ipdb==0.13.13; extra == "ipdb"
|
|
152
|
-
Requires-Dist: ipython==7.34.0; extra == "ipdb"
|
|
153
151
|
Provides-Extra: mss
|
|
154
152
|
Requires-Dist: mss==10.2.0; extra == "mss"
|
|
155
153
|
Provides-Extra: pdfminer
|
|
@@ -163,7 +161,7 @@ Provides-Extra: pillow
|
|
|
163
161
|
Requires-Dist: Pillow>=11.3.0; python_version < "3.10" and extra == "pillow"
|
|
164
162
|
Requires-Dist: Pillow>=12.2.0; python_version >= "3.10" and extra == "pillow"
|
|
165
163
|
Provides-Extra: pip-system-certs
|
|
166
|
-
Requires-Dist: pip-system-certs
|
|
164
|
+
Requires-Dist: pip-system-certs>=4.0; platform_system == "Windows" and extra == "pip-system-certs"
|
|
167
165
|
Provides-Extra: proxy
|
|
168
166
|
Requires-Dist: proxy.py==2.4.3; extra == "proxy"
|
|
169
167
|
Provides-Extra: playwright
|
|
@@ -172,20 +170,6 @@ Requires-Dist: greenlet>=3.2.5; python_version < "3.10" and extra == "playwright
|
|
|
172
170
|
Requires-Dist: greenlet>=3.5.1; python_version >= "3.10" and extra == "playwright"
|
|
173
171
|
Provides-Extra: pyautogui
|
|
174
172
|
Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
|
|
175
|
-
Provides-Extra: selenium-stealth
|
|
176
|
-
Requires-Dist: selenium-stealth==1.0.6; extra == "selenium-stealth"
|
|
177
|
-
Provides-Extra: selenium-wire
|
|
178
|
-
Requires-Dist: selenium-wire==5.1.0; extra == "selenium-wire"
|
|
179
|
-
Requires-Dist: pyOpenSSL>=24.2.1; extra == "selenium-wire"
|
|
180
|
-
Requires-Dist: pyparsing>=3.1.4; extra == "selenium-wire"
|
|
181
|
-
Requires-Dist: Brotli==1.1.0; extra == "selenium-wire"
|
|
182
|
-
Requires-Dist: blinker==1.7.0; extra == "selenium-wire"
|
|
183
|
-
Requires-Dist: h2==4.1.0; extra == "selenium-wire"
|
|
184
|
-
Requires-Dist: hpack==4.0.0; extra == "selenium-wire"
|
|
185
|
-
Requires-Dist: hyperframe==6.0.1; extra == "selenium-wire"
|
|
186
|
-
Requires-Dist: kaitaistruct==0.10; extra == "selenium-wire"
|
|
187
|
-
Requires-Dist: pyasn1==0.6.1; extra == "selenium-wire"
|
|
188
|
-
Requires-Dist: zstandard>=0.23.0; extra == "selenium-wire"
|
|
189
173
|
Dynamic: author
|
|
190
174
|
Dynamic: author-email
|
|
191
175
|
Dynamic: classifier
|
|
@@ -274,8 +258,8 @@ sb.quit()
|
|
|
274
258
|
```
|
|
275
259
|
|
|
276
260
|
<p align="center">
|
|
277
|
-
<img src="https://seleniumbase.github.io/cdn/img/results_normal.jpg" width="
|
|
278
|
-
<br><em>(All BrowserScan bot-detection
|
|
261
|
+
<img src="https://seleniumbase.github.io/cdn/img/results_normal.jpg" width="588" alt="BrowserScan Test Results: Normal">
|
|
262
|
+
<br><em>(All BrowserScan bot-detection tests passed successfully.)</em></br>
|
|
279
263
|
</p>
|
|
280
264
|
|
|
281
265
|
<b>🎭 Here's an example script that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><span translate="no">Stealthy Playwright Mode</span></a>:</b><br />(Playwright connects to a stealthy SeleniumBase browser session.)
|
|
@@ -284,21 +268,24 @@ sb.quit()
|
|
|
284
268
|
from playwright.sync_api import sync_playwright
|
|
285
269
|
from seleniumbase import sb_cdp
|
|
286
270
|
|
|
287
|
-
sb = sb_cdp.Chrome()
|
|
271
|
+
sb = sb_cdp.Chrome(guest=True)
|
|
288
272
|
endpoint_url = sb.get_endpoint_url()
|
|
289
273
|
|
|
290
274
|
with sync_playwright() as p:
|
|
291
275
|
browser = p.chromium.connect_over_cdp(endpoint_url)
|
|
292
276
|
page = browser.contexts[0].pages[0]
|
|
293
|
-
page.goto("https://
|
|
294
|
-
|
|
295
|
-
sb.sleep(3)
|
|
296
|
-
sb.quit()
|
|
277
|
+
page.goto("https://bot.sannysoft.com/")
|
|
278
|
+
page.wait_for_timeout(500)
|
|
297
279
|
```
|
|
298
280
|
|
|
281
|
+
<p align="center">
|
|
282
|
+
<img src="https://seleniumbase.github.io/other/sannysoft_success.jpg" width="470" alt="All Sannysoft tests passed successfully">
|
|
283
|
+
<br><em>(All Sannysoft bot-detection tests passed successfully.)</em></br>
|
|
284
|
+
</p>
|
|
285
|
+
|
|
299
286
|
--------
|
|
300
287
|
|
|
301
|
-
<b>**📝** The Browserscan example can be expanded into a <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_browserscan.py">test demo</a>:</b><br />(Assertions added and
|
|
288
|
+
<b>**📝** The Browserscan example can be expanded into a <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_browserscan.py">test demo</a>:</b><br />(Assertions added and elements highlighted with JavaScript.)
|
|
302
289
|
|
|
303
290
|
```python
|
|
304
291
|
from seleniumbase import sb_cdp
|
|
@@ -706,10 +693,10 @@ pip install -e .
|
|
|
706
693
|
<summary> ▶️ Here's sample output from a chromedriver download. (<b>click to expand</b>)</summary>
|
|
707
694
|
|
|
708
695
|
```zsh
|
|
709
|
-
*** chromedriver to download =
|
|
696
|
+
*** chromedriver to download = 149.0.7827.54 (Latest Stable)
|
|
710
697
|
|
|
711
698
|
Downloading chromedriver-mac-arm64.zip from:
|
|
712
|
-
https://storage.googleapis.com/chrome-for-testing-public/
|
|
699
|
+
https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.54/mac-arm64/chromedriver-mac-arm64.zip ...
|
|
713
700
|
Download Complete!
|
|
714
701
|
|
|
715
702
|
Extracting ['chromedriver'] from chromedriver-mac-arm64.zip ...
|
|
@@ -719,8 +706,8 @@ The file [chromedriver] was saved to:
|
|
|
719
706
|
~/github/SeleniumBase/seleniumbase/drivers/
|
|
720
707
|
chromedriver
|
|
721
708
|
|
|
722
|
-
Making [chromedriver
|
|
723
|
-
[chromedriver
|
|
709
|
+
Making [chromedriver 149.0.7827.54] executable ...
|
|
710
|
+
[chromedriver 149.0.7827.54] is now ready for use!
|
|
724
711
|
```
|
|
725
712
|
|
|
726
713
|
</details>
|
|
@@ -1052,7 +1039,6 @@ pytest test_coffee_cart.py --trace
|
|
|
1052
1039
|
--screenshot # (Save a screenshot at the end of each test.)
|
|
1053
1040
|
--no-screenshot # (No screenshots saved unless tests directly ask it.)
|
|
1054
1041
|
--visual-baseline # (Set the visual baseline for Visual/Layout tests.)
|
|
1055
|
-
--wire # (Use selenium-wire's webdriver for replacing selenium webdriver.)
|
|
1056
1042
|
--external-pdf # (Set Chromium "plugins.always_open_pdf_externally":True.)
|
|
1057
1043
|
--timeout-multiplier=MULTIPLIER # (Multiplies the default timeout values.)
|
|
1058
1044
|
--list-fail-page # (After each failing test, list the URL of the failure.)
|
|
@@ -72,8 +72,8 @@ sb.quit()
|
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
<p align="center">
|
|
75
|
-
<img src="https://seleniumbase.github.io/cdn/img/results_normal.jpg" width="
|
|
76
|
-
<br><em>(All BrowserScan bot-detection
|
|
75
|
+
<img src="https://seleniumbase.github.io/cdn/img/results_normal.jpg" width="588" alt="BrowserScan Test Results: Normal">
|
|
76
|
+
<br><em>(All BrowserScan bot-detection tests passed successfully.)</em></br>
|
|
77
77
|
</p>
|
|
78
78
|
|
|
79
79
|
<b>🎭 Here's an example script that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><span translate="no">Stealthy Playwright Mode</span></a>:</b><br />(Playwright connects to a stealthy SeleniumBase browser session.)
|
|
@@ -82,21 +82,24 @@ sb.quit()
|
|
|
82
82
|
from playwright.sync_api import sync_playwright
|
|
83
83
|
from seleniumbase import sb_cdp
|
|
84
84
|
|
|
85
|
-
sb = sb_cdp.Chrome()
|
|
85
|
+
sb = sb_cdp.Chrome(guest=True)
|
|
86
86
|
endpoint_url = sb.get_endpoint_url()
|
|
87
87
|
|
|
88
88
|
with sync_playwright() as p:
|
|
89
89
|
browser = p.chromium.connect_over_cdp(endpoint_url)
|
|
90
90
|
page = browser.contexts[0].pages[0]
|
|
91
|
-
page.goto("https://
|
|
92
|
-
|
|
93
|
-
sb.sleep(3)
|
|
94
|
-
sb.quit()
|
|
91
|
+
page.goto("https://bot.sannysoft.com/")
|
|
92
|
+
page.wait_for_timeout(500)
|
|
95
93
|
```
|
|
96
94
|
|
|
95
|
+
<p align="center">
|
|
96
|
+
<img src="https://seleniumbase.github.io/other/sannysoft_success.jpg" width="470" alt="All Sannysoft tests passed successfully">
|
|
97
|
+
<br><em>(All Sannysoft bot-detection tests passed successfully.)</em></br>
|
|
98
|
+
</p>
|
|
99
|
+
|
|
97
100
|
--------
|
|
98
101
|
|
|
99
|
-
<b>**📝** The Browserscan example can be expanded into a <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_browserscan.py">test demo</a>:</b><br />(Assertions added and
|
|
102
|
+
<b>**📝** The Browserscan example can be expanded into a <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_browserscan.py">test demo</a>:</b><br />(Assertions added and elements highlighted with JavaScript.)
|
|
100
103
|
|
|
101
104
|
```python
|
|
102
105
|
from seleniumbase import sb_cdp
|
|
@@ -504,10 +507,10 @@ pip install -e .
|
|
|
504
507
|
<summary> ▶️ Here's sample output from a chromedriver download. (<b>click to expand</b>)</summary>
|
|
505
508
|
|
|
506
509
|
```zsh
|
|
507
|
-
*** chromedriver to download =
|
|
510
|
+
*** chromedriver to download = 149.0.7827.54 (Latest Stable)
|
|
508
511
|
|
|
509
512
|
Downloading chromedriver-mac-arm64.zip from:
|
|
510
|
-
https://storage.googleapis.com/chrome-for-testing-public/
|
|
513
|
+
https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.54/mac-arm64/chromedriver-mac-arm64.zip ...
|
|
511
514
|
Download Complete!
|
|
512
515
|
|
|
513
516
|
Extracting ['chromedriver'] from chromedriver-mac-arm64.zip ...
|
|
@@ -517,8 +520,8 @@ The file [chromedriver] was saved to:
|
|
|
517
520
|
~/github/SeleniumBase/seleniumbase/drivers/
|
|
518
521
|
chromedriver
|
|
519
522
|
|
|
520
|
-
Making [chromedriver
|
|
521
|
-
[chromedriver
|
|
523
|
+
Making [chromedriver 149.0.7827.54] executable ...
|
|
524
|
+
[chromedriver 149.0.7827.54] is now ready for use!
|
|
522
525
|
```
|
|
523
526
|
|
|
524
527
|
</details>
|
|
@@ -850,7 +853,6 @@ pytest test_coffee_cart.py --trace
|
|
|
850
853
|
--screenshot # (Save a screenshot at the end of each test.)
|
|
851
854
|
--no-screenshot # (No screenshots saved unless tests directly ask it.)
|
|
852
855
|
--visual-baseline # (Set the visual baseline for Visual/Layout tests.)
|
|
853
|
-
--wire # (Use selenium-wire's webdriver for replacing selenium webdriver.)
|
|
854
856
|
--external-pdf # (Set Chromium "plugins.always_open_pdf_externally":True.)
|
|
855
857
|
--timeout-multiplier=MULTIPLIER # (Multiplies the default timeout values.)
|
|
856
858
|
--list-fail-page # (After each failing test, list the URL of the failure.)
|
|
@@ -10,7 +10,7 @@ exceptiongroup>=1.3.1
|
|
|
10
10
|
websockets~=15.0.1;python_version<"3.10"
|
|
11
11
|
websockets>=16.0;python_version>="3.10"
|
|
12
12
|
filelock~=3.19.1;python_version<"3.10"
|
|
13
|
-
filelock>=3.29.
|
|
13
|
+
filelock>=3.29.1;python_version>="3.10"
|
|
14
14
|
fasteners>=0.20
|
|
15
15
|
mycdp>=1.3.7
|
|
16
16
|
pynose>=1.5.5
|
|
@@ -30,7 +30,7 @@ pygments>=2.20.0
|
|
|
30
30
|
pyreadline3>=3.5.4;platform_system=="Windows"
|
|
31
31
|
tabcompleter>=1.4.1
|
|
32
32
|
pdbp>=1.8.2
|
|
33
|
-
idna>=3.
|
|
33
|
+
idna>=3.18
|
|
34
34
|
charset-normalizer>=3.4.7,<4
|
|
35
35
|
urllib3>=1.26.20,<2;python_version<"3.10"
|
|
36
36
|
urllib3>=2.7.0,<3;python_version>="3.10"
|
|
@@ -3,7 +3,6 @@ import os
|
|
|
3
3
|
import pdb
|
|
4
4
|
import sys
|
|
5
5
|
from contextlib import suppress
|
|
6
|
-
from selenium import webdriver
|
|
7
6
|
from seleniumbase.__version__ import __version__
|
|
8
7
|
from seleniumbase.common import decorators # noqa
|
|
9
8
|
from seleniumbase.common import encryption # noqa
|
|
@@ -45,13 +44,11 @@ if sys.version_info[0] < 3 and "pdbp" in locals():
|
|
|
45
44
|
pdb.DefaultConfig.sticky_by_default = True
|
|
46
45
|
colored_traceback.add_hook()
|
|
47
46
|
os.environ["SE_AVOID_STATS"] = "true" # Disable Selenium Manager stats
|
|
48
|
-
webdriver.TouchActions = None # Lifeline for past selenium-wire versions
|
|
49
47
|
if sys.version_info >= (3, 10):
|
|
50
48
|
collections.Callable = collections.abc.Callable # Lifeline for nosetests
|
|
51
49
|
del collections # Undo "import collections" / Simplify "dir(seleniumbase)"
|
|
52
50
|
del os # Undo "import os" / Simplify "dir(seleniumbase)"
|
|
53
51
|
del sys # Undo "import sys" / Simplify "dir(seleniumbase)"
|
|
54
|
-
del webdriver # Undo "import webdriver" / Simplify "dir(seleniumbase)"
|
|
55
52
|
|
|
56
53
|
version_list = [int(i) for i in __version__.split(".") if i.isdigit()]
|
|
57
54
|
version_tuple = tuple(version_list)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.49.
|
|
2
|
+
__version__ = "4.49.7"
|
|
@@ -101,7 +101,6 @@ behave -D agent="User Agent String" -D demo
|
|
|
101
101
|
-D screenshot (Save a screenshot at the end of each test.)
|
|
102
102
|
-D no-screenshot (No screenshots saved unless tests directly ask it.)
|
|
103
103
|
-D visual-baseline (Set the visual baseline for Visual/Layout tests.)
|
|
104
|
-
-D wire (Use selenium-wire's webdriver for replacing selenium webdriver.)
|
|
105
104
|
-D external-pdf (Set Chromium "plugins.always_open_pdf_externally":True.)
|
|
106
105
|
-D timeout-multiplier=MULTIPLIER (Multiplies the default timeout values.)
|
|
107
106
|
"""
|
|
@@ -204,7 +203,6 @@ def get_configured_sb(context):
|
|
|
204
203
|
sb._crumbs = False
|
|
205
204
|
sb._disable_beforeunload = False
|
|
206
205
|
sb.visual_baseline = False
|
|
207
|
-
sb.use_wire = False
|
|
208
206
|
sb.window_position = None
|
|
209
207
|
sb.window_size = None
|
|
210
208
|
sb.maximize_option = False
|
|
@@ -645,10 +643,6 @@ def get_configured_sb(context):
|
|
|
645
643
|
if low_key in ["visual-baseline", "visual_baseline"]:
|
|
646
644
|
sb.visual_baseline = True
|
|
647
645
|
continue
|
|
648
|
-
# Handle: -D wire
|
|
649
|
-
if low_key == "wire":
|
|
650
|
-
sb.use_wire = True
|
|
651
|
-
continue
|
|
652
646
|
# Handle: -D window-position=X,Y / window_position=X,Y
|
|
653
647
|
if low_key in ["window-position", "window_position"]:
|
|
654
648
|
window_position = userdata[key]
|
|
@@ -312,8 +312,6 @@ def extend_driver(
|
|
|
312
312
|
driver.execute_cdp_cmd(
|
|
313
313
|
"Page.addScriptToEvaluateOnNewDocument", {"source": recorder_code}
|
|
314
314
|
)
|
|
315
|
-
if hasattr(driver, "proxy"):
|
|
316
|
-
driver.set_wire_proxy = DM.set_wire_proxy
|
|
317
315
|
completed_loads = []
|
|
318
316
|
for ext_dir in sb_config._ext_dirs:
|
|
319
317
|
if ext_dir not in completed_loads:
|
|
@@ -645,14 +643,12 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
|
|
|
645
643
|
import asyncio
|
|
646
644
|
from seleniumbase.undetected.cdp_driver import cdp_util
|
|
647
645
|
|
|
648
|
-
|
|
646
|
+
time.sleep(0.012)
|
|
649
647
|
try:
|
|
650
|
-
|
|
648
|
+
driver.disconnect()
|
|
651
649
|
except Exception:
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
url_protocol = current_url.split(":")[0]
|
|
655
|
-
driver.disconnect()
|
|
650
|
+
time.sleep(0.012)
|
|
651
|
+
driver.disconnect()
|
|
656
652
|
|
|
657
653
|
cdp_details = driver._get_cdp_details()
|
|
658
654
|
cdp_host = cdp_details[1].split("://")[1].split(":")[0]
|
|
@@ -2334,7 +2330,6 @@ def _set_chrome_options(
|
|
|
2334
2330
|
binary_location,
|
|
2335
2331
|
driver_version,
|
|
2336
2332
|
page_load_strategy,
|
|
2337
|
-
use_wire,
|
|
2338
2333
|
external_pdf,
|
|
2339
2334
|
servername,
|
|
2340
2335
|
mobile_emulator,
|
|
@@ -3071,7 +3066,6 @@ def get_driver(
|
|
|
3071
3066
|
binary_location=None,
|
|
3072
3067
|
driver_version=None,
|
|
3073
3068
|
page_load_strategy=None,
|
|
3074
|
-
use_wire=False,
|
|
3075
3069
|
external_pdf=False,
|
|
3076
3070
|
test_id=None,
|
|
3077
3071
|
mobile_emulator=False,
|
|
@@ -3551,7 +3545,6 @@ def get_driver(
|
|
|
3551
3545
|
binary_location,
|
|
3552
3546
|
driver_version,
|
|
3553
3547
|
page_load_strategy,
|
|
3554
|
-
use_wire,
|
|
3555
3548
|
external_pdf,
|
|
3556
3549
|
test_id,
|
|
3557
3550
|
mobile_emulator,
|
|
@@ -3610,7 +3603,6 @@ def get_driver(
|
|
|
3610
3603
|
binary_location,
|
|
3611
3604
|
driver_version,
|
|
3612
3605
|
page_load_strategy,
|
|
3613
|
-
use_wire,
|
|
3614
3606
|
external_pdf,
|
|
3615
3607
|
mobile_emulator,
|
|
3616
3608
|
device_width,
|
|
@@ -3673,7 +3665,6 @@ def get_remote_driver(
|
|
|
3673
3665
|
binary_location,
|
|
3674
3666
|
driver_version,
|
|
3675
3667
|
page_load_strategy,
|
|
3676
|
-
use_wire,
|
|
3677
3668
|
external_pdf,
|
|
3678
3669
|
test_id,
|
|
3679
3670
|
mobile_emulator,
|
|
@@ -3681,35 +3672,6 @@ def get_remote_driver(
|
|
|
3681
3672
|
device_height,
|
|
3682
3673
|
device_pixel_ratio,
|
|
3683
3674
|
):
|
|
3684
|
-
if use_wire:
|
|
3685
|
-
pip_find_lock = fasteners.InterProcessLock(
|
|
3686
|
-
constants.PipInstall.FINDLOCK
|
|
3687
|
-
)
|
|
3688
|
-
with pip_find_lock: # Prevent issues with multiple processes
|
|
3689
|
-
with suppress(Exception):
|
|
3690
|
-
shared_utils.make_writable(constants.PipInstall.FINDLOCK)
|
|
3691
|
-
try:
|
|
3692
|
-
from seleniumwire import webdriver
|
|
3693
|
-
import blinker
|
|
3694
|
-
with suppress(Exception):
|
|
3695
|
-
use_blinker_ver = constants.SeleniumWire.BLINKER_VER
|
|
3696
|
-
if blinker.__version__ != use_blinker_ver:
|
|
3697
|
-
shared_utils.pip_install(
|
|
3698
|
-
"blinker", version=use_blinker_ver
|
|
3699
|
-
)
|
|
3700
|
-
del blinker
|
|
3701
|
-
except Exception:
|
|
3702
|
-
shared_utils.pip_install(
|
|
3703
|
-
"blinker", version=constants.SeleniumWire.BLINKER_VER
|
|
3704
|
-
)
|
|
3705
|
-
shared_utils.pip_install(
|
|
3706
|
-
"selenium-wire", version=constants.SeleniumWire.VER
|
|
3707
|
-
)
|
|
3708
|
-
from seleniumwire import webdriver
|
|
3709
|
-
warnings.simplefilter("ignore", category=DeprecationWarning)
|
|
3710
|
-
else:
|
|
3711
|
-
from selenium import webdriver
|
|
3712
|
-
|
|
3713
3675
|
# Construct the address for connecting to a Selenium Grid
|
|
3714
3676
|
if servername.startswith("https://"):
|
|
3715
3677
|
protocol = "https"
|
|
@@ -3810,7 +3772,6 @@ def get_remote_driver(
|
|
|
3810
3772
|
binary_location,
|
|
3811
3773
|
driver_version,
|
|
3812
3774
|
page_load_strategy,
|
|
3813
|
-
use_wire,
|
|
3814
3775
|
external_pdf,
|
|
3815
3776
|
servername,
|
|
3816
3777
|
mobile_emulator,
|
|
@@ -3987,7 +3948,6 @@ def get_remote_driver(
|
|
|
3987
3948
|
binary_location,
|
|
3988
3949
|
driver_version,
|
|
3989
3950
|
page_load_strategy,
|
|
3990
|
-
use_wire,
|
|
3991
3951
|
external_pdf,
|
|
3992
3952
|
servername,
|
|
3993
3953
|
mobile_emulator,
|
|
@@ -4111,7 +4071,6 @@ def get_local_driver(
|
|
|
4111
4071
|
binary_location,
|
|
4112
4072
|
driver_version,
|
|
4113
4073
|
page_load_strategy,
|
|
4114
|
-
use_wire,
|
|
4115
4074
|
external_pdf,
|
|
4116
4075
|
mobile_emulator,
|
|
4117
4076
|
device_width,
|
|
@@ -4170,35 +4129,6 @@ def get_local_driver(
|
|
|
4170
4129
|
local_uc_driver = driver_dir + "/uc_driver.exe"
|
|
4171
4130
|
b_path = binary_location
|
|
4172
4131
|
use_uc = is_using_uc(undetectable, browser_name)
|
|
4173
|
-
if use_wire:
|
|
4174
|
-
pip_find_lock = fasteners.InterProcessLock(
|
|
4175
|
-
constants.PipInstall.FINDLOCK
|
|
4176
|
-
)
|
|
4177
|
-
with pip_find_lock: # Prevent issues with multiple processes
|
|
4178
|
-
with suppress(Exception):
|
|
4179
|
-
shared_utils.make_writable(constants.PipInstall.FINDLOCK)
|
|
4180
|
-
try:
|
|
4181
|
-
from seleniumwire import webdriver
|
|
4182
|
-
import blinker
|
|
4183
|
-
with suppress(Exception):
|
|
4184
|
-
use_blinker_ver = constants.SeleniumWire.BLINKER_VER
|
|
4185
|
-
if blinker.__version__ != use_blinker_ver:
|
|
4186
|
-
shared_utils.pip_install(
|
|
4187
|
-
"blinker", version=use_blinker_ver
|
|
4188
|
-
)
|
|
4189
|
-
del blinker
|
|
4190
|
-
except Exception:
|
|
4191
|
-
shared_utils.pip_install(
|
|
4192
|
-
"blinker", version=constants.SeleniumWire.BLINKER_VER
|
|
4193
|
-
)
|
|
4194
|
-
shared_utils.pip_install(
|
|
4195
|
-
"selenium-wire", version=constants.SeleniumWire.VER
|
|
4196
|
-
)
|
|
4197
|
-
from seleniumwire import webdriver
|
|
4198
|
-
warnings.simplefilter("ignore", category=DeprecationWarning)
|
|
4199
|
-
else:
|
|
4200
|
-
from selenium import webdriver
|
|
4201
|
-
|
|
4202
4132
|
if browser_name == constants.Browser.FIREFOX:
|
|
4203
4133
|
firefox_options = _set_firefox_options(
|
|
4204
4134
|
downloads_path,
|
|
@@ -5064,7 +4994,6 @@ def get_local_driver(
|
|
|
5064
4994
|
binary_location,
|
|
5065
4995
|
driver_version,
|
|
5066
4996
|
page_load_strategy,
|
|
5067
|
-
use_wire,
|
|
5068
4997
|
external_pdf,
|
|
5069
4998
|
servername,
|
|
5070
4999
|
mobile_emulator,
|
|
@@ -5124,7 +5053,7 @@ def get_local_driver(
|
|
|
5124
5053
|
and major_chrome_version
|
|
5125
5054
|
and int(major_chrome_version) >= 117
|
|
5126
5055
|
and not use_uc
|
|
5127
|
-
and not (remote_debug or devtools
|
|
5056
|
+
and not (remote_debug or devtools)
|
|
5128
5057
|
and not (proxy_string or multi_proxy or proxy_pac_url)
|
|
5129
5058
|
and (not chromium_arg or "debug" not in chromium_arg)
|
|
5130
5059
|
and (not servername or servername == "localhost")
|
|
@@ -5632,7 +5561,6 @@ def get_local_driver(
|
|
|
5632
5561
|
binary_location,
|
|
5633
5562
|
driver_version,
|
|
5634
5563
|
page_load_strategy,
|
|
5635
|
-
use_wire,
|
|
5636
5564
|
external_pdf,
|
|
5637
5565
|
servername,
|
|
5638
5566
|
mobile_emulator,
|
|
@@ -5888,7 +5816,6 @@ def get_local_driver(
|
|
|
5888
5816
|
binary_location,
|
|
5889
5817
|
driver_version,
|
|
5890
5818
|
page_load_strategy,
|
|
5891
|
-
use_wire,
|
|
5892
5819
|
external_pdf,
|
|
5893
5820
|
servername,
|
|
5894
5821
|
mobile_emulator,
|
|
@@ -6213,7 +6140,7 @@ def get_local_driver(
|
|
|
6213
6140
|
elif extension_zip or extension_dir:
|
|
6214
6141
|
print("\nUnable to load extension while starting Chrome!\n")
|
|
6215
6142
|
raise
|
|
6216
|
-
elif headless or headless2 or IS_LINUX or proxy_string
|
|
6143
|
+
elif headless or headless2 or IS_LINUX or proxy_string:
|
|
6217
6144
|
raise
|
|
6218
6145
|
# Try running without any options (bare bones Chrome launch)
|
|
6219
6146
|
if local_chromedriver and os.path.exists(local_chromedriver):
|
|
@@ -409,26 +409,3 @@ class DriverMethods(WebDriver):
|
|
|
409
409
|
width = settings.CHROME_START_WIDTH
|
|
410
410
|
height = settings.CHROME_START_HEIGHT
|
|
411
411
|
self.driver.set_window_rect(x, y, width, height)
|
|
412
|
-
|
|
413
|
-
def set_wire_proxy(self, string):
|
|
414
|
-
"""Set a proxy server for selenium-wire mode ("--wire")
|
|
415
|
-
Examples: (ONLY avilable if using selenium-wire mode!)
|
|
416
|
-
driver.set_wire_proxy("SERVER:PORT")
|
|
417
|
-
driver.set_wire_proxy("socks5://SERVER:PORT")
|
|
418
|
-
driver.set_wire_proxy("USERNAME:PASSWORD@SERVER:PORT")
|
|
419
|
-
"""
|
|
420
|
-
the_http = "http"
|
|
421
|
-
the_https = "https"
|
|
422
|
-
if string.startswith("socks4://"):
|
|
423
|
-
the_http = "socks4"
|
|
424
|
-
the_https = "socks4"
|
|
425
|
-
elif string.startswith("socks5://"):
|
|
426
|
-
the_http = "socks5"
|
|
427
|
-
the_https = "socks5"
|
|
428
|
-
string = string.split("//")[-1]
|
|
429
|
-
if hasattr(self.driver, "proxy"):
|
|
430
|
-
self.driver.proxy = {
|
|
431
|
-
"http": "%s://%s" % (the_http, string),
|
|
432
|
-
"https": "%s://%s" % (the_https, string),
|
|
433
|
-
"no_proxy": "localhost,127.0.0.1",
|
|
434
|
-
}
|
|
@@ -4115,7 +4115,6 @@ class BaseCase(unittest.TestCase):
|
|
|
4115
4115
|
binary_location=None,
|
|
4116
4116
|
driver_version=None,
|
|
4117
4117
|
page_load_strategy=None,
|
|
4118
|
-
use_wire=None,
|
|
4119
4118
|
external_pdf=None,
|
|
4120
4119
|
is_mobile=None,
|
|
4121
4120
|
d_width=None,
|
|
@@ -4177,7 +4176,6 @@ class BaseCase(unittest.TestCase):
|
|
|
4177
4176
|
binary_location - the path of the browser binary to use (Chromium)
|
|
4178
4177
|
driver_version - the chromedriver or uc_driver version to force
|
|
4179
4178
|
page_load_strategy - the option to change pageLoadStrategy (Chrome)
|
|
4180
|
-
use_wire - Use selenium-wire webdriver instead of the selenium one
|
|
4181
4179
|
external_pdf - "plugins.always_open_pdf_externally": True. (Chrome)
|
|
4182
4180
|
is_mobile - the option to use the mobile emulator (Chrome-only)
|
|
4183
4181
|
d_width - the device width of the mobile emulator (Chrome-only)
|
|
@@ -4210,7 +4208,7 @@ class BaseCase(unittest.TestCase):
|
|
|
4210
4208
|
" for examples!)"
|
|
4211
4209
|
% (browserstack_ref, sauce_labs_ref)
|
|
4212
4210
|
)
|
|
4213
|
-
shortcuts = ["dark", "guest", "locale", "mobile", "pls", "uc"
|
|
4211
|
+
shortcuts = ["dark", "guest", "locale", "mobile", "pls", "uc"]
|
|
4214
4212
|
if kwargs:
|
|
4215
4213
|
for key in kwargs.keys():
|
|
4216
4214
|
if key not in shortcuts:
|
|
@@ -4326,10 +4324,6 @@ class BaseCase(unittest.TestCase):
|
|
|
4326
4324
|
page_load_strategy = self.page_load_strategy
|
|
4327
4325
|
if "pls" in kwargs and not page_load_strategy:
|
|
4328
4326
|
page_load_strategy = kwargs["pls"]
|
|
4329
|
-
if use_wire is None:
|
|
4330
|
-
use_wire = self.use_wire
|
|
4331
|
-
if "wire" in kwargs and not use_wire:
|
|
4332
|
-
use_wire = kwargs["wire"]
|
|
4333
4327
|
if external_pdf is None:
|
|
4334
4328
|
external_pdf = self.external_pdf
|
|
4335
4329
|
test_id = self.__get_test_id()
|
|
@@ -4408,7 +4402,6 @@ class BaseCase(unittest.TestCase):
|
|
|
4408
4402
|
binary_location=binary_location,
|
|
4409
4403
|
driver_version=driver_version,
|
|
4410
4404
|
page_load_strategy=page_load_strategy,
|
|
4411
|
-
use_wire=use_wire,
|
|
4412
4405
|
external_pdf=external_pdf,
|
|
4413
4406
|
test_id=test_id,
|
|
4414
4407
|
mobile_emulator=is_mobile,
|
|
@@ -5074,6 +5067,8 @@ class BaseCase(unittest.TestCase):
|
|
|
5074
5067
|
"""Activate CDP Mode with the URL and kwargs."""
|
|
5075
5068
|
if getattr(self.driver, "_is_using_uc", None):
|
|
5076
5069
|
if self.__is_cdp_swap_needed():
|
|
5070
|
+
if url:
|
|
5071
|
+
self.cdp.open(url, **kwargs)
|
|
5077
5072
|
return # CDP Mode is already active
|
|
5078
5073
|
if not self.is_connected():
|
|
5079
5074
|
self.driver.connect()
|
|
@@ -9380,35 +9375,6 @@ class BaseCase(unittest.TestCase):
|
|
|
9380
9375
|
|
|
9381
9376
|
############
|
|
9382
9377
|
|
|
9383
|
-
# Methods ONLY for the selenium-wire integration ("--wire")
|
|
9384
|
-
|
|
9385
|
-
def set_wire_proxy(self, string):
|
|
9386
|
-
"""Set a proxy server for selenium-wire mode ("--wire")
|
|
9387
|
-
NOTE: This method ONLY works while using "--wire" mode!
|
|
9388
|
-
Examples:
|
|
9389
|
-
self.set_wire_proxy("SERVER:PORT")
|
|
9390
|
-
self.set_wire_proxy("socks5://SERVER:PORT")
|
|
9391
|
-
self.set_wire_proxy("USERNAME:PASSWORD@SERVER:PORT") """
|
|
9392
|
-
if not string:
|
|
9393
|
-
self.driver.proxy = {}
|
|
9394
|
-
return
|
|
9395
|
-
the_http = "http"
|
|
9396
|
-
the_https = "https"
|
|
9397
|
-
if string.startswith("socks4://"):
|
|
9398
|
-
the_http = "socks4"
|
|
9399
|
-
the_https = "socks4"
|
|
9400
|
-
elif string.startswith("socks5://"):
|
|
9401
|
-
the_http = "socks5"
|
|
9402
|
-
the_https = "socks5"
|
|
9403
|
-
string = string.split("//")[-1]
|
|
9404
|
-
self.driver.proxy = {
|
|
9405
|
-
"http": "%s://%s" % (the_http, string),
|
|
9406
|
-
"https": "%s://%s" % (the_https, string),
|
|
9407
|
-
"no_proxy": "localhost,127.0.0.1",
|
|
9408
|
-
}
|
|
9409
|
-
|
|
9410
|
-
############
|
|
9411
|
-
|
|
9412
9378
|
# Duplicates (Avoids name confusion when migrating from other frameworks.)
|
|
9413
9379
|
|
|
9414
9380
|
def open_url(self, url):
|
|
@@ -15553,7 +15519,6 @@ class BaseCase(unittest.TestCase):
|
|
|
15553
15519
|
self.binary_location = sb_config.binary_location
|
|
15554
15520
|
self.driver_version = sb_config.driver_version
|
|
15555
15521
|
self.page_load_strategy = sb_config.page_load_strategy
|
|
15556
|
-
self.use_wire = sb_config.use_wire
|
|
15557
15522
|
self.external_pdf = sb_config.external_pdf
|
|
15558
15523
|
self._final_debug = sb_config.final_debug
|
|
15559
15524
|
self.window_position = sb_config.window_position
|
|
@@ -15937,7 +15902,6 @@ class BaseCase(unittest.TestCase):
|
|
|
15937
15902
|
binary_location=self.binary_location,
|
|
15938
15903
|
driver_version=self.driver_version,
|
|
15939
15904
|
page_load_strategy=self.page_load_strategy,
|
|
15940
|
-
use_wire=self.use_wire,
|
|
15941
15905
|
external_pdf=self.external_pdf,
|
|
15942
15906
|
is_mobile=self.mobile_emulator,
|
|
15943
15907
|
d_width=self.__device_width,
|
|
@@ -145,6 +145,7 @@ class Report:
|
|
|
145
145
|
if not hasattr(encoded_images, "REPORT_FAVICON"):
|
|
146
146
|
encoded_images.REPORT_FAVICON = encoded_images.get_report_favicon()
|
|
147
147
|
return encoded_images.REPORT_FAVICON
|
|
148
|
+
LOCKFILE = Files.DOWNLOADS_FOLDER + "/htmlreport.lock"
|
|
148
149
|
|
|
149
150
|
|
|
150
151
|
class SideBySide:
|
|
@@ -346,12 +347,6 @@ class ProxyPy:
|
|
|
346
347
|
VER = "2.4.3"
|
|
347
348
|
|
|
348
349
|
|
|
349
|
-
class SeleniumWire:
|
|
350
|
-
# The version installed if selenium-wire is not installed
|
|
351
|
-
VER = "5.1.0"
|
|
352
|
-
BLINKER_VER = "1.7.0" # The "blinker" dependency version
|
|
353
|
-
|
|
354
|
-
|
|
355
350
|
class PyAutoGUI:
|
|
356
351
|
# The version installed if PyAutoGUI is not installed
|
|
357
352
|
VER = "0.9.54"
|