seleniumbase 4.55.2__tar.gz → 4.56.1__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.55.2/seleniumbase.egg-info → seleniumbase-4.56.1}/PKG-INFO +72 -32
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/README.md +61 -24
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/requirements.txt +8 -5
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/browser_launcher.py +31 -18
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/sb_driver.py +3 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/page_actions.py +34 -16
- {seleniumbase-4.55.2 → seleniumbase-4.56.1/seleniumbase.egg-info}/PKG-INFO +72 -32
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase.egg-info/requires.txt +14 -7
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/setup.py +10 -7
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/.gitignore +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/LICENSE +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/MANIFEST.in +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/install.sh +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/mcp_servers/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/mcp_servers/server.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/pyproject.toml +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/pytest.ini +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/sbase/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/sbase/__main__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/sbase/steps.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/sb_cdp.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/base_case.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/setup.cfg +0 -0
- {seleniumbase-4.55.2 → seleniumbase-4.56.1}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.56.1
|
|
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
|
|
@@ -67,7 +67,8 @@ Requires-Dist: certifi>=2026.7.22
|
|
|
67
67
|
Requires-Dist: exceptiongroup>=1.3.1
|
|
68
68
|
Requires-Dist: websockets~=16.1.1; python_version == "3.10"
|
|
69
69
|
Requires-Dist: websockets>=16.1.1; python_version >= "3.11"
|
|
70
|
-
Requires-Dist: filelock
|
|
70
|
+
Requires-Dist: filelock==4.1.0; python_version == "3.10"
|
|
71
|
+
Requires-Dist: filelock>=4.1.1; python_version >= "3.11"
|
|
71
72
|
Requires-Dist: fasteners>=0.20
|
|
72
73
|
Requires-Dist: mycdp>=1.4.0
|
|
73
74
|
Requires-Dist: pynose>=1.5.5
|
|
@@ -76,7 +77,7 @@ Requires-Dist: sbvirtualdisplay>=1.4.0
|
|
|
76
77
|
Requires-Dist: MarkupSafe>=3.0.4
|
|
77
78
|
Requires-Dist: Jinja2>=3.1.6
|
|
78
79
|
Requires-Dist: six>=1.17.0
|
|
79
|
-
Requires-Dist: parse>=1.22.
|
|
80
|
+
Requires-Dist: parse>=1.22.3
|
|
80
81
|
Requires-Dist: parse-type>=0.6.6
|
|
81
82
|
Requires-Dist: colorama>=0.4.6
|
|
82
83
|
Requires-Dist: psutil>=7.2.2
|
|
@@ -96,8 +97,9 @@ Requires-Dist: trio<1,>=0.34.0
|
|
|
96
97
|
Requires-Dist: trio-websocket~=0.12.2
|
|
97
98
|
Requires-Dist: wsproto~=1.3.2
|
|
98
99
|
Requires-Dist: websocket-client~=1.9.2
|
|
99
|
-
Requires-Dist: selenium==4.
|
|
100
|
-
Requires-Dist: cssselect
|
|
100
|
+
Requires-Dist: selenium==4.51.0
|
|
101
|
+
Requires-Dist: cssselect~=1.5.0; python_version < "3.11"
|
|
102
|
+
Requires-Dist: cssselect<2,>=1.6.0; python_version >= "3.11"
|
|
101
103
|
Requires-Dist: sortedcontainers==2.4.0
|
|
102
104
|
Requires-Dist: execnet==2.1.2
|
|
103
105
|
Requires-Dist: iniconfig~=2.3.1
|
|
@@ -112,7 +114,8 @@ Requires-Dist: pytest-rerunfailures==16.7; python_version >= "3.11"
|
|
|
112
114
|
Requires-Dist: pytest-xdist==3.8.0
|
|
113
115
|
Requires-Dist: parameterized==0.9.0
|
|
114
116
|
Requires-Dist: behave==1.2.6
|
|
115
|
-
Requires-Dist: soupsieve~=2.10.0
|
|
117
|
+
Requires-Dist: soupsieve~=2.10.0; python_version < "3.11.5"
|
|
118
|
+
Requires-Dist: soupsieve~=3.0.3; python_version >= "3.11.5"
|
|
116
119
|
Requires-Dist: beautifulsoup4~=4.15.0
|
|
117
120
|
Requires-Dist: pyotp~=2.10.0
|
|
118
121
|
Requires-Dist: python-xlib==0.33; platform_system == "Linux"
|
|
@@ -140,7 +143,7 @@ Provides-Extra: pdfminer
|
|
|
140
143
|
Requires-Dist: pdfminer.six==20260107; extra == "pdfminer"
|
|
141
144
|
Requires-Dist: cryptography==50.0.2; extra == "pdfminer"
|
|
142
145
|
Requires-Dist: cffi==2.1.1; extra == "pdfminer"
|
|
143
|
-
Requires-Dist: pycparser==3.
|
|
146
|
+
Requires-Dist: pycparser==3.11; extra == "pdfminer"
|
|
144
147
|
Provides-Extra: pillow
|
|
145
148
|
Requires-Dist: Pillow>=12.3.0; extra == "pillow"
|
|
146
149
|
Provides-Extra: pip-system-certs
|
|
@@ -154,7 +157,7 @@ Requires-Dist: pyee>=13.0.1; extra == "playwright"
|
|
|
154
157
|
Provides-Extra: pyautogui
|
|
155
158
|
Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
|
|
156
159
|
Provides-Extra: uv
|
|
157
|
-
Requires-Dist: uv>=0.
|
|
160
|
+
Requires-Dist: uv>=0.13.0; extra == "uv"
|
|
158
161
|
Dynamic: author
|
|
159
162
|
Dynamic: author-email
|
|
160
163
|
Dynamic: classifier
|
|
@@ -179,11 +182,13 @@ Dynamic: summary
|
|
|
179
182
|
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
|
|
180
183
|
<link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
|
|
181
184
|
|
|
182
|
-
<
|
|
185
|
+
<h1 align="center">📊 SeleniumBase</h1>
|
|
183
186
|
|
|
184
|
-
<p align="center"
|
|
187
|
+
<p><h3 align="center">One framework for browser automation, web scraping, and testing.<br /></h3></p>
|
|
185
188
|
|
|
186
|
-
<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" height="20" /></a> <a href="https://
|
|
189
|
+
<p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?style=flat-square&color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://img.shields.io/github/actions/workflow/status/seleniumbase/SeleniumBase/python-package.yml?branch=master&style=flat-square&label=CI" alt="SeleniumBase GitHub Actions" height="20" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg?style=flat-square" alt="SeleniumBase Docs" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank">
|
|
190
|
+
<img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" />
|
|
191
|
+
</a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-F4C246.svg?style=flat-square" title="SeleniumBase" height="20" /></a><br /><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://img.shields.io/badge/docs-📺-D124D8.svg?style=flat-square&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?style=flat-square&color=7289DA&label=Discord&logo=discord&logoColor=white" height="20" /></a> <a href="https://www.facebook.com/SeleniumBase/" target="_blank"> <img src="https://img.shields.io/badge/Facebook-4K_followers-1877F2?style=flat-square&logo=facebook&logoColor=white" alt="SeleniumBase Facebook Followers" height="20" /></a> <a href="https://x.com/seleniumbase" target="_blank"><img src="https://img.shields.io/badge/-1K_followers-1DA1F2?style=flat-square&logo=x&logoColor=white&labelColor=555555" alt="SeleniumBase X Followers" height="20" /></a></p>
|
|
187
192
|
|
|
188
193
|
<p align="center">
|
|
189
194
|
<a href="#python_installation">🚀 Start</a> |
|
|
@@ -218,24 +223,17 @@ Dynamic: summary
|
|
|
218
223
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/presenter/ReadMe.md">🎞️ Presenter</a> |
|
|
219
224
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/visual_testing/ReadMe.md">🖼️ Visual</a> |
|
|
220
225
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/case_plans.md">🗂️ CPlans</a>
|
|
221
|
-
<br />
|
|
222
226
|
</p>
|
|
223
227
|
|
|
224
228
|
--------
|
|
225
229
|
|
|
226
|
-
🥷
|
|
227
|
-
|
|
228
|
-
🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
|
|
230
|
+
🥷 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> and the newer <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> makes your automation undetectable to anti-bot services. <b>CDP Mode</b> also <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><span translate="no">adds <b>stealth</b> to stock Playwright</span></a>.
|
|
229
231
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
233
|
-
|
|
234
|
-
📚 Examples that have `test_` or `_test` in the filename are specifically designed to run with `pytest` / `pynose`. Other examples run directly with raw `python` (those files generally start with `raw_` to avoid confusion).
|
|
232
|
+
📚 Example scripts that start or end with "<code>test</code>" are specifically designed to be run with <code><b>pytest</b></code>. Other scripts run directly with raw <code><b>python</b></code>. (Those start with "<code>raw</code>" to avoid confusion.)
|
|
235
233
|
|
|
236
234
|
--------
|
|
237
235
|
|
|
238
|
-
<b>📝 Here's a
|
|
236
|
+
<b>📝 Here's a <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py" target="_blank">Python script</a> 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 performs actions such as typing, clicking, and bypassing a Cloudflare Turnstile)
|
|
239
237
|
|
|
240
238
|
```python
|
|
241
239
|
from seleniumbase import sb_cdp
|
|
@@ -253,7 +251,9 @@ sb.sleep(1.5)
|
|
|
253
251
|
sb.quit()
|
|
254
252
|
```
|
|
255
253
|
|
|
256
|
-
|
|
254
|
+
```
|
|
255
|
+
python raw_cdp_planetmc.py
|
|
256
|
+
```
|
|
257
257
|
|
|
258
258
|
<p align="left">
|
|
259
259
|
<img src="https://seleniumbase.github.io/other/pmc_captcha_2.png" width="530" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
|
|
@@ -261,9 +261,11 @@ sb.quit()
|
|
|
261
261
|
|
|
262
262
|
✅ <b><code>sb.solve_captcha()</code></b> handles CAPTCHAs that aren't bypassed automatically.<br />(If called when there's no CAPTCHA on the page, then nothing happens / no-op.)
|
|
263
263
|
|
|
264
|
+
ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition to occur.
|
|
265
|
+
|
|
264
266
|
--------
|
|
265
267
|
|
|
266
|
-
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank">This
|
|
268
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank">This script</a> scrapes Hacker News listings:</b></p>
|
|
267
269
|
|
|
268
270
|
```python
|
|
269
271
|
from seleniumbase import sb_cdp
|
|
@@ -275,7 +277,9 @@ for element in elements:
|
|
|
275
277
|
print("* " + element.text)
|
|
276
278
|
```
|
|
277
279
|
|
|
278
|
-
|
|
280
|
+
```
|
|
281
|
+
python raw_cdp_yc_news.py
|
|
282
|
+
```
|
|
279
283
|
|
|
280
284
|
<p align="left">
|
|
281
285
|
<img src="https://seleniumbase.github.io/other/yc_news_results.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
|
|
@@ -283,7 +287,7 @@ for element in elements:
|
|
|
283
287
|
|
|
284
288
|
--------
|
|
285
289
|
|
|
286
|
-
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This
|
|
290
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This script</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</b></p>
|
|
287
291
|
|
|
288
292
|
```python
|
|
289
293
|
from seleniumbase import SB
|
|
@@ -297,7 +301,9 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
|
297
301
|
sb.highlight('button:contains("Sign in")')
|
|
298
302
|
```
|
|
299
303
|
|
|
300
|
-
|
|
304
|
+
```
|
|
305
|
+
python raw_gitlab.py
|
|
306
|
+
```
|
|
301
307
|
|
|
302
308
|
<p align="left">
|
|
303
309
|
<img src="https://seleniumbase.github.io/other/gitlab_bypass_2.png" alt="SeleniumBase" width="420" style="max-width: 100% !important; height: auto !important;"/>
|
|
@@ -305,6 +311,14 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
|
305
311
|
|
|
306
312
|
--------
|
|
307
313
|
|
|
314
|
+
🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
|
|
315
|
+
|
|
316
|
+
🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
317
|
+
|
|
318
|
+
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
319
|
+
|
|
320
|
+
--------
|
|
321
|
+
|
|
308
322
|
<h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
|
|
309
323
|
|
|
310
324
|
<p>💡 You can set which Chromium browser to use via command-line parameters:</p>
|
|
@@ -328,13 +342,13 @@ sb = sb_cdp.Chrome(use_chromium=True)
|
|
|
328
342
|
|
|
329
343
|
<h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
|
|
330
344
|
|
|
331
|
-
<img src="https://seleniumbase.github.io/other/sb_architecture.png" width="
|
|
345
|
+
<img src="https://seleniumbase.github.io/other/sb_architecture.png" width="530" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
|
|
332
346
|
|
|
333
347
|
--------
|
|
334
348
|
|
|
335
349
|
<h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
|
|
336
350
|
|
|
337
|
-
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank">This
|
|
351
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank">This script</a> tests an e-commerce site with <code>pytest</code>:</b></p>
|
|
338
352
|
|
|
339
353
|
```python
|
|
340
354
|
from seleniumbase import BaseCase
|
|
@@ -358,7 +372,9 @@ class MyTestClass(BaseCase):
|
|
|
358
372
|
self.assert_text("Thank you for your order!")
|
|
359
373
|
```
|
|
360
374
|
|
|
361
|
-
|
|
375
|
+
```
|
|
376
|
+
pytest test_get_swag.py
|
|
377
|
+
```
|
|
362
378
|
|
|
363
379
|
<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" style="max-width: 100% !important; height: auto !important;" /></a>
|
|
364
380
|
|
|
@@ -366,7 +382,31 @@ class MyTestClass(BaseCase):
|
|
|
366
382
|
|
|
367
383
|
--------
|
|
368
384
|
|
|
369
|
-
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This
|
|
385
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This script</a> tests a different e-commerce site with <code>pytest</code>:</b></p>
|
|
386
|
+
|
|
387
|
+
```python
|
|
388
|
+
from seleniumbase import BaseCase
|
|
389
|
+
BaseCase.main(__name__, __file__)
|
|
390
|
+
|
|
391
|
+
class CoffeeCartTest(BaseCase):
|
|
392
|
+
def test_coffee_cart(self):
|
|
393
|
+
self.goto("https://seleniumbase.io/coffee/")
|
|
394
|
+
self.assert_title("Coffee Cart")
|
|
395
|
+
self.assert_element('button:contains("Total: $0.00")')
|
|
396
|
+
self.click('div[data-sb="Cappuccino"]')
|
|
397
|
+
self.assert_exact_text("cart (1)", 'a[aria-label="Cart page"]')
|
|
398
|
+
self.click('div[data-sb="Flat-White"]')
|
|
399
|
+
self.assert_exact_text("cart (2)", 'a[aria-label="Cart page"]')
|
|
400
|
+
self.click('div[data-sb="Cafe-Latte"]')
|
|
401
|
+
self.assert_exact_text("cart (3)", 'a[aria-label="Cart page"]')
|
|
402
|
+
self.click('a[aria-label="Cart page"]')
|
|
403
|
+
self.assert_exact_text("Total: $53.00", "button.pay")
|
|
404
|
+
self.click("button.pay")
|
|
405
|
+
self.type("input#name", "Selenium Coffee")
|
|
406
|
+
self.type("input#email", "test@test.test")
|
|
407
|
+
self.click("button#submit-payment")
|
|
408
|
+
self.assert_text("Thanks for your purchase.", "#app .success")
|
|
409
|
+
```
|
|
370
410
|
|
|
371
411
|
```zsh
|
|
372
412
|
pytest test_coffee_cart.py --demo
|
|
@@ -380,7 +420,7 @@ pytest test_coffee_cart.py --demo
|
|
|
380
420
|
|
|
381
421
|
<a id="multiple_examples"></a>
|
|
382
422
|
|
|
383
|
-
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">This
|
|
423
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">This script</a> covers multiple actions with <code>pytest</code>:</b></p>
|
|
384
424
|
|
|
385
425
|
```zsh
|
|
386
426
|
pytest test_demo_site.py
|
|
@@ -390,7 +430,7 @@ pytest test_demo_site.py
|
|
|
390
430
|
|
|
391
431
|
> Easy to type, click, select, toggle, drag & drop, and more.
|
|
392
432
|
|
|
393
|
-
📚 For more
|
|
433
|
+
📚 For more scripts, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.
|
|
394
434
|
|
|
395
435
|
--------
|
|
396
436
|
|
|
@@ -8,11 +8,13 @@
|
|
|
8
8
|
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
|
|
9
9
|
<link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
|
|
10
10
|
|
|
11
|
-
<
|
|
11
|
+
<h1 align="center">📊 SeleniumBase</h1>
|
|
12
12
|
|
|
13
|
-
<p align="center"
|
|
13
|
+
<p><h3 align="center">One framework for browser automation, web scraping, and testing.<br /></h3></p>
|
|
14
14
|
|
|
15
|
-
<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" height="20" /></a> <a href="https://
|
|
15
|
+
<p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?style=flat-square&color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://img.shields.io/github/actions/workflow/status/seleniumbase/SeleniumBase/python-package.yml?branch=master&style=flat-square&label=CI" alt="SeleniumBase GitHub Actions" height="20" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg?style=flat-square" alt="SeleniumBase Docs" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank">
|
|
16
|
+
<img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" />
|
|
17
|
+
</a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-F4C246.svg?style=flat-square" title="SeleniumBase" height="20" /></a><br /><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://img.shields.io/badge/docs-📺-D124D8.svg?style=flat-square&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?style=flat-square&color=7289DA&label=Discord&logo=discord&logoColor=white" height="20" /></a> <a href="https://www.facebook.com/SeleniumBase/" target="_blank"> <img src="https://img.shields.io/badge/Facebook-4K_followers-1877F2?style=flat-square&logo=facebook&logoColor=white" alt="SeleniumBase Facebook Followers" height="20" /></a> <a href="https://x.com/seleniumbase" target="_blank"><img src="https://img.shields.io/badge/-1K_followers-1DA1F2?style=flat-square&logo=x&logoColor=white&labelColor=555555" alt="SeleniumBase X Followers" height="20" /></a></p>
|
|
16
18
|
|
|
17
19
|
<p align="center">
|
|
18
20
|
<a href="#python_installation">🚀 Start</a> |
|
|
@@ -47,24 +49,17 @@
|
|
|
47
49
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/presenter/ReadMe.md">🎞️ Presenter</a> |
|
|
48
50
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/visual_testing/ReadMe.md">🖼️ Visual</a> |
|
|
49
51
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/case_plans.md">🗂️ CPlans</a>
|
|
50
|
-
<br />
|
|
51
52
|
</p>
|
|
52
53
|
|
|
53
54
|
--------
|
|
54
55
|
|
|
55
|
-
🥷
|
|
56
|
-
|
|
57
|
-
🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
|
|
56
|
+
🥷 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> and the newer <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> makes your automation undetectable to anti-bot services. <b>CDP Mode</b> also <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><span translate="no">adds <b>stealth</b> to stock Playwright</span></a>.
|
|
58
57
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
62
|
-
|
|
63
|
-
📚 Examples that have `test_` or `_test` in the filename are specifically designed to run with `pytest` / `pynose`. Other examples run directly with raw `python` (those files generally start with `raw_` to avoid confusion).
|
|
58
|
+
📚 Example scripts that start or end with "<code>test</code>" are specifically designed to be run with <code><b>pytest</b></code>. Other scripts run directly with raw <code><b>python</b></code>. (Those start with "<code>raw</code>" to avoid confusion.)
|
|
64
59
|
|
|
65
60
|
--------
|
|
66
61
|
|
|
67
|
-
<b>📝 Here's a
|
|
62
|
+
<b>📝 Here's a <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py" target="_blank">Python script</a> 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 performs actions such as typing, clicking, and bypassing a Cloudflare Turnstile)
|
|
68
63
|
|
|
69
64
|
```python
|
|
70
65
|
from seleniumbase import sb_cdp
|
|
@@ -82,7 +77,9 @@ sb.sleep(1.5)
|
|
|
82
77
|
sb.quit()
|
|
83
78
|
```
|
|
84
79
|
|
|
85
|
-
|
|
80
|
+
```
|
|
81
|
+
python raw_cdp_planetmc.py
|
|
82
|
+
```
|
|
86
83
|
|
|
87
84
|
<p align="left">
|
|
88
85
|
<img src="https://seleniumbase.github.io/other/pmc_captcha_2.png" width="530" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
|
|
@@ -90,9 +87,11 @@ sb.quit()
|
|
|
90
87
|
|
|
91
88
|
✅ <b><code>sb.solve_captcha()</code></b> handles CAPTCHAs that aren't bypassed automatically.<br />(If called when there's no CAPTCHA on the page, then nothing happens / no-op.)
|
|
92
89
|
|
|
90
|
+
ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition to occur.
|
|
91
|
+
|
|
93
92
|
--------
|
|
94
93
|
|
|
95
|
-
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank">This
|
|
94
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank">This script</a> scrapes Hacker News listings:</b></p>
|
|
96
95
|
|
|
97
96
|
```python
|
|
98
97
|
from seleniumbase import sb_cdp
|
|
@@ -104,7 +103,9 @@ for element in elements:
|
|
|
104
103
|
print("* " + element.text)
|
|
105
104
|
```
|
|
106
105
|
|
|
107
|
-
|
|
106
|
+
```
|
|
107
|
+
python raw_cdp_yc_news.py
|
|
108
|
+
```
|
|
108
109
|
|
|
109
110
|
<p align="left">
|
|
110
111
|
<img src="https://seleniumbase.github.io/other/yc_news_results.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
|
|
@@ -112,7 +113,7 @@ for element in elements:
|
|
|
112
113
|
|
|
113
114
|
--------
|
|
114
115
|
|
|
115
|
-
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This
|
|
116
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This script</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</b></p>
|
|
116
117
|
|
|
117
118
|
```python
|
|
118
119
|
from seleniumbase import SB
|
|
@@ -126,7 +127,9 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
|
126
127
|
sb.highlight('button:contains("Sign in")')
|
|
127
128
|
```
|
|
128
129
|
|
|
129
|
-
|
|
130
|
+
```
|
|
131
|
+
python raw_gitlab.py
|
|
132
|
+
```
|
|
130
133
|
|
|
131
134
|
<p align="left">
|
|
132
135
|
<img src="https://seleniumbase.github.io/other/gitlab_bypass_2.png" alt="SeleniumBase" width="420" style="max-width: 100% !important; height: auto !important;"/>
|
|
@@ -134,6 +137,14 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
|
134
137
|
|
|
135
138
|
--------
|
|
136
139
|
|
|
140
|
+
🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
|
|
141
|
+
|
|
142
|
+
🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
143
|
+
|
|
144
|
+
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
145
|
+
|
|
146
|
+
--------
|
|
147
|
+
|
|
137
148
|
<h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
|
|
138
149
|
|
|
139
150
|
<p>💡 You can set which Chromium browser to use via command-line parameters:</p>
|
|
@@ -157,13 +168,13 @@ sb = sb_cdp.Chrome(use_chromium=True)
|
|
|
157
168
|
|
|
158
169
|
<h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
|
|
159
170
|
|
|
160
|
-
<img src="https://seleniumbase.github.io/other/sb_architecture.png" width="
|
|
171
|
+
<img src="https://seleniumbase.github.io/other/sb_architecture.png" width="530" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
|
|
161
172
|
|
|
162
173
|
--------
|
|
163
174
|
|
|
164
175
|
<h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
|
|
165
176
|
|
|
166
|
-
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank">This
|
|
177
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank">This script</a> tests an e-commerce site with <code>pytest</code>:</b></p>
|
|
167
178
|
|
|
168
179
|
```python
|
|
169
180
|
from seleniumbase import BaseCase
|
|
@@ -187,7 +198,9 @@ class MyTestClass(BaseCase):
|
|
|
187
198
|
self.assert_text("Thank you for your order!")
|
|
188
199
|
```
|
|
189
200
|
|
|
190
|
-
|
|
201
|
+
```
|
|
202
|
+
pytest test_get_swag.py
|
|
203
|
+
```
|
|
191
204
|
|
|
192
205
|
<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" style="max-width: 100% !important; height: auto !important;" /></a>
|
|
193
206
|
|
|
@@ -195,7 +208,31 @@ class MyTestClass(BaseCase):
|
|
|
195
208
|
|
|
196
209
|
--------
|
|
197
210
|
|
|
198
|
-
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This
|
|
211
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This script</a> tests a different e-commerce site with <code>pytest</code>:</b></p>
|
|
212
|
+
|
|
213
|
+
```python
|
|
214
|
+
from seleniumbase import BaseCase
|
|
215
|
+
BaseCase.main(__name__, __file__)
|
|
216
|
+
|
|
217
|
+
class CoffeeCartTest(BaseCase):
|
|
218
|
+
def test_coffee_cart(self):
|
|
219
|
+
self.goto("https://seleniumbase.io/coffee/")
|
|
220
|
+
self.assert_title("Coffee Cart")
|
|
221
|
+
self.assert_element('button:contains("Total: $0.00")')
|
|
222
|
+
self.click('div[data-sb="Cappuccino"]')
|
|
223
|
+
self.assert_exact_text("cart (1)", 'a[aria-label="Cart page"]')
|
|
224
|
+
self.click('div[data-sb="Flat-White"]')
|
|
225
|
+
self.assert_exact_text("cart (2)", 'a[aria-label="Cart page"]')
|
|
226
|
+
self.click('div[data-sb="Cafe-Latte"]')
|
|
227
|
+
self.assert_exact_text("cart (3)", 'a[aria-label="Cart page"]')
|
|
228
|
+
self.click('a[aria-label="Cart page"]')
|
|
229
|
+
self.assert_exact_text("Total: $53.00", "button.pay")
|
|
230
|
+
self.click("button.pay")
|
|
231
|
+
self.type("input#name", "Selenium Coffee")
|
|
232
|
+
self.type("input#email", "test@test.test")
|
|
233
|
+
self.click("button#submit-payment")
|
|
234
|
+
self.assert_text("Thanks for your purchase.", "#app .success")
|
|
235
|
+
```
|
|
199
236
|
|
|
200
237
|
```zsh
|
|
201
238
|
pytest test_coffee_cart.py --demo
|
|
@@ -209,7 +246,7 @@ pytest test_coffee_cart.py --demo
|
|
|
209
246
|
|
|
210
247
|
<a id="multiple_examples"></a>
|
|
211
248
|
|
|
212
|
-
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">This
|
|
249
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">This script</a> covers multiple actions with <code>pytest</code>:</b></p>
|
|
213
250
|
|
|
214
251
|
```zsh
|
|
215
252
|
pytest test_demo_site.py
|
|
@@ -219,7 +256,7 @@ pytest test_demo_site.py
|
|
|
219
256
|
|
|
220
257
|
> Easy to type, click, select, toggle, drag & drop, and more.
|
|
221
258
|
|
|
222
|
-
📚 For more
|
|
259
|
+
📚 For more scripts, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.
|
|
223
260
|
|
|
224
261
|
--------
|
|
225
262
|
|
|
@@ -7,7 +7,8 @@ certifi>=2026.7.22
|
|
|
7
7
|
exceptiongroup>=1.3.1
|
|
8
8
|
websockets~=16.1.1;python_version=="3.10"
|
|
9
9
|
websockets>=16.1.1;python_version>="3.11"
|
|
10
|
-
filelock
|
|
10
|
+
filelock==4.1.0;python_version=="3.10"
|
|
11
|
+
filelock>=4.1.1;python_version>="3.11"
|
|
11
12
|
fasteners>=0.20
|
|
12
13
|
mycdp>=1.4.0
|
|
13
14
|
pynose>=1.5.5
|
|
@@ -16,7 +17,7 @@ sbvirtualdisplay>=1.4.0
|
|
|
16
17
|
MarkupSafe>=3.0.4
|
|
17
18
|
Jinja2>=3.1.6
|
|
18
19
|
six>=1.17.0
|
|
19
|
-
parse>=1.22.
|
|
20
|
+
parse>=1.22.3
|
|
20
21
|
parse-type>=0.6.6
|
|
21
22
|
colorama>=0.4.6
|
|
22
23
|
psutil>=7.2.2
|
|
@@ -36,8 +37,9 @@ trio>=0.34.0,<1
|
|
|
36
37
|
trio-websocket~=0.12.2
|
|
37
38
|
wsproto~=1.3.2
|
|
38
39
|
websocket-client~=1.9.2
|
|
39
|
-
selenium==4.
|
|
40
|
-
cssselect
|
|
40
|
+
selenium==4.51.0
|
|
41
|
+
cssselect~=1.5.0;python_version<"3.11"
|
|
42
|
+
cssselect>=1.6.0,<2;python_version>="3.11"
|
|
41
43
|
sortedcontainers==2.4.0
|
|
42
44
|
execnet==2.1.2
|
|
43
45
|
iniconfig~=2.3.1
|
|
@@ -52,7 +54,8 @@ pytest-rerunfailures==16.7;python_version>="3.11"
|
|
|
52
54
|
pytest-xdist==3.8.0
|
|
53
55
|
parameterized==0.9.0
|
|
54
56
|
behave==1.2.6
|
|
55
|
-
soupsieve~=2.10.0
|
|
57
|
+
soupsieve~=2.10.0;python_version<"3.11.5"
|
|
58
|
+
soupsieve~=3.0.3;python_version>="3.11.5"
|
|
56
59
|
beautifulsoup4~=4.15.0
|
|
57
60
|
pyotp~=2.10.0
|
|
58
61
|
python-xlib==0.33;platform_system=="Linux"
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.
|
|
2
|
+
__version__ = "4.56.1"
|