seleniumbase 4.53.6__tar.gz → 4.53.7__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.53.6/seleniumbase.egg-info → seleniumbase-4.53.7}/PKG-INFO +2 -2
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/mcp_servers/server.py +167 -97
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/requirements.txt +1 -1
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.53.6 → seleniumbase-4.53.7/seleniumbase.egg-info}/PKG-INFO +2 -2
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase.egg-info/requires.txt +1 -1
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/setup.py +1 -1
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/.gitignore +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/LICENSE +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/MANIFEST.in +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/README.md +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/install.sh +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/mcp_servers/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/pyproject.toml +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/pytest.ini +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/sbase/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/sbase/__main__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/sbase/steps.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/browser_launcher.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/sb_cdp.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/base_case.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/setup.cfg +0 -0
- {seleniumbase-4.53.6 → seleniumbase-4.53.7}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.53.
|
|
3
|
+
Version: 4.53.7
|
|
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
|
|
@@ -109,7 +109,7 @@ Requires-Dist: pytest-html==4.0.2
|
|
|
109
109
|
Requires-Dist: pytest-metadata==3.1.1
|
|
110
110
|
Requires-Dist: pytest-ordering==0.6
|
|
111
111
|
Requires-Dist: pytest-rerunfailures==16.3; python_version == "3.10"
|
|
112
|
-
Requires-Dist: pytest-rerunfailures==16.6; python_version >= "3.11"
|
|
112
|
+
Requires-Dist: pytest-rerunfailures==16.6.1; python_version >= "3.11"
|
|
113
113
|
Requires-Dist: pytest-xdist==3.8.0
|
|
114
114
|
Requires-Dist: parameterized==0.9.0
|
|
115
115
|
Requires-Dist: behave==1.2.6
|
|
@@ -27,7 +27,7 @@ Tool-selection philosophy:
|
|
|
27
27
|
- Use get_content for reading visible text or HTML.
|
|
28
28
|
- Use find_elements for discovering and inspecting multiple matching
|
|
29
29
|
elements as structured data.
|
|
30
|
-
- Use
|
|
30
|
+
- Use check_condition for an immediate, non-waiting state check.
|
|
31
31
|
- Use wait_for when the agent needs to wait for a condition to become true.
|
|
32
32
|
- Use assert_condition when the agent needs to verify an expected condition
|
|
33
33
|
and treat failure as an assertion error.
|
|
@@ -287,7 +287,7 @@ def get_page_info() -> dict | str:
|
|
|
287
287
|
- Need URL, title, origin, or User-Agent -> use get_page_info.
|
|
288
288
|
- Need visible page text or HTML -> use get_content.
|
|
289
289
|
- Need information about matching elements -> use find_elements.
|
|
290
|
-
- Need an immediate state check -> use
|
|
290
|
+
- Need an immediate state check -> use check_condition.
|
|
291
291
|
- Need to wait for a condition -> use wait_for.
|
|
292
292
|
- Need to verify an expected condition -> use assert_condition.
|
|
293
293
|
|
|
@@ -345,9 +345,9 @@ def navigate(url: str) -> str:
|
|
|
345
345
|
|
|
346
346
|
Tool selection:
|
|
347
347
|
- Go to a new URL -> use navigate.
|
|
348
|
-
- Return to the previous page -> use
|
|
349
|
-
- Go forward in history -> use
|
|
350
|
-
- Refresh the current page -> use
|
|
348
|
+
- Return to the previous page -> use manage_history(action="back").
|
|
349
|
+
- Go forward in history -> use manage_history(action="forward").
|
|
350
|
+
- Refresh the current page -> use manage_history(action="reload").
|
|
351
351
|
"""
|
|
352
352
|
_get_sb().get(url)
|
|
353
353
|
return f"Navigated to {url}"
|
|
@@ -355,35 +355,42 @@ def navigate(url: str) -> str:
|
|
|
355
355
|
|
|
356
356
|
@mcp.tool()
|
|
357
357
|
@handle_sb_errors
|
|
358
|
-
def
|
|
359
|
-
action: Literal["back", "forward", "reload"] = "
|
|
360
|
-
) -> str:
|
|
361
|
-
"""Navigate through the current browser history
|
|
358
|
+
def manage_history(
|
|
359
|
+
action: Literal["back", "forward", "reload", "list"] = "list",
|
|
360
|
+
) -> str | dict[str, Any]:
|
|
361
|
+
"""Navigate through the current browser history, reload the current page,
|
|
362
|
+
or list the current browser history.
|
|
362
363
|
|
|
363
|
-
Use this tool
|
|
364
|
-
history
|
|
364
|
+
Use this tool for navigation relative to the current browser
|
|
365
|
+
history or for displaying the current browser history.
|
|
366
|
+
Use the 'navigate' tool when going to an arbitrary URL.
|
|
365
367
|
|
|
366
368
|
Args:
|
|
367
369
|
action:
|
|
368
|
-
- "back": Navigate to the previous history entry.
|
|
369
|
-
effect when there is no previous history entry.
|
|
370
|
-
- "forward": Navigate to the next history entry.
|
|
371
|
-
effect when there is no forward history entry.
|
|
370
|
+
- "back": Navigate to the previous history entry.
|
|
371
|
+
Has no useful effect when there is no previous history entry.
|
|
372
|
+
- "forward": Navigate to the next history entry.
|
|
373
|
+
Has no useful effect when there is no forward history entry.
|
|
372
374
|
- "reload": Reload the current page while ignoring the browser
|
|
373
375
|
cache so page resources are fetched again.
|
|
376
|
+
- "list": Return a tuple containing the current location in
|
|
377
|
+
history (0-indexed) and the full navigation-history list.
|
|
374
378
|
|
|
375
379
|
Returns:
|
|
376
|
-
A confirmation message describing the operation performed
|
|
380
|
+
A confirmation message describing the operation performed for
|
|
381
|
+
navigation actions, or, for "list", a tuple containing the current
|
|
382
|
+
history location (0-indexed) and the full navigation-history list.
|
|
377
383
|
|
|
378
384
|
Notes:
|
|
379
385
|
These operations can trigger page loads, redirects, and other
|
|
380
|
-
navigation events. Use get_page_info afterward
|
|
381
|
-
verify the resulting URL or title.
|
|
386
|
+
navigation events. Use the 'get_page_info' tool afterward
|
|
387
|
+
when you need to verify the resulting URL or title.
|
|
382
388
|
|
|
383
389
|
Tool selection:
|
|
384
390
|
- Arbitrary destination URL -> use navigate.
|
|
385
391
|
- Previous/next browser history entry -> use this tool.
|
|
386
392
|
- Refresh current page -> use this tool with action="reload".
|
|
393
|
+
- List current history -> use this tool with action="list".
|
|
387
394
|
"""
|
|
388
395
|
sb = _get_sb()
|
|
389
396
|
|
|
@@ -399,9 +406,25 @@ def navigate_history(
|
|
|
399
406
|
sb.reload(ignore_cache=True)
|
|
400
407
|
return "Page reloaded."
|
|
401
408
|
|
|
409
|
+
if action == "list":
|
|
410
|
+
position, entries = sb.get_navigation_history()
|
|
411
|
+
return {
|
|
412
|
+
"position": position,
|
|
413
|
+
"entries": [
|
|
414
|
+
{
|
|
415
|
+
"id": entry.id_,
|
|
416
|
+
"url": entry.url,
|
|
417
|
+
"user_typed_url": entry.user_typed_url,
|
|
418
|
+
"title": entry.title,
|
|
419
|
+
"transition_type": entry.transition_type.value,
|
|
420
|
+
}
|
|
421
|
+
for entry in entries
|
|
422
|
+
],
|
|
423
|
+
}
|
|
424
|
+
|
|
402
425
|
return (
|
|
403
426
|
f"Error: unknown action '{action}'. "
|
|
404
|
-
"Use 'back', 'forward', or '
|
|
427
|
+
"Use 'back', 'forward', 'reload', or 'list'."
|
|
405
428
|
)
|
|
406
429
|
|
|
407
430
|
|
|
@@ -413,7 +436,7 @@ def navigate_history(
|
|
|
413
436
|
@handle_sb_errors
|
|
414
437
|
def find_elements(
|
|
415
438
|
selector: str,
|
|
416
|
-
timeout:
|
|
439
|
+
timeout: float = 0.5,
|
|
417
440
|
include_html: bool = False,
|
|
418
441
|
) -> dict | str:
|
|
419
442
|
"""Find matching elements and return structured element information.
|
|
@@ -429,16 +452,17 @@ def find_elements(
|
|
|
429
452
|
selector: CSS selector, or a SeleniumBase selector that can match
|
|
430
453
|
visible text. Examples include "button", ".login-link", or
|
|
431
454
|
'a:contains("Sign in")'.
|
|
432
|
-
timeout: Maximum number of seconds to wait for matching elements
|
|
433
|
-
Defaults to
|
|
455
|
+
timeout: Maximum number of seconds to wait for matching elements
|
|
456
|
+
to be found. (Defaults to 0.5 seconds.)
|
|
434
457
|
include_html: If True, include each matching element's outer HTML.
|
|
435
|
-
If False, return only tag name and text.
|
|
458
|
+
If False, return only tag name and text. (Defaults to False.)
|
|
436
459
|
|
|
437
460
|
Returns:
|
|
438
461
|
A dictionary containing:
|
|
439
462
|
- count: Number of matching elements found.
|
|
440
463
|
- matches: A list of element dictionaries containing tag_name and
|
|
441
464
|
text, plus html when include_html=True.
|
|
465
|
+
If there are no matching elements, returns an empty dictionary.
|
|
442
466
|
|
|
443
467
|
Tool selection:
|
|
444
468
|
- Need structured information about matching elements ->
|
|
@@ -447,7 +471,7 @@ def find_elements(
|
|
|
447
471
|
use get_content.
|
|
448
472
|
- Need to click one of several matches -> use click with nth.
|
|
449
473
|
- Need to know whether an element is present/visible ->
|
|
450
|
-
use
|
|
474
|
+
use check_condition.
|
|
451
475
|
|
|
452
476
|
Note:
|
|
453
477
|
Element handles cannot be persisted across MCP calls. If you find
|
|
@@ -455,29 +479,32 @@ def find_elements(
|
|
|
455
479
|
appropriate interaction tool.
|
|
456
480
|
"""
|
|
457
481
|
sb = _get_sb()
|
|
458
|
-
|
|
482
|
+
try:
|
|
483
|
+
elements = sb.find_all(selector, timeout=timeout)
|
|
484
|
+
except Exception:
|
|
485
|
+
return {}
|
|
459
486
|
|
|
460
487
|
if include_html:
|
|
461
488
|
return {
|
|
462
|
-
"count": len(
|
|
489
|
+
"count": len(elements),
|
|
463
490
|
"matches": [
|
|
464
491
|
{
|
|
465
|
-
"tag_name":
|
|
466
|
-
"text":
|
|
467
|
-
"html":
|
|
492
|
+
"tag_name": element.tag_name,
|
|
493
|
+
"text": element.text,
|
|
494
|
+
"html": element.get_html(),
|
|
468
495
|
}
|
|
469
|
-
for
|
|
496
|
+
for element in elements
|
|
470
497
|
],
|
|
471
498
|
}
|
|
472
499
|
|
|
473
500
|
return {
|
|
474
|
-
"count": len(
|
|
501
|
+
"count": len(elements),
|
|
475
502
|
"matches": [
|
|
476
503
|
{
|
|
477
|
-
"tag_name":
|
|
478
|
-
"text":
|
|
504
|
+
"tag_name": element.tag_name,
|
|
505
|
+
"text": element.text,
|
|
479
506
|
}
|
|
480
|
-
for
|
|
507
|
+
for element in elements
|
|
481
508
|
],
|
|
482
509
|
}
|
|
483
510
|
|
|
@@ -529,8 +556,7 @@ def get_content(
|
|
|
529
556
|
- Need URLs from the page or an element -> use output_format="urls".
|
|
530
557
|
- Need structured information about matching elements ->
|
|
531
558
|
use find_elements.
|
|
532
|
-
- Need to check
|
|
533
|
-
use check_for_condition.
|
|
559
|
+
- Need to check element presence/visibility -> use check_condition.
|
|
534
560
|
- Need to wait for content to appear -> use wait_for.
|
|
535
561
|
"""
|
|
536
562
|
sb = _get_sb()
|
|
@@ -578,79 +604,86 @@ def get_attributes(
|
|
|
578
604
|
- Need to discover multiple matching elements or inspect their text ->
|
|
579
605
|
use 'find_elements'.
|
|
580
606
|
- Need visible text or HTML content -> use 'get_content'.
|
|
581
|
-
- Need to check presence
|
|
607
|
+
- Need to check element presence/visibility -> use 'check_condition'.
|
|
582
608
|
|
|
583
609
|
This is a read-only operation and does not modify the element.
|
|
584
610
|
"""
|
|
585
611
|
sb = _get_sb()
|
|
586
612
|
|
|
587
613
|
if attribute:
|
|
588
|
-
return sb.
|
|
614
|
+
return sb.get_attribute(selector, attribute)
|
|
589
615
|
|
|
590
616
|
return sb.get_element_attributes(selector)
|
|
591
617
|
|
|
592
618
|
|
|
593
619
|
@mcp.tool()
|
|
594
620
|
@handle_sb_errors
|
|
595
|
-
def
|
|
596
|
-
check: Literal["present", "visible"
|
|
621
|
+
def check_condition(
|
|
622
|
+
check: Literal["present", "visible"] = "visible",
|
|
597
623
|
selector: str = "body",
|
|
598
624
|
text: str | None = None,
|
|
599
625
|
) -> Any:
|
|
600
|
-
"""
|
|
626
|
+
"""Check the current state of an element or text without waiting
|
|
627
|
+
for the condition to become true.
|
|
601
628
|
|
|
602
|
-
Use this tool when you need an observation of the current
|
|
603
|
-
|
|
604
|
-
|
|
629
|
+
Use this tool when you need an immediate boolean observation of the current
|
|
630
|
+
page state. Use wait_for when the condition may become true later and the
|
|
631
|
+
workflow should wait for it. Use assert_condition when the condition is an
|
|
632
|
+
expected requirement and failure should be treated as an assertion error.
|
|
605
633
|
|
|
606
634
|
Args:
|
|
607
635
|
check:
|
|
608
|
-
|
|
609
|
-
- "
|
|
610
|
-
- "
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
selector:
|
|
615
|
-
|
|
616
|
-
|
|
636
|
+
The element state to inspect when text is not provided:
|
|
637
|
+
- "present": Return True when at least one matching element exists.
|
|
638
|
+
- "visible": Return True when the matching element is visible.
|
|
639
|
+
Defaults to "visible".
|
|
640
|
+
`check` is ignored when `text` is provided.
|
|
641
|
+
|
|
642
|
+
selector:
|
|
643
|
+
CSS selector or SeleniumBase selector identifying the element to
|
|
644
|
+
inspect. Defaults to "body". When `text` is provided, this also
|
|
645
|
+
identifies the element whose visible text is checked.
|
|
646
|
+
|
|
647
|
+
text:
|
|
648
|
+
Optional text to check for visibility within `selector`. When
|
|
649
|
+
provided, this takes precedence over `check`; the tool checks text
|
|
650
|
+
visibility instead of element presence or visibility. Use this when
|
|
651
|
+
the question is "Is this text currently visible?" rather than
|
|
652
|
+
whether the element itself is present or visible.
|
|
617
653
|
|
|
618
654
|
Returns:
|
|
619
|
-
|
|
620
|
-
|
|
655
|
+
True or False indicating whether the requested condition is currently
|
|
656
|
+
satisfied. Missing elements return False rather than raising an
|
|
657
|
+
exception.
|
|
621
658
|
|
|
622
659
|
Tool selection:
|
|
623
|
-
- Immediate
|
|
624
|
-
- Wait
|
|
660
|
+
- Immediate boolean observation -> use check_condition.
|
|
661
|
+
- Wait for an element or text condition to become true/false ->
|
|
662
|
+
use wait_for.
|
|
625
663
|
- Verify an expected condition and fail when it is not met ->
|
|
626
664
|
use assert_condition.
|
|
665
|
+
- Need the number or details of matching elements -> use find_elements.
|
|
666
|
+
- Need to read the actual page or element content -> use get_content.
|
|
627
667
|
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
668
|
+
Notes:
|
|
669
|
+
This tool does not intentionally wait for elements or text to appear.
|
|
670
|
+
It is intended for checking the current state only. If page timing or
|
|
671
|
+
asynchronous loading matters, use wait_for instead.
|
|
672
|
+
|
|
673
|
+
When `text` is provided, `check` is ignored.
|
|
631
674
|
"""
|
|
632
675
|
sb = _get_sb()
|
|
633
676
|
|
|
677
|
+
if text:
|
|
678
|
+
return sb.is_text_visible(text, selector)
|
|
679
|
+
|
|
634
680
|
if check == "present":
|
|
635
681
|
return sb.is_element_present(selector)
|
|
636
682
|
|
|
637
683
|
if check == "visible":
|
|
638
684
|
return sb.is_element_visible(selector)
|
|
639
685
|
|
|
640
|
-
|
|
641
|
-
return len(sb.find_elements(selector, timeout=1))
|
|
642
|
-
|
|
643
|
-
if check == "text_visible":
|
|
644
|
-
if text is None:
|
|
645
|
-
return (
|
|
646
|
-
"Error: The 'text_visible' check requires value for 'text'."
|
|
647
|
-
)
|
|
648
|
-
return sb.is_text_visible(text, selector)
|
|
649
|
-
|
|
650
|
-
return (
|
|
651
|
-
f"Error: unknown check '{check}'. "
|
|
652
|
-
"Use 'present', 'visible', 'count', or 'text_visible'."
|
|
653
|
-
)
|
|
686
|
+
return f"Error: unknown check '{check}'. Use 'present' or 'visible'."
|
|
654
687
|
|
|
655
688
|
|
|
656
689
|
# ---------------------------------------------------------------------------
|
|
@@ -665,7 +698,7 @@ def click(
|
|
|
665
698
|
all_matches: bool = False,
|
|
666
699
|
only_if_visible: bool = False,
|
|
667
700
|
parent_selector: str | None = None,
|
|
668
|
-
timeout:
|
|
701
|
+
timeout: float = 7,
|
|
669
702
|
scroll: bool = True,
|
|
670
703
|
) -> str:
|
|
671
704
|
"""Click one or more elements matching a selector.
|
|
@@ -815,7 +848,7 @@ def type_text(
|
|
|
815
848
|
"set_value",
|
|
816
849
|
"clear_only",
|
|
817
850
|
] = "fill_input",
|
|
818
|
-
timeout:
|
|
851
|
+
timeout: float = 7,
|
|
819
852
|
) -> str:
|
|
820
853
|
"""Fill, append, fast-type, directly set, or clear a form control.
|
|
821
854
|
|
|
@@ -973,14 +1006,18 @@ def wait_for(
|
|
|
973
1006
|
] = "visible",
|
|
974
1007
|
selector: str | None = None,
|
|
975
1008
|
text: str | None = None,
|
|
976
|
-
timeout:
|
|
1009
|
+
timeout: float = 7,
|
|
977
1010
|
) -> str:
|
|
978
1011
|
"""Wait until an element or text reaches a requested state.
|
|
979
1012
|
|
|
1013
|
+
When `text` is provided, a `state` of 'present' or 'visible' both wait
|
|
1014
|
+
for the text to appear within the selector, and a `state` of 'not_visible'
|
|
1015
|
+
or 'absent' both wait for the text to be absent from the selector.
|
|
1016
|
+
|
|
980
1017
|
Use this tool when the page is dynamic and an automation step must wait
|
|
981
1018
|
for a condition before continuing.
|
|
982
1019
|
|
|
983
|
-
Unlike
|
|
1020
|
+
Unlike check_condition, this tool intentionally waits.
|
|
984
1021
|
Unlike assert_condition, its purpose is synchronization
|
|
985
1022
|
rather than validating a test expectation.
|
|
986
1023
|
|
|
@@ -990,29 +1027,38 @@ def wait_for(
|
|
|
990
1027
|
- "visible": Wait until the matching element is visible.
|
|
991
1028
|
- "not_visible": Wait until the matching element is not visible.
|
|
992
1029
|
- "absent": Wait until the matching element no longer exists.
|
|
993
|
-
|
|
1030
|
+
(This is handled differently when text is provided.)
|
|
994
1031
|
selector: CSS selector or SeleniumBase selector for the element.
|
|
995
1032
|
Required unless text is supplied.
|
|
996
|
-
text: If supplied
|
|
997
|
-
|
|
998
|
-
|
|
1033
|
+
text: If supplied and is not None, a `state` of 'present' or 'visible'
|
|
1034
|
+
both wait for the text to appear within the selector, and a `state`
|
|
1035
|
+
of 'not_visible' or 'absent' both wait for the text to be absent
|
|
1036
|
+
from the selector (or within "body" when selector is omitted).
|
|
1037
|
+
timeout: Maximum seconds to wait for the requested state to be true.
|
|
1038
|
+
(Defaults to 7 seconds.)
|
|
999
1039
|
|
|
1000
1040
|
Returns:
|
|
1001
1041
|
A confirmation when the requested condition is reached.
|
|
1002
1042
|
|
|
1003
1043
|
Tool selection:
|
|
1004
|
-
- Check current state immediately -> use
|
|
1044
|
+
- Check current state immediately -> use check_condition.
|
|
1005
1045
|
- Wait for a state/content transition -> use wait_for.
|
|
1006
1046
|
- Verify an expected value/condition -> use assert_condition.
|
|
1007
1047
|
"""
|
|
1008
1048
|
sb = _get_sb()
|
|
1009
1049
|
|
|
1010
|
-
if selector
|
|
1011
|
-
return "Error: `selector` and `text` cannot both be
|
|
1050
|
+
if not selector and not text:
|
|
1051
|
+
return "Error: `selector` and `text` cannot both be empty."
|
|
1012
1052
|
|
|
1013
|
-
if text
|
|
1014
|
-
|
|
1015
|
-
|
|
1053
|
+
if text:
|
|
1054
|
+
if state == "present" or state == "visible":
|
|
1055
|
+
sb.wait_for_text(text, selector or "body", timeout=timeout)
|
|
1056
|
+
return f"Text '{text}' found in element {selector or 'body'}."
|
|
1057
|
+
if state == "absent" or state == "not_visible":
|
|
1058
|
+
sb.wait_for_text_not_visible(
|
|
1059
|
+
text, selector or "body", timeout=timeout
|
|
1060
|
+
)
|
|
1061
|
+
return f"Text '{text}' not found in element {selector or 'body'}."
|
|
1016
1062
|
|
|
1017
1063
|
if state == "present":
|
|
1018
1064
|
sb.wait_for_element_present(selector, timeout=timeout)
|
|
@@ -1045,14 +1091,14 @@ def assert_condition(
|
|
|
1045
1091
|
selector: str | None = None,
|
|
1046
1092
|
expected: str | None = None,
|
|
1047
1093
|
exact: bool = False,
|
|
1048
|
-
timeout:
|
|
1094
|
+
timeout: float = 7,
|
|
1049
1095
|
) -> str:
|
|
1050
1096
|
"""Verify an expected browser condition and fail when it is not met.
|
|
1051
1097
|
|
|
1052
|
-
Use this tool for explicit verification. Unlike
|
|
1098
|
+
Use this tool for explicit verification. Unlike check_condition,
|
|
1053
1099
|
which simply reports True or False on the current state,
|
|
1054
1100
|
assert_condition treats a failed expectation as an error.
|
|
1055
|
-
|
|
1101
|
+
(Note that URL/title checks do not wait for the 'timeout'.)
|
|
1056
1102
|
|
|
1057
1103
|
Args:
|
|
1058
1104
|
check:
|
|
@@ -1070,6 +1116,7 @@ def assert_condition(
|
|
|
1070
1116
|
exact: For check="text_visible", require exact text
|
|
1071
1117
|
rather than a substring.
|
|
1072
1118
|
timeout: Maximum seconds to wait for element/text checks.
|
|
1119
|
+
(Ignored for title and URL checks.)
|
|
1073
1120
|
|
|
1074
1121
|
Returns:
|
|
1075
1122
|
A confirmation when the expectation passes.
|
|
@@ -1079,7 +1126,7 @@ def assert_condition(
|
|
|
1079
1126
|
fails; the MCP error wrapper converts it to a descriptive result.
|
|
1080
1127
|
|
|
1081
1128
|
Tool selection:
|
|
1082
|
-
- Just inspect current state -> use
|
|
1129
|
+
- Just inspect current state -> use check_condition.
|
|
1083
1130
|
- Wait for a condition to become true -> use wait_for.
|
|
1084
1131
|
- Verify that an expected condition is true -> use assert_condition.
|
|
1085
1132
|
"""
|
|
@@ -1249,6 +1296,27 @@ def manage_storage(
|
|
|
1249
1296
|
Storage belongs to the current page origin. Values from one website
|
|
1250
1297
|
are not generally available to another origin.
|
|
1251
1298
|
"""
|
|
1299
|
+
sb = _get_sb()
|
|
1300
|
+
|
|
1301
|
+
if action not in ("get", "set"):
|
|
1302
|
+
return "Error: action must be 'get' or 'set'."
|
|
1303
|
+
|
|
1304
|
+
if action == "set" and value is None:
|
|
1305
|
+
return "Error: value is required when action='set'."
|
|
1306
|
+
|
|
1307
|
+
if storage == "local":
|
|
1308
|
+
if action == "get":
|
|
1309
|
+
return sb.get_local_storage_item(key)
|
|
1310
|
+
sb.set_local_storage_item(key, value)
|
|
1311
|
+
return f"Set localStorage[{key!r}]"
|
|
1312
|
+
|
|
1313
|
+
if storage == "session":
|
|
1314
|
+
if action == "get":
|
|
1315
|
+
return sb.get_session_storage_item(key)
|
|
1316
|
+
sb.set_session_storage_item(key, value)
|
|
1317
|
+
return f"Set sessionStorage[{key!r}]"
|
|
1318
|
+
|
|
1319
|
+
return f"Error: unknown storage '{storage}'. Use 'local' or 'session'."
|
|
1252
1320
|
|
|
1253
1321
|
|
|
1254
1322
|
# ---------------------------------------------------------------------------
|
|
@@ -1280,20 +1348,22 @@ def scroll(
|
|
|
1280
1348
|
|
|
1281
1349
|
if direction == "up":
|
|
1282
1350
|
sb.scroll_up(amount=amount)
|
|
1351
|
+
return f"Scrolled up by {amount}%."
|
|
1283
1352
|
elif direction == "down":
|
|
1284
1353
|
sb.scroll_down(amount=amount)
|
|
1354
|
+
return f"Scrolled down by {amount}%."
|
|
1285
1355
|
elif direction == "top":
|
|
1286
1356
|
sb.scroll_to_top()
|
|
1357
|
+
return "Scrolled to the top."
|
|
1287
1358
|
elif direction == "bottom":
|
|
1288
1359
|
sb.scroll_to_bottom()
|
|
1360
|
+
return "Scrolled to the bottom."
|
|
1289
1361
|
else:
|
|
1290
1362
|
return (
|
|
1291
1363
|
f"Error: unknown direction '{direction}'. "
|
|
1292
1364
|
"Use 'up', 'down', 'top', or 'bottom'."
|
|
1293
1365
|
)
|
|
1294
1366
|
|
|
1295
|
-
return f"Scrolled {direction}."
|
|
1296
|
-
|
|
1297
1367
|
|
|
1298
1368
|
# ---------------------------------------------------------------------------
|
|
1299
1369
|
# Windows & tabs
|
|
@@ -1371,7 +1441,7 @@ def manage_tabs(
|
|
|
1371
1441
|
"""List, open, switch between, or close browser tabs.
|
|
1372
1442
|
|
|
1373
1443
|
Use this tool for tab management. Browser navigation within the current
|
|
1374
|
-
tab belongs to navigate and
|
|
1444
|
+
tab belongs to navigate and manage_history.
|
|
1375
1445
|
|
|
1376
1446
|
Args:
|
|
1377
1447
|
action:
|
|
@@ -1462,7 +1532,7 @@ def solve_captcha() -> str:
|
|
|
1462
1532
|
1. Inspect the page with get_content when you need to determine
|
|
1463
1533
|
whether CAPTCHA-related controls are present.
|
|
1464
1534
|
2. Call solve_captcha to attempt the interaction.
|
|
1465
|
-
3. Use get_page_info, get_content,
|
|
1535
|
+
3. Use get_page_info, get_content, check_condition,
|
|
1466
1536
|
or manage_cookies to inspect resulting page/session state.
|
|
1467
1537
|
|
|
1468
1538
|
Returns:
|
|
@@ -1587,7 +1657,7 @@ def run_javascript(expression: str) -> Any:
|
|
|
1587
1657
|
|
|
1588
1658
|
@mcp.tool()
|
|
1589
1659
|
@handle_sb_errors
|
|
1590
|
-
def wait_seconds(seconds:
|
|
1660
|
+
def wait_seconds(seconds: float) -> str:
|
|
1591
1661
|
"""Block the MCP server for a fixed number of seconds.
|
|
1592
1662
|
|
|
1593
1663
|
This is a low-level timing tool. It performs no browser action while
|
|
@@ -49,7 +49,7 @@ pytest-html==4.0.2
|
|
|
49
49
|
pytest-metadata==3.1.1
|
|
50
50
|
pytest-ordering==0.6
|
|
51
51
|
pytest-rerunfailures==16.3;python_version=="3.10"
|
|
52
|
-
pytest-rerunfailures==16.6;python_version>="3.11"
|
|
52
|
+
pytest-rerunfailures==16.6.1;python_version>="3.11"
|
|
53
53
|
pytest-xdist==3.8.0
|
|
54
54
|
parameterized==0.9.0
|
|
55
55
|
behave==1.2.6
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.53.
|
|
2
|
+
__version__ = "4.53.7"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.53.
|
|
3
|
+
Version: 4.53.7
|
|
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
|
|
@@ -109,7 +109,7 @@ Requires-Dist: pytest-html==4.0.2
|
|
|
109
109
|
Requires-Dist: pytest-metadata==3.1.1
|
|
110
110
|
Requires-Dist: pytest-ordering==0.6
|
|
111
111
|
Requires-Dist: pytest-rerunfailures==16.3; python_version == "3.10"
|
|
112
|
-
Requires-Dist: pytest-rerunfailures==16.6; python_version >= "3.11"
|
|
112
|
+
Requires-Dist: pytest-rerunfailures==16.6.1; python_version >= "3.11"
|
|
113
113
|
Requires-Dist: pytest-xdist==3.8.0
|
|
114
114
|
Requires-Dist: parameterized==0.9.0
|
|
115
115
|
Requires-Dist: behave==1.2.6
|
|
@@ -215,7 +215,7 @@ setup(
|
|
|
215
215
|
'pytest-metadata==3.1.1',
|
|
216
216
|
'pytest-ordering==0.6',
|
|
217
217
|
'pytest-rerunfailures==16.3;python_version=="3.10"',
|
|
218
|
-
'pytest-rerunfailures==16.6;python_version>="3.11"',
|
|
218
|
+
'pytest-rerunfailures==16.6.1;python_version>="3.11"',
|
|
219
219
|
'pytest-xdist==3.8.0',
|
|
220
220
|
'parameterized==0.9.0',
|
|
221
221
|
'behave==1.2.6', # Newer ones had issues
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|