seleniumbase 4.50.2__tar.gz → 4.50.5__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.50.2/seleniumbase.egg-info → seleniumbase-4.50.5}/PKG-INFO +10 -8
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/README.md +2 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/requirements.txt +5 -4
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/behave/behave_sb.py +5 -2
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/run.py +39 -37
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_install.py +58 -46
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/browser_launcher.py +28 -3
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/proxy_helper.py +9 -9
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/sb_cdp.py +2 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/base_case.py +22 -7
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/driver_manager.py +4 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/pytest_plugin.py +2 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/sb_manager.py +4 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/selenium_plugin.py +2 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/cdp_driver/cdp_util.py +5 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/cdp_driver/config.py +12 -2
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/cdp_driver/tab.py +12 -14
- {seleniumbase-4.50.2 → seleniumbase-4.50.5/seleniumbase.egg-info}/PKG-INFO +10 -8
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase.egg-info/requires.txt +9 -6
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/setup.py +7 -6
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/.gitignore +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/LICENSE +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/MANIFEST.in +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/install.sh +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/pyproject.toml +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/pytest.ini +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/sbase/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/sbase/__main__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/sbase/steps.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/setup.cfg +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.5}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.50.
|
|
3
|
+
Version: 4.50.5
|
|
4
4
|
Summary: SeleniumBase is a framework for web crawling, scraping, and testing. Supports pytest. CDP Mode adds stealth. Includes many tools.
|
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
|
6
6
|
Author: Michael Mintz
|
|
@@ -71,13 +71,13 @@ Requires-Dist: exceptiongroup>=1.3.1
|
|
|
71
71
|
Requires-Dist: websockets~=15.0.1; python_version < "3.10"
|
|
72
72
|
Requires-Dist: websockets>=16.0; python_version >= "3.10"
|
|
73
73
|
Requires-Dist: filelock~=3.19.1; python_version < "3.10"
|
|
74
|
-
Requires-Dist: filelock>=3.29.
|
|
74
|
+
Requires-Dist: filelock>=3.29.5; python_version >= "3.10"
|
|
75
75
|
Requires-Dist: fasteners>=0.20
|
|
76
76
|
Requires-Dist: mycdp>=1.4.0
|
|
77
77
|
Requires-Dist: pynose>=1.5.5
|
|
78
78
|
Requires-Dist: platformdirs~=4.4.0; python_version < "3.10"
|
|
79
79
|
Requires-Dist: platformdirs>=4.10.0; python_version >= "3.10"
|
|
80
|
-
Requires-Dist: typing-extensions>=4.
|
|
80
|
+
Requires-Dist: typing-extensions>=4.16.0
|
|
81
81
|
Requires-Dist: sbvirtualdisplay>=1.4.0
|
|
82
82
|
Requires-Dist: MarkupSafe>=3.0.3
|
|
83
83
|
Requires-Dist: Jinja2>=3.1.6
|
|
@@ -122,7 +122,8 @@ Requires-Dist: pytest-html==4.0.2
|
|
|
122
122
|
Requires-Dist: pytest-metadata==3.1.1
|
|
123
123
|
Requires-Dist: pytest-ordering==0.6
|
|
124
124
|
Requires-Dist: pytest-rerunfailures==16.0.1; python_version < "3.10"
|
|
125
|
-
Requires-Dist: pytest-rerunfailures==16.3; python_version
|
|
125
|
+
Requires-Dist: pytest-rerunfailures==16.3; python_version == "3.10"
|
|
126
|
+
Requires-Dist: pytest-rerunfailures==16.4; python_version >= "3.11"
|
|
126
127
|
Requires-Dist: pytest-xdist==3.8.0
|
|
127
128
|
Requires-Dist: parameterized==0.9.0
|
|
128
129
|
Requires-Dist: behave==1.2.6
|
|
@@ -141,7 +142,7 @@ Requires-Dist: allure-python-commons>=2.16.0; extra == "allure"
|
|
|
141
142
|
Requires-Dist: allure-behave>=2.16.0; extra == "allure"
|
|
142
143
|
Provides-Extra: coverage
|
|
143
144
|
Requires-Dist: coverage>=7.10.7; python_version < "3.10" and extra == "coverage"
|
|
144
|
-
Requires-Dist: coverage>=7.
|
|
145
|
+
Requires-Dist: coverage>=7.15.0; python_version >= "3.10" and extra == "coverage"
|
|
145
146
|
Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
|
|
146
147
|
Provides-Extra: flake8
|
|
147
148
|
Requires-Dist: flake8==7.3.0; extra == "flake8"
|
|
@@ -159,7 +160,7 @@ Requires-Dist: pycparser==2.23; python_version < "3.10" and extra == "pdfminer"
|
|
|
159
160
|
Requires-Dist: pycparser==3.0; python_version >= "3.10" and extra == "pdfminer"
|
|
160
161
|
Provides-Extra: pillow
|
|
161
162
|
Requires-Dist: Pillow>=11.3.0; python_version < "3.10" and extra == "pillow"
|
|
162
|
-
Requires-Dist: Pillow>=12.
|
|
163
|
+
Requires-Dist: Pillow>=12.3.0; python_version >= "3.10" and extra == "pillow"
|
|
163
164
|
Provides-Extra: pip-system-certs
|
|
164
165
|
Requires-Dist: pip-system-certs>=4.0; platform_system == "Windows" and extra == "pip-system-certs"
|
|
165
166
|
Provides-Extra: proxy
|
|
@@ -167,7 +168,7 @@ Requires-Dist: proxy.py==2.4.3; extra == "proxy"
|
|
|
167
168
|
Provides-Extra: playwright
|
|
168
169
|
Requires-Dist: playwright>=1.60.0; extra == "playwright"
|
|
169
170
|
Requires-Dist: greenlet>=3.2.5; python_version < "3.10" and extra == "playwright"
|
|
170
|
-
Requires-Dist: greenlet>=3.5.
|
|
171
|
+
Requires-Dist: greenlet>=3.5.3; python_version >= "3.10" and extra == "playwright"
|
|
171
172
|
Provides-Extra: pyautogui
|
|
172
173
|
Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
|
|
173
174
|
Dynamic: author
|
|
@@ -335,7 +336,7 @@ for element in elements:
|
|
|
335
336
|
<p>💡 You can set the Chromium browser to use via command line parameters:</p>
|
|
336
337
|
|
|
337
338
|
```zsh
|
|
338
|
-
python SCRIPT.py --
|
|
339
|
+
python SCRIPT.py --chromium # Use the unbranded Chromium browser
|
|
339
340
|
python SCRIPT.py --cft # Use Chrome-for-testing
|
|
340
341
|
python SCRIPT.py --edge # Use Microsoft Edge
|
|
341
342
|
python SCRIPT.py --brave # Use Brave browser
|
|
@@ -949,6 +950,7 @@ pytest test_coffee_cart.py --trace
|
|
|
949
950
|
--brave # (Shortcut for "--browser=brave".)
|
|
950
951
|
--comet # (Shortcut for "--browser=comet".)
|
|
951
952
|
--atlas # (Shortcut for "--browser=atlas".)
|
|
953
|
+
--chromium # (Shortcut for using base `Chromium`)
|
|
952
954
|
--settings-file=FILE # (Override default SeleniumBase settings.)
|
|
953
955
|
--env=ENV # (Set the test env. Access with "self.env" in tests.)
|
|
954
956
|
--account=STR # (Set account. Access with "self.account" in tests.)
|
|
@@ -149,7 +149,7 @@ for element in elements:
|
|
|
149
149
|
<p>💡 You can set the Chromium browser to use via command line parameters:</p>
|
|
150
150
|
|
|
151
151
|
```zsh
|
|
152
|
-
python SCRIPT.py --
|
|
152
|
+
python SCRIPT.py --chromium # Use the unbranded Chromium browser
|
|
153
153
|
python SCRIPT.py --cft # Use Chrome-for-testing
|
|
154
154
|
python SCRIPT.py --edge # Use Microsoft Edge
|
|
155
155
|
python SCRIPT.py --brave # Use Brave browser
|
|
@@ -763,6 +763,7 @@ pytest test_coffee_cart.py --trace
|
|
|
763
763
|
--brave # (Shortcut for "--browser=brave".)
|
|
764
764
|
--comet # (Shortcut for "--browser=comet".)
|
|
765
765
|
--atlas # (Shortcut for "--browser=atlas".)
|
|
766
|
+
--chromium # (Shortcut for using base `Chromium`)
|
|
766
767
|
--settings-file=FILE # (Override default SeleniumBase settings.)
|
|
767
768
|
--env=ENV # (Set the test env. Access with "self.env" in tests.)
|
|
768
769
|
--account=STR # (Set account. Access with "self.account" in tests.)
|
|
@@ -10,13 +10,13 @@ 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.5;python_version>="3.10"
|
|
14
14
|
fasteners>=0.20
|
|
15
15
|
mycdp>=1.4.0
|
|
16
16
|
pynose>=1.5.5
|
|
17
17
|
platformdirs~=4.4.0;python_version<"3.10"
|
|
18
18
|
platformdirs>=4.10.0;python_version>="3.10"
|
|
19
|
-
typing-extensions>=4.
|
|
19
|
+
typing-extensions>=4.16.0
|
|
20
20
|
sbvirtualdisplay>=1.4.0
|
|
21
21
|
MarkupSafe>=3.0.3
|
|
22
22
|
Jinja2>=3.1.6
|
|
@@ -61,7 +61,8 @@ pytest-html==4.0.2
|
|
|
61
61
|
pytest-metadata==3.1.1
|
|
62
62
|
pytest-ordering==0.6
|
|
63
63
|
pytest-rerunfailures==16.0.1;python_version<"3.10"
|
|
64
|
-
pytest-rerunfailures==16.3;python_version
|
|
64
|
+
pytest-rerunfailures==16.3;python_version=="3.10"
|
|
65
|
+
pytest-rerunfailures==16.4;python_version>="3.11"
|
|
65
66
|
pytest-xdist==3.8.0
|
|
66
67
|
parameterized==0.9.0
|
|
67
68
|
behave==1.2.6
|
|
@@ -79,7 +80,7 @@ rich>=15.0.0,<16
|
|
|
79
80
|
# ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
|
|
80
81
|
|
|
81
82
|
coverage>=7.10.7;python_version<"3.10"
|
|
82
|
-
coverage>=7.
|
|
83
|
+
coverage>=7.15.0;python_version>="3.10"
|
|
83
84
|
pytest-cov>=7.1.0
|
|
84
85
|
flake8==7.3.0
|
|
85
86
|
mccabe==0.7.0
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.50.
|
|
2
|
+
__version__ = "4.50.5"
|
|
@@ -492,8 +492,11 @@ def get_configured_sb(context):
|
|
|
492
492
|
sb.binary_location = binary_location
|
|
493
493
|
sb_config.binary_location = binary_location
|
|
494
494
|
continue
|
|
495
|
-
# Handle: -D use-chromium
|
|
496
|
-
if
|
|
495
|
+
# Handle: -D use-chromium / chromium
|
|
496
|
+
if (
|
|
497
|
+
low_key in ["use-chromium", "chromium"]
|
|
498
|
+
and not sb_config.binary_location
|
|
499
|
+
):
|
|
497
500
|
binary_location = "_chromium_"
|
|
498
501
|
sb.binary_location = binary_location
|
|
499
502
|
sb_config.binary_location = binary_location
|
|
@@ -52,15 +52,15 @@ def show_basic_usage():
|
|
|
52
52
|
|
|
53
53
|
seleniumbase_logo = logo_helper.get_seleniumbase_logo()
|
|
54
54
|
print(seleniumbase_logo)
|
|
55
|
-
time.sleep(0.
|
|
55
|
+
time.sleep(0.044)
|
|
56
56
|
print("")
|
|
57
|
-
time.sleep(0.
|
|
57
|
+
time.sleep(0.034)
|
|
58
58
|
show_package_location()
|
|
59
|
-
time.sleep(0.
|
|
59
|
+
time.sleep(0.034)
|
|
60
60
|
show_version_info()
|
|
61
|
-
time.sleep(0.
|
|
61
|
+
time.sleep(0.034)
|
|
62
62
|
print("")
|
|
63
|
-
time.sleep(0.
|
|
63
|
+
time.sleep(0.468) # Enough time to see the logo & version
|
|
64
64
|
sc = ""
|
|
65
65
|
sc += "╭──────────────────────────────────────────────────╮\n"
|
|
66
66
|
sc += '│ * USAGE: "seleniumbase [COMMAND] [PARAMETERS]" │\n'
|
|
@@ -134,38 +134,40 @@ def show_install_usage():
|
|
|
134
134
|
sc = " " + c2 + "** " + c3 + "get / install" + c2 + " **" + cr
|
|
135
135
|
print(sc)
|
|
136
136
|
print("")
|
|
137
|
-
print("
|
|
138
|
-
print("
|
|
139
|
-
print("
|
|
140
|
-
print("
|
|
141
|
-
print("
|
|
142
|
-
print("
|
|
143
|
-
print(" edgedriver,
|
|
144
|
-
print("
|
|
145
|
-
print("
|
|
146
|
-
print("
|
|
147
|
-
print("
|
|
148
|
-
print("
|
|
149
|
-
print()
|
|
150
|
-
print("
|
|
151
|
-
print("
|
|
152
|
-
print("
|
|
153
|
-
print("
|
|
154
|
-
print("
|
|
155
|
-
print("
|
|
156
|
-
print("
|
|
157
|
-
print("
|
|
158
|
-
print("
|
|
159
|
-
print("
|
|
160
|
-
print("
|
|
161
|
-
print("
|
|
162
|
-
print("
|
|
163
|
-
print("
|
|
164
|
-
print("
|
|
165
|
-
print("
|
|
166
|
-
print("
|
|
167
|
-
print("
|
|
168
|
-
print("
|
|
137
|
+
print("Usage:")
|
|
138
|
+
print(" seleniumbase install [DRIVER/BINARY] [OPTIONS]")
|
|
139
|
+
print(" OR: seleniumbase get [DRIVER/BINARY] [OPTIONS]")
|
|
140
|
+
print(" OR: sbase install [DRIVER/BINARY] [OPTIONS]")
|
|
141
|
+
print(" OR: sbase get [DRIVER/BINARY] [OPTIONS]")
|
|
142
|
+
print(" (Drivers: chromedriver, uc_driver,")
|
|
143
|
+
print(" edgedriver, geckodriver)")
|
|
144
|
+
print(" (Binaries: cft, chs, chromium)")
|
|
145
|
+
print("Options:")
|
|
146
|
+
print(" VERSION Driver/binary version to download.")
|
|
147
|
+
print(" (Otherwise detects the version)")
|
|
148
|
+
print(" --revision The Chromium revision to download.")
|
|
149
|
+
print(" (Otherwise downloads the latest)")
|
|
150
|
+
print(" -p OR --path Also copy driver to /usr/local/bin")
|
|
151
|
+
print("Examples:")
|
|
152
|
+
print(" sbase get chromedriver")
|
|
153
|
+
print(" sbase get geckodriver")
|
|
154
|
+
print(" sbase get edgedriver")
|
|
155
|
+
print(" sbase get chromedriver 149")
|
|
156
|
+
print(" sbase get chromedriver 149.0.7827.155")
|
|
157
|
+
print(" sbase get chromedriver stable")
|
|
158
|
+
print(" sbase get chromedriver beta")
|
|
159
|
+
print(" sbase get chromedriver -p")
|
|
160
|
+
print(" sbase get chromium")
|
|
161
|
+
print(" sbase get chromium --revision=1639046")
|
|
162
|
+
print(" sbase get cft 149")
|
|
163
|
+
print(" sbase get chs")
|
|
164
|
+
print("Output:")
|
|
165
|
+
print(" Downloads driver/binary to seleniumbase/drivers/")
|
|
166
|
+
print(" (chromedriver is for Selenium Chrome automation)")
|
|
167
|
+
print(" (geckodriver is for Selenium Firefox automation)")
|
|
168
|
+
print(" (edgedriver is for Selenium MS__Edge automation)")
|
|
169
|
+
print(" (cft is for the `Chrome for Testing` binary exe)")
|
|
170
|
+
print(" (chs is for the `Chrome-Headless-Shell` binary.)")
|
|
169
171
|
print("")
|
|
170
172
|
|
|
171
173
|
|
|
@@ -2,31 +2,39 @@
|
|
|
2
2
|
Downloads the specified webdriver to "seleniumbase/drivers/"
|
|
3
3
|
|
|
4
4
|
Usage:
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
seleniumbase install [DRIVER/BINARY] [OPTIONS]
|
|
6
|
+
OR: seleniumbase get [DRIVER/BINARY] [OPTIONS]
|
|
7
|
+
OR: sbase install [DRIVER/BINARY] [OPTIONS]
|
|
8
|
+
OR: sbase get [DRIVER/BINARY] [OPTIONS]
|
|
9
|
+
(Drivers: chromedriver, uc_driver,
|
|
10
|
+
edgedriver, geckodriver)
|
|
11
|
+
(Binaries: cft, chs, chromium)
|
|
7
12
|
Options:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-p OR --path
|
|
13
|
+
VERSION Driver/binary version to download.
|
|
14
|
+
(Otherwise detects the version)
|
|
15
|
+
--revision The Chromium revision to download.
|
|
16
|
+
(Otherwise downloads the latest)
|
|
17
|
+
-p OR --path Also copy driver to /usr/local/bin
|
|
13
18
|
Examples:
|
|
14
19
|
sbase get chromedriver
|
|
15
20
|
sbase get geckodriver
|
|
16
21
|
sbase get edgedriver
|
|
17
|
-
sbase get chromedriver
|
|
18
|
-
sbase get chromedriver
|
|
22
|
+
sbase get chromedriver 149
|
|
23
|
+
sbase get chromedriver 149.0.7827.155
|
|
19
24
|
sbase get chromedriver stable
|
|
20
25
|
sbase get chromedriver beta
|
|
21
26
|
sbase get chromedriver -p
|
|
22
27
|
sbase get chromium
|
|
23
|
-
sbase get
|
|
28
|
+
sbase get chromium --revision=1639046
|
|
29
|
+
sbase get cft 149
|
|
24
30
|
sbase get chs
|
|
25
31
|
Output:
|
|
26
|
-
Downloads
|
|
27
|
-
(chromedriver is
|
|
28
|
-
(geckodriver is
|
|
29
|
-
(edgedriver is
|
|
32
|
+
Downloads driver/binary to seleniumbase/drivers/
|
|
33
|
+
(chromedriver is for Selenium Chrome automation)
|
|
34
|
+
(geckodriver is for Selenium Firefox automation)
|
|
35
|
+
(edgedriver is for Selenium MS__Edge automation)
|
|
36
|
+
(cft is for the `Chrome for Testing` binary exe)
|
|
37
|
+
(chs is for the `Chrome-Headless-Shell` binary.)
|
|
30
38
|
"""
|
|
31
39
|
import colorama
|
|
32
40
|
import logging
|
|
@@ -70,38 +78,40 @@ DEFAULT_EDGEDRIVER_VERSION = "115.0.1901.183" # (If can't find LATEST_STABLE)
|
|
|
70
78
|
|
|
71
79
|
def invalid_run_command():
|
|
72
80
|
exp = " ** get / install **\n\n"
|
|
73
|
-
exp += "
|
|
74
|
-
exp += "
|
|
75
|
-
exp += "
|
|
76
|
-
exp += "
|
|
77
|
-
exp += "
|
|
78
|
-
exp += "
|
|
79
|
-
exp += " edgedriver,
|
|
80
|
-
exp += "
|
|
81
|
-
exp += "
|
|
82
|
-
exp += "
|
|
83
|
-
exp += "
|
|
84
|
-
exp += "
|
|
85
|
-
exp += "\n"
|
|
86
|
-
exp += "
|
|
87
|
-
exp += "
|
|
88
|
-
exp += "
|
|
89
|
-
exp += "
|
|
90
|
-
exp += "
|
|
91
|
-
exp += "
|
|
92
|
-
exp += "
|
|
93
|
-
exp += "
|
|
94
|
-
exp += "
|
|
95
|
-
exp += "
|
|
96
|
-
exp += "
|
|
97
|
-
exp += "
|
|
98
|
-
exp += "
|
|
99
|
-
exp += "
|
|
100
|
-
exp += "
|
|
101
|
-
exp += "
|
|
102
|
-
exp += "
|
|
103
|
-
exp += "
|
|
104
|
-
exp += "
|
|
81
|
+
exp += "Usage:\n"
|
|
82
|
+
exp += " seleniumbase install [DRIVER/BINARY] [OPTIONS]\n"
|
|
83
|
+
exp += " OR sbase install [DRIVER/BINARY] [OPTIONS]\n"
|
|
84
|
+
exp += " OR seleniumbase get [DRIVER/BINARY] [OPTIONS]\n"
|
|
85
|
+
exp += " OR sbase get [DRIVER/BINARY] [OPTIONS]\n"
|
|
86
|
+
exp += " (Drivers: chromedriver, uc_driver,\n"
|
|
87
|
+
exp += " edgedriver, geckodriver)\n"
|
|
88
|
+
exp += " (Binaries: cft, chs, chromium)\n"
|
|
89
|
+
exp += "Options:\n"
|
|
90
|
+
exp += " VERSION Driver/binary version to download.\n"
|
|
91
|
+
exp += " (Otherwise detects the version)\n"
|
|
92
|
+
exp += " --revision The Chromium revision to download.\n"
|
|
93
|
+
exp += " (Otherwise downloads the latest)\n"
|
|
94
|
+
exp += " -p OR --path Also copy driver to /usr/local/bin\n"
|
|
95
|
+
exp += "Examples:\n"
|
|
96
|
+
exp += " sbase get chromedriver\n"
|
|
97
|
+
exp += " sbase get geckodriver\n"
|
|
98
|
+
exp += " sbase get edgedriver\n"
|
|
99
|
+
exp += " sbase get chromedriver 149\n"
|
|
100
|
+
exp += " sbase get chromedriver 149.0.7827.155\n"
|
|
101
|
+
exp += " sbase get chromedriver stable\n"
|
|
102
|
+
exp += " sbase get chromedriver beta\n"
|
|
103
|
+
exp += " sbase get chromedriver -p\n"
|
|
104
|
+
exp += " sbase get chromium\n"
|
|
105
|
+
exp += " sbase get chromium --revision=1639046\n"
|
|
106
|
+
exp += " sbase get cft 149\n"
|
|
107
|
+
exp += " sbase get chs\n"
|
|
108
|
+
exp += "Output:\n"
|
|
109
|
+
exp += " Downloads driver/binary to seleniumbase/drivers/\n"
|
|
110
|
+
exp += " (chromedriver is for Selenium Chrome automation)\n"
|
|
111
|
+
exp += " (geckodriver is for Selenium Firefox automation)\n"
|
|
112
|
+
exp += " (edgedriver is for Selenium MS__Edge automation)\n"
|
|
113
|
+
exp += " (cft is for the `Chrome for Testing` binary exe)\n"
|
|
114
|
+
exp += " (chs is for the `Chrome-Headless-Shell` binary.)\n"
|
|
105
115
|
print("")
|
|
106
116
|
raise Exception("%s\n\n%s" % (constants.Warnings.INVALID_RUN_COMMAND, exp))
|
|
107
117
|
|
|
@@ -138,6 +148,8 @@ def get_proxy_info():
|
|
|
138
148
|
protocol = "https"
|
|
139
149
|
elif "socks4" in proxy_string:
|
|
140
150
|
protocol = "socks4"
|
|
151
|
+
elif "socks5h" in proxy_string:
|
|
152
|
+
protocol = "socks5h"
|
|
141
153
|
elif "socks5" in proxy_string:
|
|
142
154
|
protocol = "socks5"
|
|
143
155
|
proxy_string = proxy_helper.validate_proxy_string(proxy_string)
|
|
@@ -340,6 +340,8 @@ def requests_get(url, proxy_string=None):
|
|
|
340
340
|
protocol = "https"
|
|
341
341
|
elif "socks4" in proxy_string:
|
|
342
342
|
protocol = "socks4"
|
|
343
|
+
elif "socks5h" in proxy_string:
|
|
344
|
+
protocol = "socks5h"
|
|
343
345
|
elif "socks5" in proxy_string:
|
|
344
346
|
protocol = "socks5"
|
|
345
347
|
proxies = {protocol: proxy_string}
|
|
@@ -2814,7 +2816,13 @@ def _set_chrome_options(
|
|
|
2814
2816
|
d_f_string = ",".join(included_disabled_features)
|
|
2815
2817
|
chrome_options.add_argument("--disable-features=%s" % d_f_string)
|
|
2816
2818
|
chrome_options.add_argument("--enable-unsafe-extension-debugging")
|
|
2817
|
-
|
|
2819
|
+
if (
|
|
2820
|
+
hasattr(sb_config, "_cdp_browser")
|
|
2821
|
+
and sb_config._cdp_browser == "brave"
|
|
2822
|
+
):
|
|
2823
|
+
pass # Looks like "--test-type" breaks Brave now
|
|
2824
|
+
else:
|
|
2825
|
+
chrome_options.add_argument("--test-type")
|
|
2818
2826
|
if proxy_auth or sb_config._ext_dirs:
|
|
2819
2827
|
if not is_using_uc(undetectable, browser_name):
|
|
2820
2828
|
chrome_options.add_argument("--remote-debugging-pipe")
|
|
@@ -2901,7 +2909,9 @@ def _set_firefox_options(
|
|
|
2901
2909
|
socks_ver = 0
|
|
2902
2910
|
chunks = proxy_string.split(":")
|
|
2903
2911
|
if len(chunks) == 3 and (
|
|
2904
|
-
chunks[0] == "socks4"
|
|
2912
|
+
chunks[0] == "socks4"
|
|
2913
|
+
or chunks[0] == "socks5"
|
|
2914
|
+
or chunks[0] == "socks5h"
|
|
2905
2915
|
):
|
|
2906
2916
|
socks_proxy = True
|
|
2907
2917
|
socks_ver = int(chunks[0][5])
|
|
@@ -3116,6 +3126,11 @@ def get_driver(
|
|
|
3116
3126
|
if browser_name in constants.ChromiumSubs.chromium_subs:
|
|
3117
3127
|
browser_name = "chrome"
|
|
3118
3128
|
browser_name = browser_name.lower()
|
|
3129
|
+
if (
|
|
3130
|
+
hasattr(sb_config, "_cdp_browser")
|
|
3131
|
+
and sb_config._cdp_browser == "brave"
|
|
3132
|
+
):
|
|
3133
|
+
undetectable = True
|
|
3119
3134
|
if is_using_uc(undetectable, browser_name):
|
|
3120
3135
|
if ad_block_on:
|
|
3121
3136
|
sb_config.ad_block_on = True
|
|
@@ -5012,7 +5027,10 @@ def get_local_driver(
|
|
|
5012
5027
|
device_height,
|
|
5013
5028
|
device_pixel_ratio,
|
|
5014
5029
|
)
|
|
5015
|
-
if
|
|
5030
|
+
if (
|
|
5031
|
+
(binary_location and "chromium_drivers" in binary_location)
|
|
5032
|
+
or (binary_location and "Chromium.app" in binary_location)
|
|
5033
|
+
):
|
|
5016
5034
|
chrome_options.add_argument("--use-mock-keychain")
|
|
5017
5035
|
use_version = "latest"
|
|
5018
5036
|
major_chrome_version = None
|
|
@@ -5139,6 +5157,13 @@ def get_local_driver(
|
|
|
5139
5157
|
sb_config.multi_proxy = True
|
|
5140
5158
|
if uc_driver_version and driver_version == "keep":
|
|
5141
5159
|
driver_version = uc_driver_version
|
|
5160
|
+
if (
|
|
5161
|
+
hasattr(sb_config, "_cdp_browser")
|
|
5162
|
+
and sb_config._cdp_browser == "opera"
|
|
5163
|
+
):
|
|
5164
|
+
use_version = "132"
|
|
5165
|
+
if use_uc:
|
|
5166
|
+
use_version = "144"
|
|
5142
5167
|
use_version = find_chromedriver_version_to_use(
|
|
5143
5168
|
use_version, driver_version
|
|
5144
5169
|
)
|
|
@@ -177,6 +177,8 @@ def validate_proxy_string(proxy_string, keep_scheme=False):
|
|
|
177
177
|
proxy_scheme = "https"
|
|
178
178
|
elif proxy_string.startswith("socks4://"):
|
|
179
179
|
proxy_scheme = "socks4"
|
|
180
|
+
elif proxy_string.startswith("socks5h://"):
|
|
181
|
+
proxy_scheme = "socks5h"
|
|
180
182
|
elif proxy_string.startswith("socks5://"):
|
|
181
183
|
proxy_scheme = "socks5"
|
|
182
184
|
valid = False
|
|
@@ -189,8 +191,10 @@ def validate_proxy_string(proxy_string, keep_scheme=False):
|
|
|
189
191
|
elif proxy_string.startswith("https://"):
|
|
190
192
|
proxy_string = proxy_string.split("https://")[1]
|
|
191
193
|
elif "://" in proxy_string:
|
|
192
|
-
if
|
|
193
|
-
proxy_string.startswith("
|
|
194
|
+
if (
|
|
195
|
+
not proxy_string.startswith("socks4://")
|
|
196
|
+
and not proxy_string.startswith("socks5://")
|
|
197
|
+
and not proxy_string.startswith("socks5h://")
|
|
194
198
|
):
|
|
195
199
|
proxy_string = proxy_string.split("://")[1]
|
|
196
200
|
chunks = proxy_string.split(":")
|
|
@@ -201,13 +205,9 @@ def validate_proxy_string(proxy_string, keep_scheme=False):
|
|
|
201
205
|
elif len(chunks) == 3:
|
|
202
206
|
if re.match(r"^\d+$", chunks[2]):
|
|
203
207
|
if page_utils.is_valid_url("http:" + ":".join(chunks[1:])):
|
|
204
|
-
if chunks[0]
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
valid = True
|
|
208
|
-
elif chunks[0] == "socks4":
|
|
209
|
-
valid = True
|
|
210
|
-
elif chunks[0] == "socks5":
|
|
208
|
+
if chunks[0] in [
|
|
209
|
+
"http", "https", "socks4", "socks5", "socks5h"
|
|
210
|
+
]:
|
|
211
211
|
valid = True
|
|
212
212
|
else:
|
|
213
213
|
proxy_string = val_ip.group()
|
|
@@ -2308,6 +2308,8 @@ class CDPMethods():
|
|
|
2308
2308
|
time.sleep(0.48)
|
|
2309
2309
|
self.loop.run_until_complete(self.page.wait(0.1))
|
|
2310
2310
|
x2 = x2 + 22.5 # Overshoot drop to maximize compatibility
|
|
2311
|
+
y1 = y1 + 3
|
|
2312
|
+
y2 = y2 + 3
|
|
2311
2313
|
self.gui_drag_drop_points(x1, y1, x2, y2, timeframe=0.55)
|
|
2312
2314
|
time.sleep(0.25)
|
|
2313
2315
|
self.loop.run_until_complete(self.page.wait(0.2))
|
|
@@ -7776,15 +7776,30 @@ class BaseCase(unittest.TestCase):
|
|
|
7776
7776
|
file_path = None
|
|
7777
7777
|
if page_utils.is_valid_url(pdf):
|
|
7778
7778
|
downloads_folder = download_helper.get_downloads_folder()
|
|
7779
|
-
if nav:
|
|
7780
|
-
if self.get_current_url() != pdf:
|
|
7781
|
-
self.open(pdf)
|
|
7782
7779
|
file_name = pdf.split("/")[-1]
|
|
7783
7780
|
file_path = os.path.join(downloads_folder, file_name)
|
|
7784
|
-
if not
|
|
7785
|
-
self.
|
|
7786
|
-
|
|
7787
|
-
|
|
7781
|
+
if nav and not self.external_pdf:
|
|
7782
|
+
self.open(pdf)
|
|
7783
|
+
if (self.undetectable and self.external_pdf):
|
|
7784
|
+
just_opened = False
|
|
7785
|
+
if (
|
|
7786
|
+
self.get_current_url() != pdf
|
|
7787
|
+
and not os.path.exists(
|
|
7788
|
+
os.path.join(downloads_folder, file_name)
|
|
7789
|
+
)
|
|
7790
|
+
):
|
|
7791
|
+
just_opened = True
|
|
7792
|
+
self.open(pdf)
|
|
7793
|
+
if self.external_pdf:
|
|
7794
|
+
self.assert_downloaded_file(file_name, timeout=10)
|
|
7795
|
+
elif self.undetectable and just_opened:
|
|
7796
|
+
self.sleep(3)
|
|
7797
|
+
self.save_as_pdf(file_name, folder=downloads_folder)
|
|
7798
|
+
else:
|
|
7799
|
+
self.save_as_pdf(file_name, folder=downloads_folder)
|
|
7800
|
+
else:
|
|
7801
|
+
if not os.path.exists(file_path) or override:
|
|
7802
|
+
self.download_file(pdf)
|
|
7788
7803
|
else:
|
|
7789
7804
|
if not os.path.exists(pdf):
|
|
7790
7805
|
raise Exception("%s is not a valid URL or file path!" % pdf)
|
|
@@ -668,7 +668,10 @@ def Driver(
|
|
|
668
668
|
binary_location = "cft"
|
|
669
669
|
elif chs and not binary_location:
|
|
670
670
|
binary_location = "chs"
|
|
671
|
-
if
|
|
671
|
+
if (
|
|
672
|
+
("--use-chromium" in sys_argv and not binary_location)
|
|
673
|
+
or ("--chromium" in sys_argv and not binary_location)
|
|
674
|
+
):
|
|
672
675
|
binary_location = "_chromium_"
|
|
673
676
|
elif "--cft" in sys_argv and not binary_location:
|
|
674
677
|
binary_location = "cft"
|
|
@@ -33,7 +33,7 @@ def pytest_addoption(parser):
|
|
|
33
33
|
--brave (Shortcut for "--browser=brave".)
|
|
34
34
|
--comet (Shortcut for "--browser=comet".)
|
|
35
35
|
--atlas (Shortcut for "--browser=atlas".)
|
|
36
|
-
--
|
|
36
|
+
--chromium (Shortcut for using base `Chromium`)
|
|
37
37
|
--cft (Shortcut for using `Chrome for Testing`)
|
|
38
38
|
--chs (Shortcut for using `Chrome-Headless-Shell`)
|
|
39
39
|
--settings-file=FILE (Override default SeleniumBase settings.)
|
|
@@ -223,6 +223,7 @@ def pytest_addoption(parser):
|
|
|
223
223
|
)
|
|
224
224
|
parser.addoption(
|
|
225
225
|
"--use-chromium",
|
|
226
|
+
"--chromium",
|
|
226
227
|
action="store_true",
|
|
227
228
|
dest="use_chromium",
|
|
228
229
|
default=False,
|
|
@@ -708,7 +708,10 @@ def SB(
|
|
|
708
708
|
binary_location = "cft"
|
|
709
709
|
elif chs and not binary_location:
|
|
710
710
|
binary_location = "chs"
|
|
711
|
-
if
|
|
711
|
+
if (
|
|
712
|
+
("--use-chromium" in sys_argv and not binary_location)
|
|
713
|
+
or ("--chromium" in sys_argv and not binary_location)
|
|
714
|
+
):
|
|
712
715
|
binary_location = "_chromium_"
|
|
713
716
|
elif "--cft" in sys_argv and not binary_location:
|
|
714
717
|
binary_location = "cft"
|
|
@@ -22,7 +22,7 @@ class SeleniumBrowser(Plugin):
|
|
|
22
22
|
--brave (Shortcut for "--browser=brave".)
|
|
23
23
|
--comet (Shortcut for "--browser=comet".)
|
|
24
24
|
--atlas (Shortcut for "--browser=atlas".)
|
|
25
|
-
--
|
|
25
|
+
--chromium (Shortcut for using base `Chromium`)
|
|
26
26
|
--cft (Shortcut for using `Chrome for Testing`)
|
|
27
27
|
--chs (Shortcut for using `Chrome-Headless-Shell`)
|
|
28
28
|
--user-data-dir=DIR (Set the Chrome user data directory to use.)
|
|
@@ -184,6 +184,7 @@ class SeleniumBrowser(Plugin):
|
|
|
184
184
|
)
|
|
185
185
|
parser.addoption(
|
|
186
186
|
"--use-chromium",
|
|
187
|
+
"--chromium",
|
|
187
188
|
action="store_true",
|
|
188
189
|
dest="use_chromium",
|
|
189
190
|
default=False,
|
|
@@ -527,7 +527,11 @@ async def start(
|
|
|
527
527
|
print(" Using default Chrome browser instead!")
|
|
528
528
|
bin_loc = None
|
|
529
529
|
browser_executable_path = bin_loc
|
|
530
|
-
elif
|
|
530
|
+
elif (
|
|
531
|
+
use_chromium
|
|
532
|
+
or "--use-chromium" in arg_join
|
|
533
|
+
or "--chromium" in sys_argv
|
|
534
|
+
):
|
|
531
535
|
browser_executable_path = "_chromium_"
|
|
532
536
|
elif cft or "--cft" in arg_join:
|
|
533
537
|
browser_executable_path = "_cft_"
|