seleniumbase 4.56.3__tar.gz → 4.56.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {seleniumbase-4.56.3/seleniumbase.egg-info → seleniumbase-4.56.5}/PKG-INFO +43 -59
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/README.md +28 -48
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/requirements.txt +8 -5
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/sb_cdp.py +1 -1
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/base_case.py +1 -1
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/page_utils.py +1 -1
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/element.py +2 -1
- {seleniumbase-4.56.3 → seleniumbase-4.56.5/seleniumbase.egg-info}/PKG-INFO +43 -59
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase.egg-info/requires.txt +25 -9
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/setup.py +15 -11
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/.gitignore +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/LICENSE +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/MANIFEST.in +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/install.sh +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/mcp_servers/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/mcp_servers/server.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/pyproject.toml +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/pytest.ini +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/sbase/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/sbase/__main__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/sbase/steps.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/browser_launcher.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/setup.cfg +0 -0
- {seleniumbase-4.56.3 → seleniumbase-4.56.5}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.56.
|
|
3
|
+
Version: 4.56.5
|
|
4
4
|
Summary: SeleniumBase is a framework for web crawling, scraping, and testing. Supports pytest. CDP Mode adds stealth. Includes many tools.
|
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
|
6
6
|
Author: Michael Mintz
|
|
@@ -63,7 +63,7 @@ Requires-Dist: packaging>=26.3
|
|
|
63
63
|
Requires-Dist: setuptools>=84.2.1
|
|
64
64
|
Requires-Dist: wheel>=0.48.0
|
|
65
65
|
Requires-Dist: attrs>=26.1.0
|
|
66
|
-
Requires-Dist: certifi>=2026.10.
|
|
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
69
|
Requires-Dist: websockets>=17.3; python_version >= "3.11"
|
|
@@ -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~=3.0.
|
|
119
|
+
Requires-Dist: soupsieve~=3.0.4; 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"
|
|
@@ -129,12 +129,15 @@ Requires-Dist: allure-pytest>=2.16.0; extra == "allure"
|
|
|
129
129
|
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
|
-
Requires-Dist: coverage>=7.16.2; extra == "coverage"
|
|
132
|
+
Requires-Dist: coverage>=7.16.2; python_version == "3.10" and extra == "coverage"
|
|
133
|
+
Requires-Dist: coverage>=7.17.0; python_version >= "3.11" and extra == "coverage"
|
|
133
134
|
Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
|
|
134
135
|
Provides-Extra: flake8
|
|
135
|
-
Requires-Dist: flake8==7.4.1; extra == "flake8"
|
|
136
|
+
Requires-Dist: flake8==7.4.1; python_version == "3.10" and extra == "flake8"
|
|
137
|
+
Requires-Dist: flake8==7.5.0; python_version >= "3.11" and extra == "flake8"
|
|
136
138
|
Requires-Dist: mccabe==0.7.0; extra == "flake8"
|
|
137
|
-
Requires-Dist: pyflakes==4.0.3; extra == "flake8"
|
|
139
|
+
Requires-Dist: pyflakes==4.0.3; python_version == "3.10" and extra == "flake8"
|
|
140
|
+
Requires-Dist: pyflakes==4.1.0; python_version >= "3.11" and extra == "flake8"
|
|
138
141
|
Requires-Dist: pycodestyle==2.15.0; extra == "flake8"
|
|
139
142
|
Provides-Extra: mcp
|
|
140
143
|
Requires-Dist: mcp[cli]<3.0.0,>=2.3.0; extra == "mcp"
|
|
@@ -142,9 +145,10 @@ Provides-Extra: mss
|
|
|
142
145
|
Requires-Dist: mss==10.2.0; extra == "mss"
|
|
143
146
|
Provides-Extra: pdfminer
|
|
144
147
|
Requires-Dist: pdfminer.six==20260107; extra == "pdfminer"
|
|
145
|
-
Requires-Dist: cryptography
|
|
146
|
-
Requires-Dist: cffi
|
|
147
|
-
Requires-Dist: pycparser==3.11; extra == "pdfminer"
|
|
148
|
+
Requires-Dist: cryptography~=50.0.2; extra == "pdfminer"
|
|
149
|
+
Requires-Dist: cffi~=2.1.1; extra == "pdfminer"
|
|
150
|
+
Requires-Dist: pycparser==3.11; python_version == "3.10" and extra == "pdfminer"
|
|
151
|
+
Requires-Dist: pycparser~=3.12; python_version >= "3.11" and extra == "pdfminer"
|
|
148
152
|
Provides-Extra: pillow
|
|
149
153
|
Requires-Dist: Pillow>=12.3.0; python_version == "3.10" and extra == "pillow"
|
|
150
154
|
Requires-Dist: Pillow>=13.0.0; python_version >= "3.11" and extra == "pillow"
|
|
@@ -153,14 +157,14 @@ Requires-Dist: pip-system-certs>=4.0; platform_system == "Windows" and extra ==
|
|
|
153
157
|
Provides-Extra: proxy
|
|
154
158
|
Requires-Dist: proxy.py==2.4.3; extra == "proxy"
|
|
155
159
|
Provides-Extra: playwright
|
|
156
|
-
Requires-Dist: playwright>=1.64.
|
|
160
|
+
Requires-Dist: playwright>=1.64.1; extra == "playwright"
|
|
157
161
|
Requires-Dist: greenlet>=3.5.6; extra == "playwright"
|
|
158
162
|
Requires-Dist: pyee>=13.0.1; python_version < "3.12" and extra == "playwright"
|
|
159
163
|
Requires-Dist: pyee>=14.0.0; python_version >= "3.12" and extra == "playwright"
|
|
160
164
|
Provides-Extra: pyautogui
|
|
161
165
|
Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
|
|
162
166
|
Provides-Extra: uv
|
|
163
|
-
Requires-Dist: uv>=0.13.
|
|
167
|
+
Requires-Dist: uv>=0.13.6; extra == "uv"
|
|
164
168
|
Dynamic: author
|
|
165
169
|
Dynamic: author-email
|
|
166
170
|
Dynamic: classifier
|
|
@@ -192,7 +196,7 @@ Dynamic: summary
|
|
|
192
196
|
<p align="center"><b align="center">Includes stealth options for bypassing bot-detection and CAPTCHAs.<br /></b></p>
|
|
193
197
|
|
|
194
198
|
<p align="center">
|
|
195
|
-
<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-
|
|
199
|
+
<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 />
|
|
196
200
|
<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>
|
|
197
201
|
</p>
|
|
198
202
|
|
|
@@ -243,20 +247,30 @@ Dynamic: summary
|
|
|
243
247
|
|
|
244
248
|
--------
|
|
245
249
|
|
|
246
|
-
📝
|
|
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 bypasses BrowserScan, Sannysoft, and Cloudflare bot-detection)</em>
|
|
247
251
|
|
|
248
252
|
```python
|
|
249
253
|
from seleniumbase import sb_cdp
|
|
250
254
|
|
|
251
|
-
sb = sb_cdp.Chrome()
|
|
255
|
+
sb = sb_cdp.Chrome() # Launch a stealth browser
|
|
252
256
|
sb.goto("https://browserscan.net/bot-detection")
|
|
253
257
|
sb.assert_element('strong:contains("Normal")')
|
|
254
258
|
sb.sleep(1)
|
|
259
|
+
|
|
255
260
|
sb.goto("https://bot.sannysoft.com/")
|
|
256
261
|
sb.assert_element(".passed")
|
|
257
262
|
sb.assert_element_not_visible(".failed")
|
|
258
263
|
sb.sleep(1)
|
|
259
|
-
|
|
264
|
+
|
|
265
|
+
sb.goto("https://www.planetminecraft.com/account")
|
|
266
|
+
sb.type('[name="email"]', "Name123")
|
|
267
|
+
sb.type('[name="password"]', "Pass")
|
|
268
|
+
sb.click("input#autologin")
|
|
269
|
+
sb.solve_captcha() # Works on different CAPTCHAs
|
|
270
|
+
sb.assert_element('input[name="login"]')
|
|
271
|
+
sb.assert_element_not_visible("input[disabled]")
|
|
272
|
+
sb.sleep(1)
|
|
273
|
+
sb.quit() # Quit browser before end-of-program
|
|
260
274
|
```
|
|
261
275
|
|
|
262
276
|
<p align="center">
|
|
@@ -269,37 +283,16 @@ sb.quit()
|
|
|
269
283
|
<br /><em>(All Sannysoft bot-detection tests passed successfully)</em>
|
|
270
284
|
</p>
|
|
271
285
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py">another example</a> with <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp"><i>Pure CDP Mode</i></a>):<br />(It performs various browser actions and bypasses a Cloudflare Turnstile)
|
|
275
|
-
|
|
276
|
-
```python
|
|
277
|
-
from seleniumbase import sb_cdp
|
|
278
|
-
|
|
279
|
-
sb = sb_cdp.Chrome(incognito=True)
|
|
280
|
-
sb.goto("https://www.planetminecraft.com/account")
|
|
281
|
-
sb.assert_element('input[name="login"]')
|
|
282
|
-
sb.type('input[name="email"]', "test@example.com")
|
|
283
|
-
sb.type('input[name="password"]', "Fake_Password")
|
|
284
|
-
sb.click("input#autologin") # The checkbox
|
|
285
|
-
if sb.is_element_visible("input[disabled]"):
|
|
286
|
-
sb.solve_captcha() # Enables the input
|
|
287
|
-
sb.assert_element_absent("input[disabled]")
|
|
288
|
-
sb.sleep(1.5)
|
|
289
|
-
sb.quit()
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
```
|
|
293
|
-
python raw_cdp_planetmc.py
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
<p align="left">
|
|
286
|
+
<p align="center">
|
|
297
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>
|
|
298
289
|
</p>
|
|
299
290
|
|
|
291
|
+
--------
|
|
292
|
+
|
|
300
293
|
✅ <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.)
|
|
301
294
|
|
|
302
|
-
ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition
|
|
295
|
+
ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition.<br />(Raises an exception if the condition isn't met in time.)
|
|
303
296
|
|
|
304
297
|
--------
|
|
305
298
|
|
|
@@ -812,7 +805,7 @@ self.assert_no_js_errors() # Verify there are no JS errors.
|
|
|
812
805
|
self.type("input", "dogs\n") # (The "\n" presses ENTER)
|
|
813
806
|
```
|
|
814
807
|
|
|
815
|
-
Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/
|
|
808
|
+
Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/latest/gherkin/" target="_blank" rel="noopener">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
|
|
816
809
|
|
|
817
810
|
```zsh
|
|
818
811
|
pytest coffee_cart_tests.py --rs
|
|
@@ -974,10 +967,15 @@ pytest test_coffee_cart.py --trace
|
|
|
974
967
|
--sjw # (Skip JS Waits for readyState to be "complete" or Angular to load.)
|
|
975
968
|
--wfa # (Wait for AngularJS to be done loading after specific web actions.)
|
|
976
969
|
--pls=PLS # (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
|
|
977
|
-
--headless # (
|
|
978
|
-
--
|
|
979
|
-
--headless2 # (Use Chrome's new headless mode, which supports extensions.)
|
|
970
|
+
--headless # (Use headless mode. Linux uses this mode by default.)
|
|
971
|
+
--chs # (Use Chrome-Headless-Shell, a limited Chrome without stealth.)
|
|
980
972
|
--headed # (Run tests in headed/GUI mode on Linux OS, where not default.)
|
|
973
|
+
--incognito # (Enable Chrome's Incognito mode.)
|
|
974
|
+
--guest # (Enable Chrome's Guest mode.)
|
|
975
|
+
--uc # (Use undetected-chromedriver to evade bot-detection.)
|
|
976
|
+
--uc-cdp-events # (Capture CDP events in UC Mode. NOT related to CDP Mode.)
|
|
977
|
+
--log-cdp # ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
|
|
978
|
+
--remote-debug # (Sync to Chrome Remote Debugger chrome://inspect/#devices)
|
|
981
979
|
--xvfb # (Run tests using the Xvfb virtual display server on Linux OS.)
|
|
982
980
|
--xvfb-metrics=STRING # (Set Xvfb display size on Linux: "Width,Height".)
|
|
983
981
|
--locale=LOCALE_CODE # (Set the Language Locale Code for the web browser.)
|
|
@@ -1011,17 +1009,11 @@ pytest test_coffee_cart.py --trace
|
|
|
1011
1009
|
--disable-ws # (Disable Web Security on Chromium-based browsers.)
|
|
1012
1010
|
--enable-ws # (Enable Web Security on Chromium-based browsers.)
|
|
1013
1011
|
--enable-sync # (Enable "Chrome Sync" on websites.)
|
|
1014
|
-
--uc | --undetected # (Use undetected-chromedriver to evade bot-detection.)
|
|
1015
|
-
--uc-cdp-events # (Capture CDP events when running in "--undetected" mode.)
|
|
1016
|
-
--log-cdp # ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
|
|
1017
|
-
--remote-debug # (Sync to Chrome Remote Debugger chrome://inspect/#devices)
|
|
1018
1012
|
--ftrace | --final-trace # (Debug Mode after each test. Don't use with CI!)
|
|
1019
1013
|
--dashboard # (Enable the SeleniumBase Dashboard. Saved at: dashboard.html)
|
|
1020
1014
|
--dash-title=STRING # (Set the title shown for the generated dashboard.)
|
|
1021
1015
|
--enable-3d-apis # (Enables WebGL and 3D APIs.)
|
|
1022
1016
|
--swiftshader # (Chrome "--use-gl=angle" / "--use-angle=swiftshader-webgl")
|
|
1023
|
-
--incognito # (Enable Chrome's Incognito mode.)
|
|
1024
|
-
--guest # (Enable Chrome's Guest mode.)
|
|
1025
1017
|
--dark # (Enable Chrome's Dark mode.)
|
|
1026
1018
|
--devtools # (Open Chrome's DevTools when the browser opens.)
|
|
1027
1019
|
--rs | --reuse-session # (Reuse browser session for all tests.)
|
|
@@ -1590,21 +1582,13 @@ self.activate_jquery()
|
|
|
1590
1582
|
|
|
1591
1583
|
```python
|
|
1592
1584
|
self.execute_script("jQuery, window.scrollTo(0, 600)") # Scrolling the page
|
|
1593
|
-
|
|
1594
1585
|
self.execute_script("jQuery('#annoying-widget').hide()") # Hiding elements on a page
|
|
1595
|
-
|
|
1596
1586
|
self.execute_script("jQuery('#hidden-widget').show(0)") # Showing hidden elements on a page
|
|
1597
|
-
|
|
1598
1587
|
self.execute_script("jQuery('#annoying-button a').remove()") # Removing elements on a page
|
|
1599
|
-
|
|
1600
1588
|
self.execute_script("jQuery('%s').mouseover()" % (mouse_over_item)) # Mouse-over elements on a page
|
|
1601
|
-
|
|
1602
1589
|
self.execute_script("jQuery('input#the_id').val('my_text')") # Fast text input on a page
|
|
1603
|
-
|
|
1604
1590
|
self.execute_script("jQuery('div#dropdown a.link').click()") # Click elements on a page
|
|
1605
|
-
|
|
1606
1591
|
self.execute_script("return jQuery('div#amazing')[0].text") # Returns the css "text" of the element given
|
|
1607
|
-
|
|
1608
1592
|
self.execute_script("return jQuery('textarea')[2].value") # Returns the css "value" of the 3rd textarea element on the page
|
|
1609
1593
|
```
|
|
1610
1594
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<p align="center"><b align="center">Includes stealth options for bypassing bot-detection and CAPTCHAs.<br /></b></p>
|
|
16
16
|
|
|
17
17
|
<p align="center">
|
|
18
|
-
<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-
|
|
18
|
+
<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
19
|
<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
20
|
</p>
|
|
21
21
|
|
|
@@ -66,20 +66,30 @@
|
|
|
66
66
|
|
|
67
67
|
--------
|
|
68
68
|
|
|
69
|
-
📝
|
|
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 bypasses BrowserScan, Sannysoft, and Cloudflare bot-detection)</em>
|
|
70
70
|
|
|
71
71
|
```python
|
|
72
72
|
from seleniumbase import sb_cdp
|
|
73
73
|
|
|
74
|
-
sb = sb_cdp.Chrome()
|
|
74
|
+
sb = sb_cdp.Chrome() # Launch a stealth browser
|
|
75
75
|
sb.goto("https://browserscan.net/bot-detection")
|
|
76
76
|
sb.assert_element('strong:contains("Normal")')
|
|
77
77
|
sb.sleep(1)
|
|
78
|
+
|
|
78
79
|
sb.goto("https://bot.sannysoft.com/")
|
|
79
80
|
sb.assert_element(".passed")
|
|
80
81
|
sb.assert_element_not_visible(".failed")
|
|
81
82
|
sb.sleep(1)
|
|
82
|
-
|
|
83
|
+
|
|
84
|
+
sb.goto("https://www.planetminecraft.com/account")
|
|
85
|
+
sb.type('[name="email"]', "Name123")
|
|
86
|
+
sb.type('[name="password"]', "Pass")
|
|
87
|
+
sb.click("input#autologin")
|
|
88
|
+
sb.solve_captcha() # Works on different CAPTCHAs
|
|
89
|
+
sb.assert_element('input[name="login"]')
|
|
90
|
+
sb.assert_element_not_visible("input[disabled]")
|
|
91
|
+
sb.sleep(1)
|
|
92
|
+
sb.quit() # Quit browser before end-of-program
|
|
83
93
|
```
|
|
84
94
|
|
|
85
95
|
<p align="center">
|
|
@@ -92,37 +102,16 @@ sb.quit()
|
|
|
92
102
|
<br /><em>(All Sannysoft bot-detection tests passed successfully)</em>
|
|
93
103
|
</p>
|
|
94
104
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py">another example</a> with <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp"><i>Pure CDP Mode</i></a>):<br />(It performs various browser actions and bypasses a Cloudflare Turnstile)
|
|
98
|
-
|
|
99
|
-
```python
|
|
100
|
-
from seleniumbase import sb_cdp
|
|
101
|
-
|
|
102
|
-
sb = sb_cdp.Chrome(incognito=True)
|
|
103
|
-
sb.goto("https://www.planetminecraft.com/account")
|
|
104
|
-
sb.assert_element('input[name="login"]')
|
|
105
|
-
sb.type('input[name="email"]', "test@example.com")
|
|
106
|
-
sb.type('input[name="password"]', "Fake_Password")
|
|
107
|
-
sb.click("input#autologin") # The checkbox
|
|
108
|
-
if sb.is_element_visible("input[disabled]"):
|
|
109
|
-
sb.solve_captcha() # Enables the input
|
|
110
|
-
sb.assert_element_absent("input[disabled]")
|
|
111
|
-
sb.sleep(1.5)
|
|
112
|
-
sb.quit()
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
python raw_cdp_planetmc.py
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
<p align="left">
|
|
105
|
+
<p align="center">
|
|
120
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>
|
|
121
108
|
</p>
|
|
122
109
|
|
|
110
|
+
--------
|
|
111
|
+
|
|
123
112
|
✅ <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.)
|
|
124
113
|
|
|
125
|
-
ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition
|
|
114
|
+
ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition.<br />(Raises an exception if the condition isn't met in time.)
|
|
126
115
|
|
|
127
116
|
--------
|
|
128
117
|
|
|
@@ -635,7 +624,7 @@ self.assert_no_js_errors() # Verify there are no JS errors.
|
|
|
635
624
|
self.type("input", "dogs\n") # (The "\n" presses ENTER)
|
|
636
625
|
```
|
|
637
626
|
|
|
638
|
-
Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/
|
|
627
|
+
Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/latest/gherkin/" target="_blank" rel="noopener">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
|
|
639
628
|
|
|
640
629
|
```zsh
|
|
641
630
|
pytest coffee_cart_tests.py --rs
|
|
@@ -797,10 +786,15 @@ pytest test_coffee_cart.py --trace
|
|
|
797
786
|
--sjw # (Skip JS Waits for readyState to be "complete" or Angular to load.)
|
|
798
787
|
--wfa # (Wait for AngularJS to be done loading after specific web actions.)
|
|
799
788
|
--pls=PLS # (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
|
|
800
|
-
--headless # (
|
|
801
|
-
--
|
|
802
|
-
--headless2 # (Use Chrome's new headless mode, which supports extensions.)
|
|
789
|
+
--headless # (Use headless mode. Linux uses this mode by default.)
|
|
790
|
+
--chs # (Use Chrome-Headless-Shell, a limited Chrome without stealth.)
|
|
803
791
|
--headed # (Run tests in headed/GUI mode on Linux OS, where not default.)
|
|
792
|
+
--incognito # (Enable Chrome's Incognito mode.)
|
|
793
|
+
--guest # (Enable Chrome's Guest mode.)
|
|
794
|
+
--uc # (Use undetected-chromedriver to evade bot-detection.)
|
|
795
|
+
--uc-cdp-events # (Capture CDP events in UC Mode. NOT related to CDP Mode.)
|
|
796
|
+
--log-cdp # ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
|
|
797
|
+
--remote-debug # (Sync to Chrome Remote Debugger chrome://inspect/#devices)
|
|
804
798
|
--xvfb # (Run tests using the Xvfb virtual display server on Linux OS.)
|
|
805
799
|
--xvfb-metrics=STRING # (Set Xvfb display size on Linux: "Width,Height".)
|
|
806
800
|
--locale=LOCALE_CODE # (Set the Language Locale Code for the web browser.)
|
|
@@ -834,17 +828,11 @@ pytest test_coffee_cart.py --trace
|
|
|
834
828
|
--disable-ws # (Disable Web Security on Chromium-based browsers.)
|
|
835
829
|
--enable-ws # (Enable Web Security on Chromium-based browsers.)
|
|
836
830
|
--enable-sync # (Enable "Chrome Sync" on websites.)
|
|
837
|
-
--uc | --undetected # (Use undetected-chromedriver to evade bot-detection.)
|
|
838
|
-
--uc-cdp-events # (Capture CDP events when running in "--undetected" mode.)
|
|
839
|
-
--log-cdp # ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
|
|
840
|
-
--remote-debug # (Sync to Chrome Remote Debugger chrome://inspect/#devices)
|
|
841
831
|
--ftrace | --final-trace # (Debug Mode after each test. Don't use with CI!)
|
|
842
832
|
--dashboard # (Enable the SeleniumBase Dashboard. Saved at: dashboard.html)
|
|
843
833
|
--dash-title=STRING # (Set the title shown for the generated dashboard.)
|
|
844
834
|
--enable-3d-apis # (Enables WebGL and 3D APIs.)
|
|
845
835
|
--swiftshader # (Chrome "--use-gl=angle" / "--use-angle=swiftshader-webgl")
|
|
846
|
-
--incognito # (Enable Chrome's Incognito mode.)
|
|
847
|
-
--guest # (Enable Chrome's Guest mode.)
|
|
848
836
|
--dark # (Enable Chrome's Dark mode.)
|
|
849
837
|
--devtools # (Open Chrome's DevTools when the browser opens.)
|
|
850
838
|
--rs | --reuse-session # (Reuse browser session for all tests.)
|
|
@@ -1413,21 +1401,13 @@ self.activate_jquery()
|
|
|
1413
1401
|
|
|
1414
1402
|
```python
|
|
1415
1403
|
self.execute_script("jQuery, window.scrollTo(0, 600)") # Scrolling the page
|
|
1416
|
-
|
|
1417
1404
|
self.execute_script("jQuery('#annoying-widget').hide()") # Hiding elements on a page
|
|
1418
|
-
|
|
1419
1405
|
self.execute_script("jQuery('#hidden-widget').show(0)") # Showing hidden elements on a page
|
|
1420
|
-
|
|
1421
1406
|
self.execute_script("jQuery('#annoying-button a').remove()") # Removing elements on a page
|
|
1422
|
-
|
|
1423
1407
|
self.execute_script("jQuery('%s').mouseover()" % (mouse_over_item)) # Mouse-over elements on a page
|
|
1424
|
-
|
|
1425
1408
|
self.execute_script("jQuery('input#the_id').val('my_text')") # Fast text input on a page
|
|
1426
|
-
|
|
1427
1409
|
self.execute_script("jQuery('div#dropdown a.link').click()") # Click elements on a page
|
|
1428
|
-
|
|
1429
1410
|
self.execute_script("return jQuery('div#amazing')[0].text") # Returns the css "text" of the element given
|
|
1430
|
-
|
|
1431
1411
|
self.execute_script("return jQuery('textarea')[2].value") # Returns the css "value" of the 3rd textarea element on the page
|
|
1432
1412
|
```
|
|
1433
1413
|
|
|
@@ -3,7 +3,7 @@ packaging>=26.3
|
|
|
3
3
|
setuptools>=84.2.1
|
|
4
4
|
wheel>=0.48.0
|
|
5
5
|
attrs>=26.1.0
|
|
6
|
-
certifi>=2026.10.
|
|
6
|
+
certifi>=2026.10.23
|
|
7
7
|
exceptiongroup>=1.3.1
|
|
8
8
|
websockets~=16.1.1;python_version=="3.10"
|
|
9
9
|
websockets>=17.3;python_version>="3.11"
|
|
@@ -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~=3.0.
|
|
59
|
+
soupsieve~=3.0.4;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"
|
|
@@ -68,9 +68,12 @@ rich>=15.0.0,<16
|
|
|
68
68
|
# --- Testing Requirements --- #
|
|
69
69
|
# ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
|
|
70
70
|
|
|
71
|
-
coverage>=7.16.2
|
|
71
|
+
coverage>=7.16.2;python_version=="3.10"
|
|
72
|
+
coverage>=7.17.0;python_version>="3.11"
|
|
72
73
|
pytest-cov>=7.1.0
|
|
73
|
-
flake8==7.4.1
|
|
74
|
+
flake8==7.4.1;python_version=="3.10"
|
|
75
|
+
flake8==7.5.0;python_version>="3.11"
|
|
74
76
|
mccabe==0.7.0
|
|
75
|
-
pyflakes==4.0.3
|
|
77
|
+
pyflakes==4.0.3;python_version=="3.10"
|
|
78
|
+
pyflakes==4.1.0;python_version>="3.11"
|
|
76
79
|
pycodestyle==2.15.0
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.56.
|
|
2
|
+
__version__ = "4.56.5"
|
|
@@ -1600,7 +1600,7 @@ class CDPMethods():
|
|
|
1600
1600
|
pre_tab_url = tab_url.split("/page/")[0] + "/page/"
|
|
1601
1601
|
new_tab_url = pre_tab_url + target_id
|
|
1602
1602
|
new_tab = cdp_tab.Tab(new_tab_url, found_target, driver)
|
|
1603
|
-
driver.targets.append(new_tab)
|
|
1603
|
+
# driver.targets.append(new_tab) # (Caused Issue #4533)
|
|
1604
1604
|
driver.tabs.append(new_tab)
|
|
1605
1605
|
if switch_to:
|
|
1606
1606
|
self.switch_to_newest_tab()
|
|
@@ -1268,7 +1268,8 @@ class Element:
|
|
|
1268
1268
|
await self.tab.send(cdp.dom.disable())
|
|
1269
1269
|
await self.tab.send(cdp.overlay.disable())
|
|
1270
1270
|
return
|
|
1271
|
-
|
|
1271
|
+
with suppress(Exception):
|
|
1272
|
+
await self.tab.send(cdp.dom.enable())
|
|
1272
1273
|
await self.tab.send(cdp.overlay.enable())
|
|
1273
1274
|
conf = cdp.overlay.HighlightConfig(
|
|
1274
1275
|
show_info=True, show_extension_lines=True, show_styles=True
|