seleniumbase 4.49.2__tar.gz → 4.49.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.49.2/seleniumbase.egg-info → seleniumbase-4.49.4}/PKG-INFO +92 -89
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/README.md +84 -81
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/requirements.txt +7 -7
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/sb_cdp.py +63 -22
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/base_case.py +81 -2
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/js_utils.py +14 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/__init__.py +3 -1
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/cdp_driver/browser.py +12 -2
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/cdp_driver/element.py +5 -5
- {seleniumbase-4.49.2 → seleniumbase-4.49.4/seleniumbase.egg-info}/PKG-INFO +92 -89
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase.egg-info/requires.txt +7 -7
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/setup.py +7 -7
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/.gitignore +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/LICENSE +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/MANIFEST.in +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/install.sh +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/pyproject.toml +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/pytest.ini +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/sbase/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/sbase/__main__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/sbase/steps.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/browser_launcher.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/setup.cfg +0 -0
- {seleniumbase-4.49.2 → seleniumbase-4.49.4}/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.4
|
|
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
|
|
@@ -59,7 +59,7 @@ Requires-Python: >=3.9
|
|
|
59
59
|
Description-Content-Type: text/markdown
|
|
60
60
|
License-File: LICENSE
|
|
61
61
|
Requires-Dist: pip>=26.0.1; python_version < "3.10"
|
|
62
|
-
Requires-Dist: pip>=26.1.
|
|
62
|
+
Requires-Dist: pip>=26.1.2; python_version >= "3.10"
|
|
63
63
|
Requires-Dist: packaging>=26.2
|
|
64
64
|
Requires-Dist: setuptools~=70.2; python_version < "3.10"
|
|
65
65
|
Requires-Dist: setuptools>=82.0.1; python_version >= "3.10"
|
|
@@ -75,13 +75,13 @@ Requires-Dist: fasteners>=0.20
|
|
|
75
75
|
Requires-Dist: mycdp>=1.3.7
|
|
76
76
|
Requires-Dist: pynose>=1.5.5
|
|
77
77
|
Requires-Dist: platformdirs~=4.4.0; python_version < "3.10"
|
|
78
|
-
Requires-Dist: platformdirs>=4.
|
|
78
|
+
Requires-Dist: platformdirs>=4.10.0; python_version >= "3.10"
|
|
79
79
|
Requires-Dist: typing-extensions>=4.15.0
|
|
80
80
|
Requires-Dist: sbvirtualdisplay>=1.4.0
|
|
81
81
|
Requires-Dist: MarkupSafe>=3.0.3
|
|
82
82
|
Requires-Dist: Jinja2>=3.1.6
|
|
83
83
|
Requires-Dist: six>=1.17.0
|
|
84
|
-
Requires-Dist: parse>=1.22.
|
|
84
|
+
Requires-Dist: parse>=1.22.1
|
|
85
85
|
Requires-Dist: parse-type>=0.6.6
|
|
86
86
|
Requires-Dist: colorama>=0.4.6
|
|
87
87
|
Requires-Dist: psutil>=7.2.2
|
|
@@ -90,7 +90,7 @@ Requires-Dist: pygments>=2.20.0
|
|
|
90
90
|
Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
|
|
91
91
|
Requires-Dist: tabcompleter>=1.4.1
|
|
92
92
|
Requires-Dist: pdbp>=1.8.2
|
|
93
|
-
Requires-Dist: idna>=3.
|
|
93
|
+
Requires-Dist: idna>=3.17
|
|
94
94
|
Requires-Dist: charset-normalizer<4,>=3.4.7
|
|
95
95
|
Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
|
|
96
96
|
Requires-Dist: urllib3<3,>=2.7.0; python_version >= "3.10"
|
|
@@ -121,11 +121,11 @@ Requires-Dist: pytest-html==4.0.2
|
|
|
121
121
|
Requires-Dist: pytest-metadata==3.1.1
|
|
122
122
|
Requires-Dist: pytest-ordering==0.6
|
|
123
123
|
Requires-Dist: pytest-rerunfailures==16.0.1; python_version < "3.10"
|
|
124
|
-
Requires-Dist: pytest-rerunfailures==16.
|
|
124
|
+
Requires-Dist: pytest-rerunfailures==16.3; python_version >= "3.10"
|
|
125
125
|
Requires-Dist: pytest-xdist==3.8.0
|
|
126
126
|
Requires-Dist: parameterized==0.9.0
|
|
127
127
|
Requires-Dist: behave==1.2.6
|
|
128
|
-
Requires-Dist: soupsieve~=2.8.
|
|
128
|
+
Requires-Dist: soupsieve~=2.8.4
|
|
129
129
|
Requires-Dist: beautifulsoup4~=4.14.3
|
|
130
130
|
Requires-Dist: pyotp==2.9.0
|
|
131
131
|
Requires-Dist: python-xlib==0.33; platform_system == "Linux"
|
|
@@ -140,7 +140,7 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
|
|
|
140
140
|
Requires-Dist: allure-behave>=2.13.5; extra == "allure"
|
|
141
141
|
Provides-Extra: coverage
|
|
142
142
|
Requires-Dist: coverage>=7.10.7; python_version < "3.10" and extra == "coverage"
|
|
143
|
-
Requires-Dist: coverage>=7.14.
|
|
143
|
+
Requires-Dist: coverage>=7.14.1; python_version >= "3.10" and extra == "coverage"
|
|
144
144
|
Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
|
|
145
145
|
Provides-Extra: flake8
|
|
146
146
|
Requires-Dist: flake8==7.3.0; extra == "flake8"
|
|
@@ -203,18 +203,17 @@ Dynamic: summary
|
|
|
203
203
|
<!-- SeleniumBase Docs -->
|
|
204
204
|
|
|
205
205
|
<meta property="og:site_name" content="SeleniumBase">
|
|
206
|
-
<meta property="og:title" content="SeleniumBase:
|
|
207
|
-
<meta property="og:description" content="
|
|
208
|
-
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots">
|
|
206
|
+
<meta property="og:title" content="SeleniumBase: Stealthy Chromium Automation with Python; and E2E Testing." />
|
|
207
|
+
<meta property="og:description" content="Stealthy Chromium Automation, including fast, easy, and reliable Web/UI testing with Python." />
|
|
208
|
+
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots, playwright, stealth, CAPTCHA">
|
|
209
209
|
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
|
|
210
|
-
<link rel="icon" href="https://seleniumbase.github.io/img/
|
|
210
|
+
<link rel="icon" href="https://seleniumbase.github.io/img/logo6.png" />
|
|
211
211
|
|
|
212
|
-
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/
|
|
212
|
+
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="350" /></a></p>
|
|
213
213
|
|
|
214
|
-
<p align="center"
|
|
215
|
-
<p align="center"></p>
|
|
214
|
+
<p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Testing / Scraping / Stealth</b></p>
|
|
216
215
|
|
|
217
|
-
<
|
|
216
|
+
<p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/Tests/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://www.youtube.com/@MichaelMintz"><img src="https://img.shields.io/youtube/channel/subscribers/UCSQElO8vQmNPuTgdd83BHdw?style=flat&logo=youtube&logoColor=white&label=YouTube%20Subscribers&color=red" alt="YouTube Subscribers"></a></p>
|
|
218
217
|
|
|
219
218
|
<p align="center">
|
|
220
219
|
<a href="#python_installation">🚀 Start</a> |
|
|
@@ -252,20 +251,34 @@ Dynamic: summary
|
|
|
252
251
|
<br />
|
|
253
252
|
</p>
|
|
254
253
|
|
|
255
|
-
|
|
254
|
+
--------
|
|
256
255
|
|
|
257
|
-
<
|
|
256
|
+
<ul>
|
|
257
|
+
<li>🐙 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> <b>bypasses bot-detection with Chromium-based browsers.</b></li>
|
|
258
|
+
<li>🎭 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><b><span translate="no">Stealthy Playwright Mode</span></b></a> <b>extends CDP Mode's stealth to Playwright.</b></li>
|
|
259
|
+
<li><b><code>pip install seleniumbase</code></b> for the main framework.</li>
|
|
260
|
+
<li><b><code>pip install playwright</code></b> for the Playwright integration.</li>
|
|
261
|
+
</ul>
|
|
262
|
+
|
|
263
|
+
--------
|
|
264
|
+
|
|
265
|
+
<b>📝 Here's a Python example that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp">Pure CDP Mode</a> (<code>sb_cdp</code>):</b><br />(It navigates to Browserscan where it bypasses bot-detection.)
|
|
258
266
|
|
|
259
267
|
```python
|
|
260
268
|
from seleniumbase import sb_cdp
|
|
261
269
|
|
|
262
270
|
sb = sb_cdp.Chrome()
|
|
263
|
-
sb.open("https://
|
|
271
|
+
sb.open("https://browserscan.net/bot-detection")
|
|
264
272
|
sb.sleep(3)
|
|
265
|
-
sb.
|
|
273
|
+
sb.quit()
|
|
266
274
|
```
|
|
267
275
|
|
|
268
|
-
<
|
|
276
|
+
<p align="center">
|
|
277
|
+
<img src="https://seleniumbase.github.io/cdn/img/results_normal.jpg" width="578" alt="BrowserScan Test Results: Normal">
|
|
278
|
+
<br><em>(All BrowserScan bot-detection checks were passed successfully.)</em></br>
|
|
279
|
+
</p>
|
|
280
|
+
|
|
281
|
+
<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.)
|
|
269
282
|
|
|
270
283
|
```python
|
|
271
284
|
from playwright.sync_api import sync_playwright
|
|
@@ -280,28 +293,12 @@ with sync_playwright() as p:
|
|
|
280
293
|
page.goto("https://browserscan.net/bot-detection")
|
|
281
294
|
|
|
282
295
|
sb.sleep(3)
|
|
283
|
-
sb.
|
|
296
|
+
sb.quit()
|
|
284
297
|
```
|
|
285
298
|
|
|
286
299
|
--------
|
|
287
300
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
🥷 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
291
|
-
|
|
292
|
-
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
293
|
-
|
|
294
|
-
--------
|
|
295
|
-
|
|
296
|
-
<h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
|
|
297
|
-
|
|
298
|
-
<img src="https://seleniumbase.github.io/other/sb_architecture.png" width="596" alt="Stealthy architecture flowchart" />
|
|
299
|
-
|
|
300
|
-
(For maximum stealth, use <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">CDP Mode</a>, which includes <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">Stealthy Playwright Mode</a>)
|
|
301
|
-
|
|
302
|
-
--------
|
|
303
|
-
|
|
304
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_browserscan.py" target="_blank">This example</a> verifies that <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp">Pure CDP Mode</a> is stealthy on <a href="https://www.browserscan.net/bot-detection">BrowserScan</a>:
|
|
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 a few elements highlighted with JavaScript)
|
|
305
302
|
|
|
306
303
|
```python
|
|
307
304
|
from seleniumbase import sb_cdp
|
|
@@ -312,35 +309,43 @@ sb.flash("Test Results", duration=1.5, pause=0.5)
|
|
|
312
309
|
sb.assert_element('strong:contains("Normal")')
|
|
313
310
|
print("Bot Not Detected")
|
|
314
311
|
sb.flash('strong:contains("Normal")', pause=1)
|
|
312
|
+
sb.quit()
|
|
315
313
|
```
|
|
316
314
|
|
|
317
|
-
|
|
315
|
+
--------
|
|
318
316
|
|
|
319
|
-
|
|
317
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank">This example</a> scrapes Hacker News listings:</b></p>
|
|
320
318
|
|
|
321
319
|
```python
|
|
322
|
-
from playwright.sync_api import sync_playwright
|
|
323
320
|
from seleniumbase import sb_cdp
|
|
324
321
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
page = browser.contexts[0].pages[0]
|
|
331
|
-
page.goto("https://browserscan.net/bot-detection")
|
|
332
|
-
page.wait_for_timeout(500)
|
|
333
|
-
sb.flash("Test Results", duration=1.5, pause=0.5)
|
|
334
|
-
sb.assert_element('strong:contains("Normal")')
|
|
335
|
-
print("Bot Not Detected")
|
|
336
|
-
sb.flash('strong:contains("Normal")', pause=1)
|
|
322
|
+
url = "https://news.ycombinator.com/submitted?id=seleniumbase"
|
|
323
|
+
sb = sb_cdp.Chrome(url)
|
|
324
|
+
elements = sb.find_elements("span.titleline > a")
|
|
325
|
+
for element in elements:
|
|
326
|
+
print("* " + element.text)
|
|
337
327
|
```
|
|
338
328
|
|
|
339
329
|
--------
|
|
340
330
|
|
|
331
|
+
🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
332
|
+
|
|
333
|
+
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
334
|
+
|
|
335
|
+
--------
|
|
336
|
+
|
|
337
|
+
<h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
|
|
338
|
+
|
|
339
|
+
<p align="center">
|
|
340
|
+
<img src="https://seleniumbase.github.io/other/sb_architecture.png" width="646" alt="Stealthy architecture flowchart">
|
|
341
|
+
<br><em>(For maximum stealth, use <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">CDP Mode</a>, which includes <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">Stealthy Playwright Mode</a>.)</em></br>
|
|
342
|
+
</p>
|
|
343
|
+
|
|
344
|
+
--------
|
|
345
|
+
|
|
341
346
|
<h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
|
|
342
347
|
|
|
343
|
-
|
|
348
|
+
<p>💡 You can set the Chromium browser to use via command line parameters:</p>
|
|
344
349
|
|
|
345
350
|
```zsh
|
|
346
351
|
python SCRIPT.py --use-chromium # Use the unbranded Chromium browser
|
|
@@ -349,9 +354,9 @@ python SCRIPT.py --edge # Use Microsoft Edge
|
|
|
349
354
|
python SCRIPT.py --brave # Use Brave browser
|
|
350
355
|
```
|
|
351
356
|
|
|
352
|
-
Google Chrome is the default browser
|
|
357
|
+
Google Chrome is the default browser. Only unbranded Chromium and Chrome-for-Testing get installed automatically if not already installed.
|
|
353
358
|
|
|
354
|
-
|
|
359
|
+
The Chromium browser can also be set via method args, eg: `cft=True`, `use_chromium=True`, `browser="edge"`, `browser="brave"`, etc. Eg:
|
|
355
360
|
|
|
356
361
|
```python
|
|
357
362
|
sb = sb_cdp.Chrome(url, use_chromium=True)
|
|
@@ -359,21 +364,7 @@ sb = sb_cdp.Chrome(url, use_chromium=True)
|
|
|
359
364
|
|
|
360
365
|
--------
|
|
361
366
|
|
|
362
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/
|
|
363
|
-
|
|
364
|
-
```python
|
|
365
|
-
from seleniumbase import sb_cdp
|
|
366
|
-
|
|
367
|
-
url = "https://news.ycombinator.com/submitted?id=seleniumbase"
|
|
368
|
-
sb = sb_cdp.Chrome(url)
|
|
369
|
-
elements = sb.find_elements("span.titleline > a")
|
|
370
|
-
for element in elements:
|
|
371
|
-
print("* " + element.text)
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
--------
|
|
375
|
-
|
|
376
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py" target="_blank">This example</a> saves Google Search results with UC + CDP Mode:<br />(Results are saved as PDF, HTML, and PNG files)</p>
|
|
367
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py" target="_blank">This example</a> saves Google Search results with UC + CDP Mode:</b><br />(Results are saved as PDF, HTML, and PNG files to <code>./latest_logs/</code>)</p>
|
|
377
368
|
|
|
378
369
|
```python
|
|
379
370
|
from seleniumbase import SB
|
|
@@ -394,7 +385,7 @@ with SB(uc=True, test=True) as sb:
|
|
|
394
385
|
|
|
395
386
|
--------
|
|
396
387
|
|
|
397
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This example</a> bypasses Cloudflare's challenge page with UC + CDP Mode
|
|
388
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This example</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</b><br />(If the Turnstile isn't bypassed automatically, <b><code>sb.solve_captcha()</code></b> handles it.)</p>
|
|
398
389
|
|
|
399
390
|
```python
|
|
400
391
|
from seleniumbase import SB
|
|
@@ -412,11 +403,16 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
|
412
403
|
sb.post_message("SeleniumBase wasn't detected", duration=4)
|
|
413
404
|
```
|
|
414
405
|
|
|
415
|
-
<
|
|
406
|
+
<p align="center">
|
|
407
|
+
<img src="https://seleniumbase.github.io/other/cf_sec.jpg" alt="SeleniumBase" width="346"> <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" alt="SeleniumBase" width="300">
|
|
408
|
+
<br><em>(Successfully bypassed bot-detection on a Cloudflare challenge page.)</em></br>
|
|
409
|
+
</p>
|
|
410
|
+
|
|
411
|
+
💡 <b><code>sb.solve_captcha()</code></b> handles CAPTCHAs that aren't bypassed automatically.<br />(If no CAPTCHA is present on the current page, then nothing happens.)
|
|
416
412
|
|
|
417
|
-
|
|
413
|
+
--------
|
|
418
414
|
|
|
419
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py" target="_blank">This example</a> handles a CAPTCHA page with Pure CDP Mode
|
|
415
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py" target="_blank">This example</a> handles a CAPTCHA page with Pure CDP Mode:</b></p>
|
|
420
416
|
|
|
421
417
|
```python
|
|
422
418
|
from seleniumbase import sb_cdp
|
|
@@ -431,7 +427,13 @@ sb.highlight('button:contains("Sign in")')
|
|
|
431
427
|
|
|
432
428
|
--------
|
|
433
429
|
|
|
434
|
-
<
|
|
430
|
+
<h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
|
|
431
|
+
|
|
432
|
+
📚 The [SeleniumBase/examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder includes over 150 ready-to-run examples of E2E testing. Examples that start with `test_` or end with `_test.py`/`_tests.py` run with `pytest`. Other examples run directly with raw `python` (those generally start with `raw_` to avoid confusion).
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank">This example</a> tests an e-commerce site with <code>pytest</code>:</b></p>
|
|
435
437
|
|
|
436
438
|
```python
|
|
437
439
|
from seleniumbase import BaseCase
|
|
@@ -457,17 +459,17 @@ class MyTestClass(BaseCase):
|
|
|
457
459
|
|
|
458
460
|
> `pytest test_get_swag.py`
|
|
459
461
|
|
|
460
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="
|
|
462
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="500" /></a>
|
|
461
463
|
|
|
462
464
|
--------
|
|
463
465
|
|
|
464
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This example</a> tests another e-commerce site with <code>pytest</code
|
|
466
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This example</a> tests another e-commerce site with <code>pytest</code>:</b></p>
|
|
465
467
|
|
|
466
468
|
```zsh
|
|
467
469
|
pytest test_coffee_cart.py --demo
|
|
468
470
|
```
|
|
469
471
|
|
|
470
|
-
<p align="left"><a href="https://seleniumbase.io/coffee/" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/coffee_cart.gif" width="
|
|
472
|
+
<p align="left"><a href="https://seleniumbase.io/coffee/" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/coffee_cart.gif" width="500" alt="SeleniumBase Coffee Cart Test" /></a></p>
|
|
471
473
|
|
|
472
474
|
> <p>(<code translate="no">--demo</code> mode slows down tests and highlights actions)</p>
|
|
473
475
|
|
|
@@ -475,13 +477,13 @@ pytest test_coffee_cart.py --demo
|
|
|
475
477
|
|
|
476
478
|
<a id="multiple_examples"></a>
|
|
477
479
|
|
|
478
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">This example</a> covers multiple actions with <code>pytest</code
|
|
480
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">This example</a> covers multiple actions with <code>pytest</code>:</b></p>
|
|
479
481
|
|
|
480
482
|
```zsh
|
|
481
483
|
pytest test_demo_site.py
|
|
482
484
|
```
|
|
483
485
|
|
|
484
|
-
<p align="left"><a href="https://seleniumbase.io/demo_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/demo_page_5.gif" width="
|
|
486
|
+
<p align="left"><a href="https://seleniumbase.io/demo_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/demo_page_5.gif" width="500" alt="SeleniumBase Example" /></a></p>
|
|
485
487
|
|
|
486
488
|
> Easy to type, click, select, toggle, drag & drop, and more.
|
|
487
489
|
|
|
@@ -612,7 +614,7 @@ finally:
|
|
|
612
614
|
<a id="python_installation"></a>
|
|
613
615
|
<h2><img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="42" /> Set up Python & Git:</h2>
|
|
614
616
|
|
|
615
|
-
<a href="https://
|
|
617
|
+
<a href="https://pypi.org/project/seleniumbase/" target="_blank"><img src="https://img.shields.io/pypi/pyversions/seleniumbase.svg?color=22AAEE&logo=python&logoColor=FEDC54" title="Supported Python Versions" /></a>
|
|
616
618
|
|
|
617
619
|
🔵 Add <b><a href="https://www.python.org/downloads/">Python</a></b> and <b><a href="https://git-scm.com/">Git</a></b> to your System PATH.
|
|
618
620
|
|
|
@@ -704,10 +706,10 @@ pip install -e .
|
|
|
704
706
|
<summary> ▶️ Here's sample output from a chromedriver download. (<b>click to expand</b>)</summary>
|
|
705
707
|
|
|
706
708
|
```zsh
|
|
707
|
-
*** chromedriver to download =
|
|
709
|
+
*** chromedriver to download = 148.0.7778.178 (Latest Stable)
|
|
708
710
|
|
|
709
711
|
Downloading chromedriver-mac-arm64.zip from:
|
|
710
|
-
https://storage.googleapis.com/chrome-for-testing-public/
|
|
712
|
+
https://storage.googleapis.com/chrome-for-testing-public/148.0.7778.178/mac-arm64/chromedriver-mac-arm64.zip ...
|
|
711
713
|
Download Complete!
|
|
712
714
|
|
|
713
715
|
Extracting ['chromedriver'] from chromedriver-mac-arm64.zip ...
|
|
@@ -717,8 +719,8 @@ The file [chromedriver] was saved to:
|
|
|
717
719
|
~/github/SeleniumBase/seleniumbase/drivers/
|
|
718
720
|
chromedriver
|
|
719
721
|
|
|
720
|
-
Making [chromedriver
|
|
721
|
-
[chromedriver
|
|
722
|
+
Making [chromedriver 148.0.7778.178] executable ...
|
|
723
|
+
[chromedriver 148.0.7778.178] is now ready for use!
|
|
722
724
|
```
|
|
723
725
|
|
|
724
726
|
</details>
|
|
@@ -736,7 +738,7 @@ cd examples/
|
|
|
736
738
|
pytest my_first_test.py
|
|
737
739
|
```
|
|
738
740
|
|
|
739
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="
|
|
741
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="500" /></a>
|
|
740
742
|
|
|
741
743
|
<p align="left"><b>Here's the full code for <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py">my_first_test.py</a>:</b></p>
|
|
742
744
|
|
|
@@ -1729,7 +1731,8 @@ pytest --reruns=1 --reruns-delay=1
|
|
|
1729
1731
|
<p><div><b><a href="https://github.com/mdmintz">https://github.com/mdmintz</a></b></div></p>
|
|
1730
1732
|
|
|
1731
1733
|
<div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" title="SeleniumBase" width="310" /></a></div>
|
|
1732
|
-
<div><a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/seleniumbase.svg?color=19A57B" title="Stargazers" /></a></div>
|
|
1733
1734
|
<div><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://img.shields.io/badge/tested%20with-SeleniumBase-04C38E.svg" alt="Tested with SeleniumBase" /></a> <img src="https://views.whatilearened.today/views/github/seleniumbase/SeleniumBase.svg" width="98px" height="20px" alt="Views" /></div>
|
|
1735
|
+
<div><a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" /></a> </div>
|
|
1734
1736
|
<div align="left"></div>
|
|
1735
1737
|
<div><a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?color=7289DA&label=Discord&logo=discord&logoColor=white"/></a></div>
|
|
1738
|
+
<div><a href="https://www.youtube.com/@MichaelMintz"><img src="https://img.shields.io/youtube/channel/subscribers/UCSQElO8vQmNPuTgdd83BHdw?style=flat&logo=youtube&logoColor=white&label=YouTube%20Subscribers&color=red" alt="YouTube Subscribers"></a></div>
|