seleniumbase 4.55.1__tar.gz → 4.55.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {seleniumbase-4.55.1/seleniumbase.egg-info → seleniumbase-4.55.2}/PKG-INFO +60 -83
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/README.md +57 -80
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/requirements.txt +2 -2
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.55.1 → seleniumbase-4.55.2/seleniumbase.egg-info}/PKG-INFO +60 -83
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase.egg-info/requires.txt +2 -2
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/setup.py +2 -2
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/.gitignore +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/LICENSE +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/MANIFEST.in +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/install.sh +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/mcp_servers/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/mcp_servers/server.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/pyproject.toml +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/pytest.ini +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/sbase/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/sbase/__main__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/sbase/steps.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/browser_launcher.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/sb_cdp.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/base_case.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/setup.cfg +0 -0
- {seleniumbase-4.55.1 → seleniumbase-4.55.2}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.55.
|
|
3
|
+
Version: 4.55.2
|
|
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
|
|
@@ -100,7 +100,7 @@ Requires-Dist: selenium==4.50.0
|
|
|
100
100
|
Requires-Dist: cssselect<2,>=1.5.0
|
|
101
101
|
Requires-Dist: sortedcontainers==2.4.0
|
|
102
102
|
Requires-Dist: execnet==2.1.2
|
|
103
|
-
Requires-Dist: iniconfig
|
|
103
|
+
Requires-Dist: iniconfig~=2.3.1
|
|
104
104
|
Requires-Dist: pluggy==1.6.0
|
|
105
105
|
Requires-Dist: pytest==8.4.2; python_version < "3.11"
|
|
106
106
|
Requires-Dist: pytest==9.1.1; python_version >= "3.11"
|
|
@@ -130,7 +130,7 @@ Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
|
|
|
130
130
|
Provides-Extra: flake8
|
|
131
131
|
Requires-Dist: flake8==7.4.1; extra == "flake8"
|
|
132
132
|
Requires-Dist: mccabe==0.7.0; extra == "flake8"
|
|
133
|
-
Requires-Dist: pyflakes==4.0.
|
|
133
|
+
Requires-Dist: pyflakes==4.0.3; extra == "flake8"
|
|
134
134
|
Requires-Dist: pycodestyle==2.15.0; extra == "flake8"
|
|
135
135
|
Provides-Extra: mcp
|
|
136
136
|
Requires-Dist: mcp[cli]<3.0.0,>=2.3.0; extra == "mcp"
|
|
@@ -173,15 +173,15 @@ Dynamic: summary
|
|
|
173
173
|
<!-- mcp-name: io.github.seleniumbase/seleniumbase -->
|
|
174
174
|
|
|
175
175
|
<meta property="og:site_name" content="SeleniumBase">
|
|
176
|
-
<meta property="og:title" content="SeleniumBase:
|
|
177
|
-
<meta property="og:description" content="
|
|
178
|
-
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots
|
|
176
|
+
<meta property="og:title" content="SeleniumBase: Python Web Automation and E2E Testing. Includes stealth options!" />
|
|
177
|
+
<meta property="og:description" content="Fast, easy, and reliable Web/UI testing with Python. Includes stealth options!" />
|
|
178
|
+
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots">
|
|
179
179
|
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
|
|
180
|
-
<link rel="icon" href="https://seleniumbase.github.io/img/
|
|
180
|
+
<link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
|
|
181
181
|
|
|
182
|
-
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/
|
|
182
|
+
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/nice_logo_8t.png" alt="SeleniumBase" width="400" /></a></p>
|
|
183
183
|
|
|
184
|
-
<p align="center" class="hero__title"><b>
|
|
184
|
+
<p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Testing / Scraping / Stealth</b></p>
|
|
185
185
|
|
|
186
186
|
<p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" height="20" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/Tests/badge.svg" alt="SeleniumBase GitHub Actions" height="20" /></a> <a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://img.shields.io/badge/docs-📺-F12345.svg?style=flat&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a></p>
|
|
187
187
|
|
|
@@ -221,80 +221,45 @@ Dynamic: summary
|
|
|
221
221
|
<br />
|
|
222
222
|
</p>
|
|
223
223
|
|
|
224
|
-
<ul>
|
|
225
|
-
<li><b>SeleniumBase bypasses bot-detection with</b> 🥷 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / 🐙 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a><b>.</b></li>
|
|
226
|
-
<li>🎭 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><b><span translate="no">Stealthy Playwright Mode</span></b></a> <b>extends CDP Mode's stealth to Playwright.</b></li>
|
|
227
|
-
</ul>
|
|
228
|
-
<ul>
|
|
229
|
-
</ul>
|
|
230
|
-
|
|
231
224
|
--------
|
|
232
225
|
|
|
233
|
-
<b
|
|
234
|
-
|
|
235
|
-
```python
|
|
236
|
-
from seleniumbase import sb_cdp
|
|
237
|
-
|
|
238
|
-
sb = sb_cdp.Chrome()
|
|
239
|
-
sb.goto("www.planetminecraft.com/account/sign_in")
|
|
240
|
-
sb.solve_captcha()
|
|
241
|
-
# "LOG IN" is enabled when the CAPTCHA is bypassed
|
|
242
|
-
sb.wait_for_element_absent("input[disabled]")
|
|
243
|
-
sb.sleep(2)
|
|
244
|
-
sb.quit()
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
<p align="center">
|
|
248
|
-
<img src="https://seleniumbase.github.io/other/pmc_captcha.png" width="570" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
|
|
249
|
-
<br /><em>(Cloudflare Turnstile bypassed successfully)</em>
|
|
250
|
-
</p>
|
|
226
|
+
🥷 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> can bypass bot-detection, handle CAPTCHAs, and call methods from the <a href="https://chromedevtools.github.io/devtools-protocol/" translate="no">Chrome Devtools Protocol</a>. CDP Mode includes <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><b><span translate="no">Stealthy Playwright Mode</span></b></a>, which makes Playwright stealthy.
|
|
251
227
|
|
|
252
|
-
|
|
228
|
+
🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
|
|
253
229
|
|
|
254
|
-
|
|
230
|
+
🐙 CDP Mode (stealth) examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
255
231
|
|
|
256
|
-
|
|
232
|
+
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
257
233
|
|
|
258
|
-
|
|
259
|
-
from seleniumbase import SB
|
|
260
|
-
|
|
261
|
-
with SB(uc=True, test=True, locale="en") as sb:
|
|
262
|
-
sb.activate_cdp_mode()
|
|
263
|
-
sb.goto("https://gitlab.com/users/sign_in")
|
|
264
|
-
sb.sleep(2)
|
|
265
|
-
sb.solve_captcha()
|
|
266
|
-
sb.highlight('h1:contains("GitLab")')
|
|
267
|
-
sb.highlight('button:contains("Sign in")')
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
<p align="center">
|
|
271
|
-
<img src="https://seleniumbase.github.io/other/gitlab_bypass.png" alt="SeleniumBase" width="350" style="max-width: 100% !important; height: auto !important;"/>
|
|
272
|
-
<br /><em>(Successfully bypassed bot-detection on a Cloudflare challenge page)</em>
|
|
273
|
-
</p>
|
|
234
|
+
📚 Examples that have `test_` or `_test` in the filename are specifically designed to run with `pytest` / `pynose`. Other examples run directly with raw `python` (those files generally start with `raw_` to avoid confusion).
|
|
274
235
|
|
|
275
236
|
--------
|
|
276
237
|
|
|
277
|
-
<
|
|
238
|
+
<b>📝 Here's a Python <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py" target="_blank">example</a> that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp">Pure CDP Mode</a> (<code>sb_cdp</code>):</b><br />(It navigates to Planet Minecraft where it bypasses the CAPTCHA)
|
|
278
239
|
|
|
279
240
|
```python
|
|
280
241
|
from seleniumbase import sb_cdp
|
|
281
242
|
|
|
282
|
-
sb = sb_cdp.Chrome()
|
|
283
|
-
sb.goto("https://
|
|
284
|
-
sb.
|
|
285
|
-
sb.type('[name="
|
|
286
|
-
sb.
|
|
287
|
-
sb.click(
|
|
288
|
-
sb.
|
|
289
|
-
sb.
|
|
290
|
-
sb.
|
|
291
|
-
|
|
292
|
-
sb.save_as_pdf("seleniumbase.pdf", folder="./downloaded_files/")
|
|
293
|
-
print("* PDF saved to ./downloaded_files/seleniumbase.pdf")
|
|
243
|
+
sb = sb_cdp.Chrome(incognito=True)
|
|
244
|
+
sb.goto("https://www.planetminecraft.com/account")
|
|
245
|
+
sb.assert_element('input[name="login"]')
|
|
246
|
+
sb.type('input[name="email"]', "test@example.com")
|
|
247
|
+
sb.type('input[name="password"]', "Fake_Password")
|
|
248
|
+
sb.click("input#autologin") # The checkbox
|
|
249
|
+
if sb.is_element_visible("input[disabled]"):
|
|
250
|
+
sb.solve_captcha() # Enables the input
|
|
251
|
+
sb.assert_element_absent("input[disabled]")
|
|
252
|
+
sb.sleep(1.5)
|
|
294
253
|
sb.quit()
|
|
295
254
|
```
|
|
296
255
|
|
|
297
|
-
|
|
256
|
+
> `python raw_cdp_planetmc.py`
|
|
257
|
+
|
|
258
|
+
<p align="left">
|
|
259
|
+
<img src="https://seleniumbase.github.io/other/pmc_captcha_2.png" width="530" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
|
|
260
|
+
</p>
|
|
261
|
+
|
|
262
|
+
✅ <b><code>sb.solve_captcha()</code></b> handles CAPTCHAs that aren't bypassed automatically.<br />(If called when there's no CAPTCHA on the page, then nothing happens / no-op.)
|
|
298
263
|
|
|
299
264
|
--------
|
|
300
265
|
|
|
@@ -303,38 +268,46 @@ sb.quit()
|
|
|
303
268
|
```python
|
|
304
269
|
from seleniumbase import sb_cdp
|
|
305
270
|
|
|
306
|
-
sb = sb_cdp.Chrome()
|
|
271
|
+
sb = sb_cdp.Chrome(fast=True)
|
|
307
272
|
sb.goto("https://news.ycombinator.com/submitted?id=seleniumbase")
|
|
308
273
|
elements = sb.find_elements("span.titleline > a")
|
|
309
274
|
for element in elements:
|
|
310
|
-
print("*
|
|
275
|
+
print("* " + element.text)
|
|
311
276
|
```
|
|
312
277
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
<
|
|
278
|
+
> `python raw_cdp_yc_news.py`
|
|
279
|
+
|
|
280
|
+
<p align="left">
|
|
281
|
+
<img src="https://seleniumbase.github.io/other/yc_news_results.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
|
|
316
282
|
</p>
|
|
317
283
|
|
|
318
284
|
--------
|
|
319
285
|
|
|
320
|
-
|
|
286
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This example</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</b></p>
|
|
321
287
|
|
|
322
|
-
|
|
288
|
+
```python
|
|
289
|
+
from seleniumbase import SB
|
|
323
290
|
|
|
324
|
-
|
|
291
|
+
with SB(uc=True, test=True, locale="en") as sb:
|
|
292
|
+
sb.activate_cdp_mode()
|
|
293
|
+
sb.goto("https://gitlab.com/users/sign_in")
|
|
294
|
+
sb.sleep(2)
|
|
295
|
+
sb.solve_captcha()
|
|
296
|
+
sb.highlight('h1:contains("GitLab")')
|
|
297
|
+
sb.highlight('button:contains("Sign in")')
|
|
298
|
+
```
|
|
325
299
|
|
|
326
|
-
|
|
300
|
+
> `python raw_gitlab.py`
|
|
327
301
|
|
|
328
|
-
<p align="
|
|
329
|
-
<img src="https://seleniumbase.github.io/other/
|
|
330
|
-
<br /><em>(For maximum stealth, use <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">CDP Mode</a>, which includes <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">Stealthy Playwright Mode</a>.)</em>
|
|
302
|
+
<p align="left">
|
|
303
|
+
<img src="https://seleniumbase.github.io/other/gitlab_bypass_2.png" alt="SeleniumBase" width="420" style="max-width: 100% !important; height: auto !important;"/>
|
|
331
304
|
</p>
|
|
332
305
|
|
|
333
306
|
--------
|
|
334
307
|
|
|
335
308
|
<h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
|
|
336
309
|
|
|
337
|
-
<p>💡 You can set
|
|
310
|
+
<p>💡 You can set which Chromium browser to use via command-line parameters:</p>
|
|
338
311
|
|
|
339
312
|
```zsh
|
|
340
313
|
python SCRIPT.py --chromium # Use the unbranded Chromium browser
|
|
@@ -353,11 +326,13 @@ sb = sb_cdp.Chrome(use_chromium=True)
|
|
|
353
326
|
|
|
354
327
|
--------
|
|
355
328
|
|
|
356
|
-
<h3
|
|
329
|
+
<h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
|
|
357
330
|
|
|
358
|
-
|
|
331
|
+
<img src="https://seleniumbase.github.io/other/sb_architecture.png" width="540" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
|
|
359
332
|
|
|
333
|
+
--------
|
|
360
334
|
|
|
335
|
+
<h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
|
|
361
336
|
|
|
362
337
|
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank">This example</a> tests an e-commerce site with <code>pytest</code>:</b></p>
|
|
363
338
|
|
|
@@ -387,6 +362,8 @@ class MyTestClass(BaseCase):
|
|
|
387
362
|
|
|
388
363
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="500" style="max-width: 100% !important; height: auto !important;" /></a>
|
|
389
364
|
|
|
365
|
+
🥷 For stealth with `pytest`, add `--uc` as a command-line option.
|
|
366
|
+
|
|
390
367
|
--------
|
|
391
368
|
|
|
392
369
|
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This example</a> tests another e-commerce site with <code>pytest</code>:</b></p>
|
|
@@ -413,7 +390,7 @@ pytest test_demo_site.py
|
|
|
413
390
|
|
|
414
391
|
> Easy to type, click, select, toggle, drag & drop, and more.
|
|
415
392
|
|
|
416
|
-
|
|
393
|
+
📚 For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.
|
|
417
394
|
|
|
418
395
|
--------
|
|
419
396
|
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
<!-- mcp-name: io.github.seleniumbase/seleniumbase -->
|
|
3
3
|
|
|
4
4
|
<meta property="og:site_name" content="SeleniumBase">
|
|
5
|
-
<meta property="og:title" content="SeleniumBase:
|
|
6
|
-
<meta property="og:description" content="
|
|
7
|
-
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots
|
|
5
|
+
<meta property="og:title" content="SeleniumBase: Python Web Automation and E2E Testing. Includes stealth options!" />
|
|
6
|
+
<meta property="og:description" content="Fast, easy, and reliable Web/UI testing with Python. Includes stealth options!" />
|
|
7
|
+
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots">
|
|
8
8
|
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
|
|
9
|
-
<link rel="icon" href="https://seleniumbase.github.io/img/
|
|
9
|
+
<link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
|
|
10
10
|
|
|
11
|
-
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/
|
|
11
|
+
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/nice_logo_8t.png" alt="SeleniumBase" width="400" /></a></p>
|
|
12
12
|
|
|
13
|
-
<p align="center" class="hero__title"><b>
|
|
13
|
+
<p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Testing / Scraping / Stealth</b></p>
|
|
14
14
|
|
|
15
15
|
<p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" height="20" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/Tests/badge.svg" alt="SeleniumBase GitHub Actions" height="20" /></a> <a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://img.shields.io/badge/docs-📺-F12345.svg?style=flat&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a></p>
|
|
16
16
|
|
|
@@ -50,80 +50,45 @@
|
|
|
50
50
|
<br />
|
|
51
51
|
</p>
|
|
52
52
|
|
|
53
|
-
<ul>
|
|
54
|
-
<li><b>SeleniumBase bypasses bot-detection with</b> 🥷 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / 🐙 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a><b>.</b></li>
|
|
55
|
-
<li>🎭 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><b><span translate="no">Stealthy Playwright Mode</span></b></a> <b>extends CDP Mode's stealth to Playwright.</b></li>
|
|
56
|
-
</ul>
|
|
57
|
-
<ul>
|
|
58
|
-
</ul>
|
|
59
|
-
|
|
60
53
|
--------
|
|
61
54
|
|
|
62
|
-
<b
|
|
63
|
-
|
|
64
|
-
```python
|
|
65
|
-
from seleniumbase import sb_cdp
|
|
66
|
-
|
|
67
|
-
sb = sb_cdp.Chrome()
|
|
68
|
-
sb.goto("www.planetminecraft.com/account/sign_in")
|
|
69
|
-
sb.solve_captcha()
|
|
70
|
-
# "LOG IN" is enabled when the CAPTCHA is bypassed
|
|
71
|
-
sb.wait_for_element_absent("input[disabled]")
|
|
72
|
-
sb.sleep(2)
|
|
73
|
-
sb.quit()
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
<p align="center">
|
|
77
|
-
<img src="https://seleniumbase.github.io/other/pmc_captcha.png" width="570" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
|
|
78
|
-
<br /><em>(Cloudflare Turnstile bypassed successfully)</em>
|
|
79
|
-
</p>
|
|
55
|
+
🥷 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> can bypass bot-detection, handle CAPTCHAs, and call methods from the <a href="https://chromedevtools.github.io/devtools-protocol/" translate="no">Chrome Devtools Protocol</a>. CDP Mode includes <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><b><span translate="no">Stealthy Playwright Mode</span></b></a>, which makes Playwright stealthy.
|
|
80
56
|
|
|
81
|
-
|
|
57
|
+
🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
|
|
82
58
|
|
|
83
|
-
|
|
59
|
+
🐙 CDP Mode (stealth) examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
|
|
84
60
|
|
|
85
|
-
|
|
61
|
+
🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
|
|
86
62
|
|
|
87
|
-
|
|
88
|
-
from seleniumbase import SB
|
|
89
|
-
|
|
90
|
-
with SB(uc=True, test=True, locale="en") as sb:
|
|
91
|
-
sb.activate_cdp_mode()
|
|
92
|
-
sb.goto("https://gitlab.com/users/sign_in")
|
|
93
|
-
sb.sleep(2)
|
|
94
|
-
sb.solve_captcha()
|
|
95
|
-
sb.highlight('h1:contains("GitLab")')
|
|
96
|
-
sb.highlight('button:contains("Sign in")')
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
<p align="center">
|
|
100
|
-
<img src="https://seleniumbase.github.io/other/gitlab_bypass.png" alt="SeleniumBase" width="350" style="max-width: 100% !important; height: auto !important;"/>
|
|
101
|
-
<br /><em>(Successfully bypassed bot-detection on a Cloudflare challenge page)</em>
|
|
102
|
-
</p>
|
|
63
|
+
📚 Examples that have `test_` or `_test` in the filename are specifically designed to run with `pytest` / `pynose`. Other examples run directly with raw `python` (those files generally start with `raw_` to avoid confusion).
|
|
103
64
|
|
|
104
65
|
--------
|
|
105
66
|
|
|
106
|
-
<
|
|
67
|
+
<b>📝 Here's a Python <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py" target="_blank">example</a> that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp">Pure CDP Mode</a> (<code>sb_cdp</code>):</b><br />(It navigates to Planet Minecraft where it bypasses the CAPTCHA)
|
|
107
68
|
|
|
108
69
|
```python
|
|
109
70
|
from seleniumbase import sb_cdp
|
|
110
71
|
|
|
111
|
-
sb = sb_cdp.Chrome()
|
|
112
|
-
sb.goto("https://
|
|
113
|
-
sb.
|
|
114
|
-
sb.type('[name="
|
|
115
|
-
sb.
|
|
116
|
-
sb.click(
|
|
117
|
-
sb.
|
|
118
|
-
sb.
|
|
119
|
-
sb.
|
|
120
|
-
|
|
121
|
-
sb.save_as_pdf("seleniumbase.pdf", folder="./downloaded_files/")
|
|
122
|
-
print("* PDF saved to ./downloaded_files/seleniumbase.pdf")
|
|
72
|
+
sb = sb_cdp.Chrome(incognito=True)
|
|
73
|
+
sb.goto("https://www.planetminecraft.com/account")
|
|
74
|
+
sb.assert_element('input[name="login"]')
|
|
75
|
+
sb.type('input[name="email"]', "test@example.com")
|
|
76
|
+
sb.type('input[name="password"]', "Fake_Password")
|
|
77
|
+
sb.click("input#autologin") # The checkbox
|
|
78
|
+
if sb.is_element_visible("input[disabled]"):
|
|
79
|
+
sb.solve_captcha() # Enables the input
|
|
80
|
+
sb.assert_element_absent("input[disabled]")
|
|
81
|
+
sb.sleep(1.5)
|
|
123
82
|
sb.quit()
|
|
124
83
|
```
|
|
125
84
|
|
|
126
|
-
|
|
85
|
+
> `python raw_cdp_planetmc.py`
|
|
86
|
+
|
|
87
|
+
<p align="left">
|
|
88
|
+
<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" />
|
|
89
|
+
</p>
|
|
90
|
+
|
|
91
|
+
✅ <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.)
|
|
127
92
|
|
|
128
93
|
--------
|
|
129
94
|
|
|
@@ -132,38 +97,46 @@ sb.quit()
|
|
|
132
97
|
```python
|
|
133
98
|
from seleniumbase import sb_cdp
|
|
134
99
|
|
|
135
|
-
sb = sb_cdp.Chrome()
|
|
100
|
+
sb = sb_cdp.Chrome(fast=True)
|
|
136
101
|
sb.goto("https://news.ycombinator.com/submitted?id=seleniumbase")
|
|
137
102
|
elements = sb.find_elements("span.titleline > a")
|
|
138
103
|
for element in elements:
|
|
139
|
-
print("*
|
|
104
|
+
print("* " + element.text)
|
|
140
105
|
```
|
|
141
106
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
<
|
|
107
|
+
> `python raw_cdp_yc_news.py`
|
|
108
|
+
|
|
109
|
+
<p align="left">
|
|
110
|
+
<img src="https://seleniumbase.github.io/other/yc_news_results.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
|
|
145
111
|
</p>
|
|
146
112
|
|
|
147
113
|
--------
|
|
148
114
|
|
|
149
|
-
|
|
115
|
+
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This example</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</b></p>
|
|
150
116
|
|
|
151
|
-
|
|
117
|
+
```python
|
|
118
|
+
from seleniumbase import SB
|
|
152
119
|
|
|
153
|
-
|
|
120
|
+
with SB(uc=True, test=True, locale="en") as sb:
|
|
121
|
+
sb.activate_cdp_mode()
|
|
122
|
+
sb.goto("https://gitlab.com/users/sign_in")
|
|
123
|
+
sb.sleep(2)
|
|
124
|
+
sb.solve_captcha()
|
|
125
|
+
sb.highlight('h1:contains("GitLab")')
|
|
126
|
+
sb.highlight('button:contains("Sign in")')
|
|
127
|
+
```
|
|
154
128
|
|
|
155
|
-
|
|
129
|
+
> `python raw_gitlab.py`
|
|
156
130
|
|
|
157
|
-
<p align="
|
|
158
|
-
<img src="https://seleniumbase.github.io/other/
|
|
159
|
-
<br /><em>(For maximum stealth, use <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">CDP Mode</a>, which includes <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">Stealthy Playwright Mode</a>.)</em>
|
|
131
|
+
<p align="left">
|
|
132
|
+
<img src="https://seleniumbase.github.io/other/gitlab_bypass_2.png" alt="SeleniumBase" width="420" style="max-width: 100% !important; height: auto !important;"/>
|
|
160
133
|
</p>
|
|
161
134
|
|
|
162
135
|
--------
|
|
163
136
|
|
|
164
137
|
<h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
|
|
165
138
|
|
|
166
|
-
<p>💡 You can set
|
|
139
|
+
<p>💡 You can set which Chromium browser to use via command-line parameters:</p>
|
|
167
140
|
|
|
168
141
|
```zsh
|
|
169
142
|
python SCRIPT.py --chromium # Use the unbranded Chromium browser
|
|
@@ -182,11 +155,13 @@ sb = sb_cdp.Chrome(use_chromium=True)
|
|
|
182
155
|
|
|
183
156
|
--------
|
|
184
157
|
|
|
185
|
-
<h3
|
|
158
|
+
<h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
|
|
186
159
|
|
|
187
|
-
|
|
160
|
+
<img src="https://seleniumbase.github.io/other/sb_architecture.png" width="540" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
|
|
188
161
|
|
|
162
|
+
--------
|
|
189
163
|
|
|
164
|
+
<h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
|
|
190
165
|
|
|
191
166
|
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank">This example</a> tests an e-commerce site with <code>pytest</code>:</b></p>
|
|
192
167
|
|
|
@@ -216,6 +191,8 @@ class MyTestClass(BaseCase):
|
|
|
216
191
|
|
|
217
192
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="500" style="max-width: 100% !important; height: auto !important;" /></a>
|
|
218
193
|
|
|
194
|
+
🥷 For stealth with `pytest`, add `--uc` as a command-line option.
|
|
195
|
+
|
|
219
196
|
--------
|
|
220
197
|
|
|
221
198
|
<p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This example</a> tests another e-commerce site with <code>pytest</code>:</b></p>
|
|
@@ -242,7 +219,7 @@ pytest test_demo_site.py
|
|
|
242
219
|
|
|
243
220
|
> Easy to type, click, select, toggle, drag & drop, and more.
|
|
244
221
|
|
|
245
|
-
|
|
222
|
+
📚 For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.
|
|
246
223
|
|
|
247
224
|
--------
|
|
248
225
|
|
|
@@ -40,7 +40,7 @@ selenium==4.50.0
|
|
|
40
40
|
cssselect>=1.5.0,<2
|
|
41
41
|
sortedcontainers==2.4.0
|
|
42
42
|
execnet==2.1.2
|
|
43
|
-
iniconfig
|
|
43
|
+
iniconfig~=2.3.1
|
|
44
44
|
pluggy==1.6.0
|
|
45
45
|
pytest==8.4.2;python_version<"3.11"
|
|
46
46
|
pytest==9.1.1;python_version>="3.11"
|
|
@@ -68,5 +68,5 @@ coverage>=7.16.2
|
|
|
68
68
|
pytest-cov>=7.1.0
|
|
69
69
|
flake8==7.4.1
|
|
70
70
|
mccabe==0.7.0
|
|
71
|
-
pyflakes==4.0.
|
|
71
|
+
pyflakes==4.0.3
|
|
72
72
|
pycodestyle==2.15.0
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.55.
|
|
2
|
+
__version__ = "4.55.2"
|