seleniumbase 4.50.2__tar.gz → 4.50.4__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.4}/PKG-INFO +4 -3
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/README.md +2 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/behave/behave_sb.py +5 -2
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/run.py +39 -37
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_install.py +58 -46
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/browser_launcher.py +9 -2
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/proxy_helper.py +9 -9
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/sb_cdp.py +2 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/base_case.py +22 -7
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/driver_manager.py +4 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/pytest_plugin.py +2 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/sb_manager.py +4 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/selenium_plugin.py +2 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/cdp_driver/cdp_util.py +5 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/cdp_driver/config.py +2 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/cdp_driver/tab.py +12 -14
- {seleniumbase-4.50.2 → seleniumbase-4.50.4/seleniumbase.egg-info}/PKG-INFO +4 -3
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase.egg-info/requires.txt +1 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/setup.py +1 -1
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/.gitignore +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/LICENSE +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/MANIFEST.in +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/install.sh +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/pyproject.toml +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/pytest.ini +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/requirements.txt +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/sbase/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/sbase/__main__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/sbase/steps.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/setup.cfg +0 -0
- {seleniumbase-4.50.2 → seleniumbase-4.50.4}/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.4
|
|
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
|
|
@@ -167,7 +167,7 @@ Requires-Dist: proxy.py==2.4.3; extra == "proxy"
|
|
|
167
167
|
Provides-Extra: playwright
|
|
168
168
|
Requires-Dist: playwright>=1.60.0; extra == "playwright"
|
|
169
169
|
Requires-Dist: greenlet>=3.2.5; python_version < "3.10" and extra == "playwright"
|
|
170
|
-
Requires-Dist: greenlet>=3.5.
|
|
170
|
+
Requires-Dist: greenlet>=3.5.3; python_version >= "3.10" and extra == "playwright"
|
|
171
171
|
Provides-Extra: pyautogui
|
|
172
172
|
Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
|
|
173
173
|
Dynamic: author
|
|
@@ -335,7 +335,7 @@ for element in elements:
|
|
|
335
335
|
<p>💡 You can set the Chromium browser to use via command line parameters:</p>
|
|
336
336
|
|
|
337
337
|
```zsh
|
|
338
|
-
python SCRIPT.py --
|
|
338
|
+
python SCRIPT.py --chromium # Use the unbranded Chromium browser
|
|
339
339
|
python SCRIPT.py --cft # Use Chrome-for-testing
|
|
340
340
|
python SCRIPT.py --edge # Use Microsoft Edge
|
|
341
341
|
python SCRIPT.py --brave # Use Brave browser
|
|
@@ -949,6 +949,7 @@ pytest test_coffee_cart.py --trace
|
|
|
949
949
|
--brave # (Shortcut for "--browser=brave".)
|
|
950
950
|
--comet # (Shortcut for "--browser=comet".)
|
|
951
951
|
--atlas # (Shortcut for "--browser=atlas".)
|
|
952
|
+
--chromium # (Shortcut for using base `Chromium`)
|
|
952
953
|
--settings-file=FILE # (Override default SeleniumBase settings.)
|
|
953
954
|
--env=ENV # (Set the test env. Access with "self.env" in tests.)
|
|
954
955
|
--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.)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.50.
|
|
2
|
+
__version__ = "4.50.4"
|
|
@@ -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}
|
|
@@ -2901,7 +2903,9 @@ def _set_firefox_options(
|
|
|
2901
2903
|
socks_ver = 0
|
|
2902
2904
|
chunks = proxy_string.split(":")
|
|
2903
2905
|
if len(chunks) == 3 and (
|
|
2904
|
-
chunks[0] == "socks4"
|
|
2906
|
+
chunks[0] == "socks4"
|
|
2907
|
+
or chunks[0] == "socks5"
|
|
2908
|
+
or chunks[0] == "socks5h"
|
|
2905
2909
|
):
|
|
2906
2910
|
socks_proxy = True
|
|
2907
2911
|
socks_ver = int(chunks[0][5])
|
|
@@ -5012,7 +5016,10 @@ def get_local_driver(
|
|
|
5012
5016
|
device_height,
|
|
5013
5017
|
device_pixel_ratio,
|
|
5014
5018
|
)
|
|
5015
|
-
if
|
|
5019
|
+
if (
|
|
5020
|
+
(binary_location and "chromium_drivers" in binary_location)
|
|
5021
|
+
or (binary_location and "Chromium.app" in binary_location)
|
|
5022
|
+
):
|
|
5016
5023
|
chrome_options.add_argument("--use-mock-keychain")
|
|
5017
5024
|
use_version = "latest"
|
|
5018
5025
|
major_chrome_version = None
|
|
@@ -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_"
|
|
@@ -195,6 +195,8 @@ class Config:
|
|
|
195
195
|
f"Defaulting to regular Chrome!"
|
|
196
196
|
)
|
|
197
197
|
browser_executable_path = find_chrome_executable()
|
|
198
|
+
elif "Chromium.app" in browser_executable_path:
|
|
199
|
+
mock_keychain = True
|
|
198
200
|
self._browser_args = browser_args
|
|
199
201
|
self.browser_executable_path = browser_executable_path
|
|
200
202
|
self.headless = headless
|
|
@@ -27,27 +27,25 @@ logger = logging.getLogger(__name__)
|
|
|
27
27
|
|
|
28
28
|
class Tab(Connection):
|
|
29
29
|
"""
|
|
30
|
-
:ref:`tab` is the controlling mechanism/connection to a
|
|
31
|
-
|
|
32
|
-
be an iframe, serviceworker or background script for example
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
:py:meth:`browser.get(..., new_window=True)`
|
|
36
|
-
Your url will open a new window. This window is a 'tab'.
|
|
30
|
+
:ref:`tab` is the controlling mechanism/connection to a `target`.
|
|
31
|
+
The `target` can be read as a `tab`, however, it could also
|
|
32
|
+
be an iframe, a serviceworker, or a background script (for example).
|
|
33
|
+
If you open a new window by using `browser.get(..., new_window=True)`,
|
|
34
|
+
your URL will open a new window. This window is a `tab`.
|
|
37
35
|
When you browse to another page, the tab will be the same (browser view).
|
|
38
|
-
It's important to keep some reference to tab objects
|
|
36
|
+
It's important to keep some reference to tab objects in case you're
|
|
39
37
|
done interacting with elements and want to operate on the page level again.
|
|
40
38
|
|
|
41
39
|
Custom CDP commands
|
|
42
40
|
---------------------------
|
|
43
41
|
Tab object provide many useful and often-used methods. It is also possible
|
|
44
|
-
to utilize the included
|
|
42
|
+
to utilize the included CDP classes to to something totally custom.
|
|
45
43
|
|
|
46
|
-
The
|
|
44
|
+
The CDP package is a set of so-called "domains" with each having methods,
|
|
47
45
|
events and types.
|
|
48
|
-
To send a
|
|
49
|
-
you'll have to check whether the method accepts any
|
|
50
|
-
and whether they are required or not.
|
|
46
|
+
To send a CDP method, for example `cdp.page.navigate`,
|
|
47
|
+
you'll have to check whether the method accepts any
|
|
48
|
+
parameters and whether they are required or not.
|
|
51
49
|
|
|
52
50
|
You can use:
|
|
53
51
|
|
|
@@ -936,7 +934,7 @@ class Tab(Connection):
|
|
|
936
934
|
return await self.set_window_state(state="minimize")
|
|
937
935
|
|
|
938
936
|
async def fullscreen(self):
|
|
939
|
-
"""
|
|
937
|
+
"""Fullscreen page/tab/window"""
|
|
940
938
|
return await self.set_window_state(state="fullscreen")
|
|
941
939
|
|
|
942
940
|
async def medimize(self):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.50.
|
|
3
|
+
Version: 4.50.4
|
|
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
|
|
@@ -167,7 +167,7 @@ Requires-Dist: proxy.py==2.4.3; extra == "proxy"
|
|
|
167
167
|
Provides-Extra: playwright
|
|
168
168
|
Requires-Dist: playwright>=1.60.0; extra == "playwright"
|
|
169
169
|
Requires-Dist: greenlet>=3.2.5; python_version < "3.10" and extra == "playwright"
|
|
170
|
-
Requires-Dist: greenlet>=3.5.
|
|
170
|
+
Requires-Dist: greenlet>=3.5.3; python_version >= "3.10" and extra == "playwright"
|
|
171
171
|
Provides-Extra: pyautogui
|
|
172
172
|
Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
|
|
173
173
|
Dynamic: author
|
|
@@ -335,7 +335,7 @@ for element in elements:
|
|
|
335
335
|
<p>💡 You can set the Chromium browser to use via command line parameters:</p>
|
|
336
336
|
|
|
337
337
|
```zsh
|
|
338
|
-
python SCRIPT.py --
|
|
338
|
+
python SCRIPT.py --chromium # Use the unbranded Chromium browser
|
|
339
339
|
python SCRIPT.py --cft # Use Chrome-for-testing
|
|
340
340
|
python SCRIPT.py --edge # Use Microsoft Edge
|
|
341
341
|
python SCRIPT.py --brave # Use Brave browser
|
|
@@ -949,6 +949,7 @@ pytest test_coffee_cart.py --trace
|
|
|
949
949
|
--brave # (Shortcut for "--browser=brave".)
|
|
950
950
|
--comet # (Shortcut for "--browser=comet".)
|
|
951
951
|
--atlas # (Shortcut for "--browser=atlas".)
|
|
952
|
+
--chromium # (Shortcut for using base `Chromium`)
|
|
952
953
|
--settings-file=FILE # (Override default SeleniumBase settings.)
|
|
953
954
|
--env=ENV # (Set the test env. Access with "self.env" in tests.)
|
|
954
955
|
--account=STR # (Set account. Access with "self.account" in tests.)
|
|
@@ -301,7 +301,7 @@ setup(
|
|
|
301
301
|
"playwright": [
|
|
302
302
|
'playwright>=1.60.0',
|
|
303
303
|
'greenlet>=3.2.5;python_version<"3.10"',
|
|
304
|
-
'greenlet>=3.5.
|
|
304
|
+
'greenlet>=3.5.3;python_version>="3.10"',
|
|
305
305
|
],
|
|
306
306
|
# pip install -e .[pyautogui]
|
|
307
307
|
# (Already a required dependency on Linux now.)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|