seleniumbase 4.56.5__tar.gz → 4.57.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.56.5/seleniumbase.egg-info → seleniumbase-4.57.1}/PKG-INFO +38 -63
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/README.md +29 -54
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/requirements.txt +7 -7
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/run.py +3 -3
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_install.py +30 -15
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/browser_launcher.py +0 -1
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/sb_cdp.py +5 -2
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/shared_utils.py +3 -5
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/cdp_driver/config.py +1 -1
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/cdp_driver/tab.py +23 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1/seleniumbase.egg-info}/PKG-INFO +38 -63
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase.egg-info/requires.txt +8 -8
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/setup.py +8 -8
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/.gitignore +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/LICENSE +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/MANIFEST.in +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/install.sh +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/mcp_servers/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/mcp_servers/server.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/pyproject.toml +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/pytest.ini +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/sbase/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/sbase/__main__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/sbase/steps.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/base_case.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.1}/setup.cfg +0 -0
- {seleniumbase-4.56.5 → seleniumbase-4.57.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.57.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
|
|
@@ -58,7 +58,7 @@ Classifier: Topic :: Utilities
|
|
|
58
58
|
Requires-Python: >=3.10
|
|
59
59
|
Description-Content-Type: text/markdown
|
|
60
60
|
License-File: LICENSE
|
|
61
|
-
Requires-Dist: pip>=26.
|
|
61
|
+
Requires-Dist: pip>=26.3
|
|
62
62
|
Requires-Dist: packaging>=26.3
|
|
63
63
|
Requires-Dist: setuptools>=84.2.1
|
|
64
64
|
Requires-Dist: wheel>=0.48.0
|
|
@@ -66,9 +66,9 @@ Requires-Dist: attrs>=26.1.0
|
|
|
66
66
|
Requires-Dist: certifi>=2026.10.23
|
|
67
67
|
Requires-Dist: exceptiongroup>=1.3.1
|
|
68
68
|
Requires-Dist: websockets~=16.1.1; python_version == "3.10"
|
|
69
|
-
Requires-Dist: websockets>=17.
|
|
69
|
+
Requires-Dist: websockets>=17.4; python_version >= "3.11"
|
|
70
70
|
Requires-Dist: filelock==4.1.0; python_version == "3.10"
|
|
71
|
-
Requires-Dist: filelock>=4.2.
|
|
71
|
+
Requires-Dist: filelock>=4.2.9; python_version >= "3.11"
|
|
72
72
|
Requires-Dist: fasteners>=0.20
|
|
73
73
|
Requires-Dist: mycdp>=1.4.0
|
|
74
74
|
Requires-Dist: pynose>=1.5.5
|
|
@@ -93,11 +93,11 @@ Requires-Dist: requests~=2.34.2
|
|
|
93
93
|
Requires-Dist: sniffio==1.3.1
|
|
94
94
|
Requires-Dist: h11==0.16.0
|
|
95
95
|
Requires-Dist: outcome==1.3.0.post0
|
|
96
|
-
Requires-Dist: trio<1,>=0.
|
|
96
|
+
Requires-Dist: trio<1,>=0.35.0
|
|
97
97
|
Requires-Dist: trio-websocket~=0.12.2
|
|
98
98
|
Requires-Dist: wsproto~=1.3.2
|
|
99
99
|
Requires-Dist: websocket-client~=1.9.2
|
|
100
|
-
Requires-Dist: selenium==4.
|
|
100
|
+
Requires-Dist: selenium==4.52.0
|
|
101
101
|
Requires-Dist: cssselect~=1.5.0; python_version < "3.11"
|
|
102
102
|
Requires-Dist: cssselect<2,>=1.6.0; python_version >= "3.11"
|
|
103
103
|
Requires-Dist: sortedcontainers==2.4.0
|
|
@@ -116,7 +116,7 @@ Requires-Dist: pytest-xdist==3.8.0
|
|
|
116
116
|
Requires-Dist: parameterized==0.9.0
|
|
117
117
|
Requires-Dist: behave==1.2.6
|
|
118
118
|
Requires-Dist: soupsieve~=2.10.0; python_version < "3.11.5"
|
|
119
|
-
Requires-Dist: soupsieve~=
|
|
119
|
+
Requires-Dist: soupsieve~=4.0.1; python_version >= "3.11.5"
|
|
120
120
|
Requires-Dist: beautifulsoup4~=4.15.0
|
|
121
121
|
Requires-Dist: pyotp~=2.10.0
|
|
122
122
|
Requires-Dist: python-xlib==0.33; platform_system == "Linux"
|
|
@@ -130,7 +130,7 @@ Requires-Dist: allure-python-commons>=2.16.0; extra == "allure"
|
|
|
130
130
|
Requires-Dist: allure-behave>=2.16.0; extra == "allure"
|
|
131
131
|
Provides-Extra: coverage
|
|
132
132
|
Requires-Dist: coverage>=7.16.2; python_version == "3.10" and extra == "coverage"
|
|
133
|
-
Requires-Dist: coverage>=7.17.
|
|
133
|
+
Requires-Dist: coverage>=7.17.2; python_version >= "3.11" and extra == "coverage"
|
|
134
134
|
Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
|
|
135
135
|
Provides-Extra: flake8
|
|
136
136
|
Requires-Dist: flake8==7.4.1; python_version == "3.10" and extra == "flake8"
|
|
@@ -164,7 +164,7 @@ Requires-Dist: pyee>=14.0.0; python_version >= "3.12" and extra == "playwright"
|
|
|
164
164
|
Provides-Extra: pyautogui
|
|
165
165
|
Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
|
|
166
166
|
Provides-Extra: uv
|
|
167
|
-
Requires-Dist: uv>=0.13.
|
|
167
|
+
Requires-Dist: uv>=0.13.7; extra == "uv"
|
|
168
168
|
Dynamic: author
|
|
169
169
|
Dynamic: author-email
|
|
170
170
|
Dynamic: classifier
|
|
@@ -189,37 +189,31 @@ Dynamic: summary
|
|
|
189
189
|
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
|
|
190
190
|
<link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
|
|
191
191
|
|
|
192
|
-
<h1 align="center"
|
|
192
|
+
<h1 align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" title="SeleniumBase" width="520" style="max-width: 100% !important; height: auto !important;" /></a></h1>
|
|
193
193
|
|
|
194
|
-
<h3 align="center">
|
|
195
|
-
|
|
196
|
-
<p align="center"><b align="center">Includes stealth options for bypassing bot-detection and CAPTCHAs.<br /></b></p>
|
|
194
|
+
<h3 align="center">Browser Automation, Web Scraping, and End-to-End Testing.<br /></h3>
|
|
197
195
|
|
|
198
196
|
<p align="center">
|
|
199
197
|
<a href="https://pypi.python.org/pypi/seleniumbase" target="_blank" rel="noopener"><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" rel="noopener"><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" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg?style=flat-square" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/license-MIT-33A6C6.svg?style=flat-square" title="SeleniumBase" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/mcp_servers" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/MCP-tool_info-7C6EE5?style=flat-square" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank" rel="noopener"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a><br />
|
|
200
198
|
<a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-📺-D844E8.svg?style=flat-square&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a> <a href="https://www.facebook.com/SeleniumBase/" target="_blank" rel="noopener"> <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" rel="noopener"><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> <a href="https://discord.gg/EdhQTn3EyE" target="_blank" rel="noopener"><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://github.com/seleniumbase/SeleniumBase" target="_blank" rel="noopener"><img src="https://badgen.net/github/stars/seleniumbase/SeleniumBase" title="Stars" height="20" /></a>
|
|
201
199
|
</p>
|
|
202
200
|
|
|
203
|
-
<p align="center">
|
|
204
|
-
<a href="https://trendshift.io/repositories/12493?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-12493" target="_blank" rel="noopener"><img src="https://trendshift.io/api/badge/repositories/12493" alt="seleniumbase%2SeleniumBase | Trendshift" width="250" height="55"/></a>
|
|
205
|
-
</p>
|
|
206
|
-
|
|
207
201
|
<p align="center">
|
|
208
202
|
<a href="#python_installation">🚀 Start</a> |
|
|
209
203
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">🏰 Features</a> |
|
|
210
204
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md">🎛️ Options</a> |
|
|
211
205
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">📚 Examples</a> |
|
|
212
206
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">💻 Scripts</a> |
|
|
213
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾
|
|
207
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locales</a>
|
|
214
208
|
<br />
|
|
215
209
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📗 API</a> |
|
|
216
210
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/cdp_mode_methods.md">📘 Stealth API</a> |
|
|
217
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠
|
|
211
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 Syntax Formats</a> |
|
|
218
212
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/recorder_mode.md">🔴 Recorder</a> |
|
|
219
213
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/example_logs/ReadMe.md">📊 Dashboard</a>
|
|
220
214
|
<br />
|
|
221
215
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/commander.md">🎖️ GUI</a> |
|
|
222
|
-
<a href="https://seleniumbase.io/demo_page">📰
|
|
216
|
+
<a href="https://seleniumbase.io/demo_page">📰 Test Page</a> |
|
|
223
217
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md">👤 UC Mode</a> |
|
|
224
218
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">🐙 CDP Mode</a> |
|
|
225
219
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
|
|
@@ -232,7 +226,7 @@ Dynamic: summary
|
|
|
232
226
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/tour_examples/ReadMe.md">🚎 Tours</a>
|
|
233
227
|
<br />
|
|
234
228
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/mcp_servers/">🤖 MCP</a> |
|
|
235
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🟨 JS
|
|
229
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🟨 JS Tools</a> |
|
|
236
230
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/translations.md">🌏 Translator</a> |
|
|
237
231
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/presenter/ReadMe.md">🎞️ Presenter</a> |
|
|
238
232
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/visual_testing/ReadMe.md">🖼️ Visual</a> |
|
|
@@ -241,51 +235,38 @@ Dynamic: summary
|
|
|
241
235
|
|
|
242
236
|
--------
|
|
243
237
|
|
|
244
|
-
|
|
238
|
+
🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
|
|
239
|
+
|
|
240
|
+
🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
241
|
+
|
|
242
|
+
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
245
243
|
|
|
246
|
-
|
|
244
|
+
> [!NOTE]
|
|
245
|
+
> Examples that start with `test` run with **`pytest`**.<br />
|
|
246
|
+
> Other examples run directly with raw **`python`**.
|
|
247
247
|
|
|
248
248
|
--------
|
|
249
249
|
|
|
250
|
-
📝 [This example](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_cdp_mode.py) uses <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (*[Pure CDP Mode](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#Pure_CDP_Mode)*):<br /><em>(It
|
|
250
|
+
📝 [This example](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_mode.py) uses <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (*[Pure CDP Mode](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#Pure_CDP_Mode)*):<br /><em>(It shows some basic methods and bypasses a Cloudflare Turnstile)</em>
|
|
251
251
|
|
|
252
252
|
```python
|
|
253
253
|
from seleniumbase import sb_cdp
|
|
254
254
|
|
|
255
|
-
sb = sb_cdp.Chrome() #
|
|
256
|
-
sb.goto("https://browserscan.net/bot-detection")
|
|
257
|
-
sb.assert_element('strong:contains("Normal")')
|
|
258
|
-
sb.sleep(1)
|
|
259
|
-
|
|
260
|
-
sb.goto("https://bot.sannysoft.com/")
|
|
261
|
-
sb.assert_element(".passed")
|
|
262
|
-
sb.assert_element_not_visible(".failed")
|
|
263
|
-
sb.sleep(1)
|
|
264
|
-
|
|
255
|
+
sb = sb_cdp.Chrome() # Launches a stealth browser
|
|
265
256
|
sb.goto("https://www.planetminecraft.com/account")
|
|
266
|
-
sb.type('[name="email"]', "
|
|
257
|
+
sb.type('[name="email"]', "Test123")
|
|
267
258
|
sb.type('[name="password"]', "Pass")
|
|
268
|
-
sb.click("input#autologin")
|
|
269
|
-
sb.solve_captcha() #
|
|
259
|
+
sb.click("input#autologin") # Unchecks a checkbox
|
|
260
|
+
sb.solve_captcha() # (as backup if not automatic)
|
|
270
261
|
sb.assert_element('input[name="login"]')
|
|
271
262
|
sb.assert_element_not_visible("input[disabled]")
|
|
272
|
-
sb.sleep(1)
|
|
273
|
-
sb.quit() #
|
|
263
|
+
sb.sleep(1) # (only to slow down the live demo)
|
|
264
|
+
sb.quit() # (otherwise quits automatically at end)
|
|
274
265
|
```
|
|
275
266
|
|
|
276
|
-
<p align="
|
|
277
|
-
<img src="https://seleniumbase.github.io/
|
|
278
|
-
<br /><em>(
|
|
279
|
-
</p>
|
|
280
|
-
|
|
281
|
-
<p align="center">
|
|
282
|
-
<img src="https://seleniumbase.github.io/other/sannysoft_success.jpg" width="428" style="max-width: 100% !important; height: auto !important;" alt="All Sannysoft tests passed successfully" />
|
|
283
|
-
<br /><em>(All Sannysoft bot-detection tests passed successfully)</em>
|
|
284
|
-
</p>
|
|
285
|
-
|
|
286
|
-
<p align="center">
|
|
287
|
-
<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" />
|
|
288
|
-
<br /><em>(Cloudflare Turnstile bypassed successfully on Planet Minecraft)</em>
|
|
267
|
+
<p align="left">
|
|
268
|
+
<img src="https://seleniumbase.github.io/other/pmc_captcha_3.png" width="542" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
|
|
269
|
+
<br /><em>(Note that the click action only unchecked the "Stay signed in" checkbox.)</em>
|
|
289
270
|
</p>
|
|
290
271
|
|
|
291
272
|
--------
|
|
@@ -296,7 +277,7 @@ sb.quit() # Quit browser before end-of-program
|
|
|
296
277
|
|
|
297
278
|
--------
|
|
298
279
|
|
|
299
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank" rel="noopener">This script</a>
|
|
280
|
+
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank" rel="noopener">This script</a> searches Hacker News via Algolia. Then prints items and saves to PDF:</p>
|
|
300
281
|
|
|
301
282
|
```python
|
|
302
283
|
from seleniumbase import sb_cdp
|
|
@@ -305,7 +286,9 @@ sb = sb_cdp.Chrome(fast=True)
|
|
|
305
286
|
sb.goto("https://hn.algolia.com/?query=seleniumbase")
|
|
306
287
|
elements = sb.find_elements("div.Story_title > a")
|
|
307
288
|
for element in elements:
|
|
308
|
-
print("
|
|
289
|
+
print("--> " + element.text)
|
|
290
|
+
sb.save_as_pdf("sb_news.pdf", folder="./downloaded_files/")
|
|
291
|
+
print("*** PDF saved to: ./downloaded_files/sb_news.pdf")
|
|
309
292
|
```
|
|
310
293
|
|
|
311
294
|
```
|
|
@@ -313,7 +296,7 @@ python raw_cdp_yc_news.py
|
|
|
313
296
|
```
|
|
314
297
|
|
|
315
298
|
<p align="left">
|
|
316
|
-
<img src="https://seleniumbase.github.io/other/
|
|
299
|
+
<img src="https://seleniumbase.github.io/other/yc_news_results_2.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
|
|
317
300
|
</p>
|
|
318
301
|
|
|
319
302
|
--------
|
|
@@ -342,14 +325,6 @@ python raw_gitlab.py
|
|
|
342
325
|
|
|
343
326
|
--------
|
|
344
327
|
|
|
345
|
-
🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
|
|
346
|
-
|
|
347
|
-
🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
348
|
-
|
|
349
|
-
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
350
|
-
|
|
351
|
-
--------
|
|
352
|
-
|
|
353
328
|
<h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
|
|
354
329
|
|
|
355
330
|
<p>💡 You can set which Chromium browser to use via command-line parameters:</p>
|
|
@@ -8,37 +8,31 @@
|
|
|
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
|
-
<h1 align="center"
|
|
11
|
+
<h1 align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" title="SeleniumBase" width="520" style="max-width: 100% !important; height: auto !important;" /></a></h1>
|
|
12
12
|
|
|
13
|
-
<h3 align="center">
|
|
14
|
-
|
|
15
|
-
<p align="center"><b align="center">Includes stealth options for bypassing bot-detection and CAPTCHAs.<br /></b></p>
|
|
13
|
+
<h3 align="center">Browser Automation, Web Scraping, and End-to-End Testing.<br /></h3>
|
|
16
14
|
|
|
17
15
|
<p align="center">
|
|
18
16
|
<a href="https://pypi.python.org/pypi/seleniumbase" target="_blank" rel="noopener"><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" rel="noopener"><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" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg?style=flat-square" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/license-MIT-33A6C6.svg?style=flat-square" title="SeleniumBase" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/mcp_servers" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/MCP-tool_info-7C6EE5?style=flat-square" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank" rel="noopener"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a><br />
|
|
19
17
|
<a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-📺-D844E8.svg?style=flat-square&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a> <a href="https://www.facebook.com/SeleniumBase/" target="_blank" rel="noopener"> <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" rel="noopener"><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> <a href="https://discord.gg/EdhQTn3EyE" target="_blank" rel="noopener"><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://github.com/seleniumbase/SeleniumBase" target="_blank" rel="noopener"><img src="https://badgen.net/github/stars/seleniumbase/SeleniumBase" title="Stars" height="20" /></a>
|
|
20
18
|
</p>
|
|
21
19
|
|
|
22
|
-
<p align="center">
|
|
23
|
-
<a href="https://trendshift.io/repositories/12493?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-12493" target="_blank" rel="noopener"><img src="https://trendshift.io/api/badge/repositories/12493" alt="seleniumbase%2SeleniumBase | Trendshift" width="250" height="55"/></a>
|
|
24
|
-
</p>
|
|
25
|
-
|
|
26
20
|
<p align="center">
|
|
27
21
|
<a href="#python_installation">🚀 Start</a> |
|
|
28
22
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">🏰 Features</a> |
|
|
29
23
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md">🎛️ Options</a> |
|
|
30
24
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">📚 Examples</a> |
|
|
31
25
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">💻 Scripts</a> |
|
|
32
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾
|
|
26
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locales</a>
|
|
33
27
|
<br />
|
|
34
28
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📗 API</a> |
|
|
35
29
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/cdp_mode_methods.md">📘 Stealth API</a> |
|
|
36
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠
|
|
30
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 Syntax Formats</a> |
|
|
37
31
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/recorder_mode.md">🔴 Recorder</a> |
|
|
38
32
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/example_logs/ReadMe.md">📊 Dashboard</a>
|
|
39
33
|
<br />
|
|
40
34
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/commander.md">🎖️ GUI</a> |
|
|
41
|
-
<a href="https://seleniumbase.io/demo_page">📰
|
|
35
|
+
<a href="https://seleniumbase.io/demo_page">📰 Test Page</a> |
|
|
42
36
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md">👤 UC Mode</a> |
|
|
43
37
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">🐙 CDP Mode</a> |
|
|
44
38
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
|
|
@@ -51,7 +45,7 @@
|
|
|
51
45
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/tour_examples/ReadMe.md">🚎 Tours</a>
|
|
52
46
|
<br />
|
|
53
47
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/mcp_servers/">🤖 MCP</a> |
|
|
54
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🟨 JS
|
|
48
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🟨 JS Tools</a> |
|
|
55
49
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/translations.md">🌏 Translator</a> |
|
|
56
50
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/presenter/ReadMe.md">🎞️ Presenter</a> |
|
|
57
51
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/visual_testing/ReadMe.md">🖼️ Visual</a> |
|
|
@@ -60,51 +54,38 @@
|
|
|
60
54
|
|
|
61
55
|
--------
|
|
62
56
|
|
|
63
|
-
|
|
57
|
+
🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
|
|
58
|
+
|
|
59
|
+
🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
60
|
+
|
|
61
|
+
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
64
62
|
|
|
65
|
-
|
|
63
|
+
> [!NOTE]
|
|
64
|
+
> Examples that start with `test` run with **`pytest`**.<br />
|
|
65
|
+
> Other examples run directly with raw **`python`**.
|
|
66
66
|
|
|
67
67
|
--------
|
|
68
68
|
|
|
69
|
-
📝 [This example](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_cdp_mode.py) uses <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (*[Pure CDP Mode](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#Pure_CDP_Mode)*):<br /><em>(It
|
|
69
|
+
📝 [This example](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_mode.py) uses <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (*[Pure CDP Mode](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#Pure_CDP_Mode)*):<br /><em>(It shows some basic methods and bypasses a Cloudflare Turnstile)</em>
|
|
70
70
|
|
|
71
71
|
```python
|
|
72
72
|
from seleniumbase import sb_cdp
|
|
73
73
|
|
|
74
|
-
sb = sb_cdp.Chrome() #
|
|
75
|
-
sb.goto("https://browserscan.net/bot-detection")
|
|
76
|
-
sb.assert_element('strong:contains("Normal")')
|
|
77
|
-
sb.sleep(1)
|
|
78
|
-
|
|
79
|
-
sb.goto("https://bot.sannysoft.com/")
|
|
80
|
-
sb.assert_element(".passed")
|
|
81
|
-
sb.assert_element_not_visible(".failed")
|
|
82
|
-
sb.sleep(1)
|
|
83
|
-
|
|
74
|
+
sb = sb_cdp.Chrome() # Launches a stealth browser
|
|
84
75
|
sb.goto("https://www.planetminecraft.com/account")
|
|
85
|
-
sb.type('[name="email"]', "
|
|
76
|
+
sb.type('[name="email"]', "Test123")
|
|
86
77
|
sb.type('[name="password"]', "Pass")
|
|
87
|
-
sb.click("input#autologin")
|
|
88
|
-
sb.solve_captcha() #
|
|
78
|
+
sb.click("input#autologin") # Unchecks a checkbox
|
|
79
|
+
sb.solve_captcha() # (as backup if not automatic)
|
|
89
80
|
sb.assert_element('input[name="login"]')
|
|
90
81
|
sb.assert_element_not_visible("input[disabled]")
|
|
91
|
-
sb.sleep(1)
|
|
92
|
-
sb.quit() #
|
|
82
|
+
sb.sleep(1) # (only to slow down the live demo)
|
|
83
|
+
sb.quit() # (otherwise quits automatically at end)
|
|
93
84
|
```
|
|
94
85
|
|
|
95
|
-
<p align="
|
|
96
|
-
<img src="https://seleniumbase.github.io/
|
|
97
|
-
<br /><em>(
|
|
98
|
-
</p>
|
|
99
|
-
|
|
100
|
-
<p align="center">
|
|
101
|
-
<img src="https://seleniumbase.github.io/other/sannysoft_success.jpg" width="428" style="max-width: 100% !important; height: auto !important;" alt="All Sannysoft tests passed successfully" />
|
|
102
|
-
<br /><em>(All Sannysoft bot-detection tests passed successfully)</em>
|
|
103
|
-
</p>
|
|
104
|
-
|
|
105
|
-
<p align="center">
|
|
106
|
-
<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" />
|
|
107
|
-
<br /><em>(Cloudflare Turnstile bypassed successfully on Planet Minecraft)</em>
|
|
86
|
+
<p align="left">
|
|
87
|
+
<img src="https://seleniumbase.github.io/other/pmc_captcha_3.png" width="542" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
|
|
88
|
+
<br /><em>(Note that the click action only unchecked the "Stay signed in" checkbox.)</em>
|
|
108
89
|
</p>
|
|
109
90
|
|
|
110
91
|
--------
|
|
@@ -115,7 +96,7 @@ sb.quit() # Quit browser before end-of-program
|
|
|
115
96
|
|
|
116
97
|
--------
|
|
117
98
|
|
|
118
|
-
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank" rel="noopener">This script</a>
|
|
99
|
+
<p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank" rel="noopener">This script</a> searches Hacker News via Algolia. Then prints items and saves to PDF:</p>
|
|
119
100
|
|
|
120
101
|
```python
|
|
121
102
|
from seleniumbase import sb_cdp
|
|
@@ -124,7 +105,9 @@ sb = sb_cdp.Chrome(fast=True)
|
|
|
124
105
|
sb.goto("https://hn.algolia.com/?query=seleniumbase")
|
|
125
106
|
elements = sb.find_elements("div.Story_title > a")
|
|
126
107
|
for element in elements:
|
|
127
|
-
print("
|
|
108
|
+
print("--> " + element.text)
|
|
109
|
+
sb.save_as_pdf("sb_news.pdf", folder="./downloaded_files/")
|
|
110
|
+
print("*** PDF saved to: ./downloaded_files/sb_news.pdf")
|
|
128
111
|
```
|
|
129
112
|
|
|
130
113
|
```
|
|
@@ -132,7 +115,7 @@ python raw_cdp_yc_news.py
|
|
|
132
115
|
```
|
|
133
116
|
|
|
134
117
|
<p align="left">
|
|
135
|
-
<img src="https://seleniumbase.github.io/other/
|
|
118
|
+
<img src="https://seleniumbase.github.io/other/yc_news_results_2.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
|
|
136
119
|
</p>
|
|
137
120
|
|
|
138
121
|
--------
|
|
@@ -161,14 +144,6 @@ python raw_gitlab.py
|
|
|
161
144
|
|
|
162
145
|
--------
|
|
163
146
|
|
|
164
|
-
🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
|
|
165
|
-
|
|
166
|
-
🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
167
|
-
|
|
168
|
-
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
169
|
-
|
|
170
|
-
--------
|
|
171
|
-
|
|
172
147
|
<h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
|
|
173
148
|
|
|
174
149
|
<p>💡 You can set which Chromium browser to use via command-line parameters:</p>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
pip>=26.
|
|
1
|
+
pip>=26.3
|
|
2
2
|
packaging>=26.3
|
|
3
3
|
setuptools>=84.2.1
|
|
4
4
|
wheel>=0.48.0
|
|
@@ -6,9 +6,9 @@ attrs>=26.1.0
|
|
|
6
6
|
certifi>=2026.10.23
|
|
7
7
|
exceptiongroup>=1.3.1
|
|
8
8
|
websockets~=16.1.1;python_version=="3.10"
|
|
9
|
-
websockets>=17.
|
|
9
|
+
websockets>=17.4;python_version>="3.11"
|
|
10
10
|
filelock==4.1.0;python_version=="3.10"
|
|
11
|
-
filelock>=4.2.
|
|
11
|
+
filelock>=4.2.9;python_version>="3.11"
|
|
12
12
|
fasteners>=0.20
|
|
13
13
|
mycdp>=1.4.0
|
|
14
14
|
pynose>=1.5.5
|
|
@@ -33,11 +33,11 @@ requests~=2.34.2
|
|
|
33
33
|
sniffio==1.3.1
|
|
34
34
|
h11==0.16.0
|
|
35
35
|
outcome==1.3.0.post0
|
|
36
|
-
trio>=0.
|
|
36
|
+
trio>=0.35.0,<1
|
|
37
37
|
trio-websocket~=0.12.2
|
|
38
38
|
wsproto~=1.3.2
|
|
39
39
|
websocket-client~=1.9.2
|
|
40
|
-
selenium==4.
|
|
40
|
+
selenium==4.52.0
|
|
41
41
|
cssselect~=1.5.0;python_version<"3.11"
|
|
42
42
|
cssselect>=1.6.0,<2;python_version>="3.11"
|
|
43
43
|
sortedcontainers==2.4.0
|
|
@@ -56,7 +56,7 @@ pytest-xdist==3.8.0
|
|
|
56
56
|
parameterized==0.9.0
|
|
57
57
|
behave==1.2.6
|
|
58
58
|
soupsieve~=2.10.0;python_version<"3.11.5"
|
|
59
|
-
soupsieve~=
|
|
59
|
+
soupsieve~=4.0.1;python_version>="3.11.5"
|
|
60
60
|
beautifulsoup4~=4.15.0
|
|
61
61
|
pyotp~=2.10.0
|
|
62
62
|
python-xlib==0.33;platform_system=="Linux"
|
|
@@ -69,7 +69,7 @@ rich>=15.0.0,<16
|
|
|
69
69
|
# ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
|
|
70
70
|
|
|
71
71
|
coverage>=7.16.2;python_version=="3.10"
|
|
72
|
-
coverage>=7.17.
|
|
72
|
+
coverage>=7.17.2;python_version>="3.11"
|
|
73
73
|
pytest-cov>=7.1.0
|
|
74
74
|
flake8==7.4.1;python_version=="3.10"
|
|
75
75
|
flake8==7.5.0;python_version>="3.11"
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.
|
|
2
|
+
__version__ = "4.57.1"
|
|
@@ -152,14 +152,14 @@ def show_install_usage():
|
|
|
152
152
|
print(" sbase get chromedriver")
|
|
153
153
|
print(" sbase get geckodriver")
|
|
154
154
|
print(" sbase get edgedriver")
|
|
155
|
-
print(" sbase get chromedriver
|
|
156
|
-
print(" sbase get chromedriver
|
|
155
|
+
print(" sbase get chromedriver 156")
|
|
156
|
+
print(" sbase get chromedriver 156.0.8078.80")
|
|
157
157
|
print(" sbase get chromedriver stable")
|
|
158
158
|
print(" sbase get chromedriver beta")
|
|
159
159
|
print(" sbase get chromedriver -p")
|
|
160
160
|
print(" sbase get chromium")
|
|
161
161
|
print(" sbase get chromium --revision=1639046")
|
|
162
|
-
print(" sbase get cft
|
|
162
|
+
print(" sbase get cft 156")
|
|
163
163
|
print(" sbase get chs")
|
|
164
164
|
print("Output:")
|
|
165
165
|
print(" Downloads driver/binary to seleniumbase/drivers/")
|
|
@@ -19,14 +19,14 @@ Examples:
|
|
|
19
19
|
sbase get chromedriver
|
|
20
20
|
sbase get geckodriver
|
|
21
21
|
sbase get edgedriver
|
|
22
|
-
sbase get chromedriver
|
|
23
|
-
sbase get chromedriver
|
|
22
|
+
sbase get chromedriver 156
|
|
23
|
+
sbase get chromedriver 156.0.8078.80
|
|
24
24
|
sbase get chromedriver stable
|
|
25
25
|
sbase get chromedriver beta
|
|
26
26
|
sbase get chromedriver -p
|
|
27
27
|
sbase get chromium
|
|
28
28
|
sbase get chromium --revision=1639046
|
|
29
|
-
sbase get cft
|
|
29
|
+
sbase get cft 156
|
|
30
30
|
sbase get chs
|
|
31
31
|
Output:
|
|
32
32
|
Downloads driver/binary to seleniumbase/drivers/
|
|
@@ -72,7 +72,7 @@ DRIVER_DIR_CHROMIUM = os.path.dirname(
|
|
|
72
72
|
)
|
|
73
73
|
LOCAL_PATH = "/usr/local/bin/" # On Mac and Linux systems
|
|
74
74
|
DEFAULT_CHROMEDRIVER_VERSION = "114.0.5735.90" # (If can't find LATEST_STABLE)
|
|
75
|
-
DEFAULT_GECKODRIVER_VERSION = "v0.
|
|
75
|
+
DEFAULT_GECKODRIVER_VERSION = "v0.37.1"
|
|
76
76
|
DEFAULT_EDGEDRIVER_VERSION = "115.0.1901.183" # (If can't find LATEST_STABLE)
|
|
77
77
|
|
|
78
78
|
|
|
@@ -96,14 +96,14 @@ def invalid_run_command():
|
|
|
96
96
|
exp += " sbase get chromedriver\n"
|
|
97
97
|
exp += " sbase get geckodriver\n"
|
|
98
98
|
exp += " sbase get edgedriver\n"
|
|
99
|
-
exp += " sbase get chromedriver
|
|
100
|
-
exp += " sbase get chromedriver
|
|
99
|
+
exp += " sbase get chromedriver 156\n"
|
|
100
|
+
exp += " sbase get chromedriver 156.0.8078.80\n"
|
|
101
101
|
exp += " sbase get chromedriver stable\n"
|
|
102
102
|
exp += " sbase get chromedriver beta\n"
|
|
103
103
|
exp += " sbase get chromedriver -p\n"
|
|
104
104
|
exp += " sbase get chromium\n"
|
|
105
105
|
exp += " sbase get chromium --revision=1639046\n"
|
|
106
|
-
exp += " sbase get cft
|
|
106
|
+
exp += " sbase get cft 156\n"
|
|
107
107
|
exp += " sbase get chs\n"
|
|
108
108
|
exp += "Output:\n"
|
|
109
109
|
exp += " Downloads driver/binary to seleniumbase/drivers/\n"
|
|
@@ -504,7 +504,10 @@ def main(override=None, intel_for_uc=None, force_uc=None):
|
|
|
504
504
|
else:
|
|
505
505
|
file_name = "chromedriver_mac64.zip"
|
|
506
506
|
elif IS_LINUX:
|
|
507
|
-
|
|
507
|
+
if IS_ARM_LINUX:
|
|
508
|
+
file_name = "chromedriver-linux-arm64.zip"
|
|
509
|
+
else:
|
|
510
|
+
file_name = "chromedriver-linux64.zip"
|
|
508
511
|
elif IS_WINDOWS:
|
|
509
512
|
file_name = "chromedriver_win32.zip" # Works for win32 / win_x64
|
|
510
513
|
if not get_latest and not get_v_latest and num_args < 4:
|
|
@@ -596,8 +599,12 @@ def main(override=None, intel_for_uc=None, force_uc=None):
|
|
|
596
599
|
platform_code = "mac-x64"
|
|
597
600
|
file_name = "chromedriver-mac-x64.zip"
|
|
598
601
|
elif IS_LINUX:
|
|
599
|
-
|
|
600
|
-
|
|
602
|
+
if IS_ARM_LINUX:
|
|
603
|
+
platform_code = "linux-arm64"
|
|
604
|
+
file_name = "chromedriver-linux-arm64.zip"
|
|
605
|
+
else:
|
|
606
|
+
platform_code = "linux64"
|
|
607
|
+
file_name = "chromedriver-linux64.zip"
|
|
601
608
|
elif IS_WINDOWS:
|
|
602
609
|
if "64" in ARCH:
|
|
603
610
|
platform_code = "win64"
|
|
@@ -715,8 +722,12 @@ def main(override=None, intel_for_uc=None, force_uc=None):
|
|
|
715
722
|
platform_code = "mac-x64"
|
|
716
723
|
file_name = "chrome-mac-x64.zip"
|
|
717
724
|
elif IS_LINUX:
|
|
718
|
-
|
|
719
|
-
|
|
725
|
+
if IS_ARM_LINUX:
|
|
726
|
+
platform_code = "linux-arm64"
|
|
727
|
+
file_name = "chrome-linux-arm64.zip"
|
|
728
|
+
else:
|
|
729
|
+
platform_code = "linux64"
|
|
730
|
+
file_name = "chrome-linux64.zip"
|
|
720
731
|
elif IS_WINDOWS:
|
|
721
732
|
if "64" in ARCH:
|
|
722
733
|
platform_code = "win64"
|
|
@@ -824,8 +835,12 @@ def main(override=None, intel_for_uc=None, force_uc=None):
|
|
|
824
835
|
platform_code = "mac-x64"
|
|
825
836
|
file_name = "chrome-headless-shell-mac-x64.zip"
|
|
826
837
|
elif IS_LINUX:
|
|
827
|
-
|
|
828
|
-
|
|
838
|
+
if IS_ARM_LINUX:
|
|
839
|
+
platform_code = "linux-arm64"
|
|
840
|
+
file_name = "chrome-headless-shell-linux-arm64.zip"
|
|
841
|
+
else:
|
|
842
|
+
platform_code = "linux64"
|
|
843
|
+
file_name = "chrome-headless-shell-linux64.zip"
|
|
829
844
|
elif IS_WINDOWS:
|
|
830
845
|
if "64" in ARCH:
|
|
831
846
|
platform_code = "win64"
|
|
@@ -869,7 +884,7 @@ def main(override=None, intel_for_uc=None, force_uc=None):
|
|
|
869
884
|
file_name = "geckodriver-%s-macos.tar.gz" % use_version
|
|
870
885
|
elif IS_LINUX:
|
|
871
886
|
if "64" in ARCH:
|
|
872
|
-
if
|
|
887
|
+
if IS_ARM_LINUX:
|
|
873
888
|
file_name = (
|
|
874
889
|
"geckodriver-%s-linux-aarch64.tar.gz" % use_version
|
|
875
890
|
)
|
|
@@ -2828,7 +2828,6 @@ def _set_chrome_options(
|
|
|
2828
2828
|
included_disabled_features.append("NetworkPrediction")
|
|
2829
2829
|
included_disabled_features.append("WebAuthentication")
|
|
2830
2830
|
included_disabled_features.append("PasskeyAuth")
|
|
2831
|
-
included_disabled_features.append("MediaRouter")
|
|
2832
2831
|
included_disabled_features.append("DialMediaRouteProvider")
|
|
2833
2832
|
included_disabled_features.append("WebRtcHideLocalIpsWithMdns")
|
|
2834
2833
|
if is_using_uc(undetectable, browser_name):
|