seleniumbase 4.53.3__tar.gz → 4.53.4__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.
Files changed (164) hide show
  1. {seleniumbase-4.53.3/seleniumbase.egg-info → seleniumbase-4.53.4}/PKG-INFO +2 -2
  2. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/mcp_servers/server.py +86 -60
  3. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/requirements.txt +1 -1
  4. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/__version__.py +1 -1
  5. {seleniumbase-4.53.3 → seleniumbase-4.53.4/seleniumbase.egg-info}/PKG-INFO +2 -2
  6. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase.egg-info/requires.txt +1 -1
  7. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/setup.py +1 -1
  8. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/.gitignore +0 -0
  9. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/LICENSE +0 -0
  10. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/MANIFEST.in +0 -0
  11. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/README.md +0 -0
  12. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/install.sh +0 -0
  13. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/mcp_servers/__init__.py +0 -0
  14. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/pyproject.toml +0 -0
  15. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/pytest.ini +0 -0
  16. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/sbase/__init__.py +0 -0
  17. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/sbase/__main__.py +0 -0
  18. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/sbase/steps.py +0 -0
  19. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/__init__.py +0 -0
  20. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/__main__.py +0 -0
  21. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/behave/__init__.py +0 -0
  22. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/behave/behave_helper.py +0 -0
  23. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/behave/behave_sb.py +0 -0
  24. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/behave/steps.py +0 -0
  25. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/common/__init__.py +0 -0
  26. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/common/decorators.py +0 -0
  27. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/common/encryption.py +0 -0
  28. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/common/exceptions.py +0 -0
  29. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/common/obfuscate.py +0 -0
  30. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/common/unobfuscate.py +0 -0
  31. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/config/__init__.py +0 -0
  32. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/config/ad_block_list.py +0 -0
  33. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/config/proxy_list.py +0 -0
  34. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/config/settings.py +0 -0
  35. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/__init__.py +0 -0
  36. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/logo_helper.py +0 -0
  37. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/rich_helper.py +0 -0
  38. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/run.py +0 -0
  39. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  40. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  41. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_commander.py +0 -0
  42. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_install.py +0 -0
  43. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  44. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  45. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  46. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  47. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  48. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  49. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_print.py +0 -0
  50. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  51. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/__init__.py +0 -0
  52. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/application_manager.py +0 -0
  53. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/browser_launcher.py +0 -0
  54. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/capabilities_parser.py +0 -0
  55. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/colored_traceback.py +0 -0
  56. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/create_db_tables.sql +0 -0
  57. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/detect_b_ver.py +0 -0
  58. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/download_helper.py +0 -0
  59. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/encoded_images.py +0 -0
  60. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/jqc_helper.py +0 -0
  61. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/log_helper.py +0 -0
  62. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/mysql.py +0 -0
  63. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/nest_asyncio.py +0 -0
  64. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/proxy_helper.py +0 -0
  65. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/recorder_helper.py +0 -0
  66. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/report_helper.py +0 -0
  67. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/s3_manager.py +0 -0
  68. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/sb_cdp.py +0 -0
  69. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/sb_driver.py +0 -0
  70. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/session_helper.py +0 -0
  71. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/settings_parser.py +0 -0
  72. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/style_sheet.py +0 -0
  73. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/testcase_manager.py +0 -0
  74. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/tour_helper.py +0 -0
  75. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/core/visual_helper.py +0 -0
  76. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/drivers/__init__.py +0 -0
  77. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
  78. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  79. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
  80. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  81. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
  82. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
  83. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/extensions/__init__.py +0 -0
  84. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/extensions/ad_block.zip +0 -0
  85. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/extensions/disable_csp.zip +0 -0
  86. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/extensions/recorder.zip +0 -0
  87. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/extensions/sbase_ext.zip +0 -0
  88. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/__init__.py +0 -0
  89. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/base_case.py +0 -0
  90. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/constants.py +0 -0
  91. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  92. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/errors.py +0 -0
  93. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/js_utils.py +0 -0
  94. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/page_actions.py +0 -0
  95. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/page_utils.py +0 -0
  96. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/shared_utils.py +0 -0
  97. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/unittest_helper.py +0 -0
  98. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/words.py +0 -0
  99. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  100. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/js_code/__init__.py +0 -0
  101. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/js_code/active_css_js.py +0 -0
  102. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/js_code/live_js.py +0 -0
  103. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/js_code/recorder_js.py +0 -0
  104. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/masterqa/__init__.py +0 -0
  105. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/masterqa/master_qa.py +0 -0
  106. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/__init__.py +0 -0
  107. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/base_plugin.py +0 -0
  108. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/basic_test_info.py +0 -0
  109. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  110. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/driver_manager.py +0 -0
  111. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/page_source.py +0 -0
  112. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/pytest_plugin.py +0 -0
  113. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  114. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/sb_manager.py +0 -0
  115. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/screen_shots.py +0 -0
  116. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/plugins/selenium_plugin.py +0 -0
  117. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/resources/__init__.py +0 -0
  118. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/__init__.py +0 -0
  119. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/chinese.py +0 -0
  120. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/dutch.py +0 -0
  121. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/french.py +0 -0
  122. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/italian.py +0 -0
  123. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/japanese.py +0 -0
  124. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/korean.py +0 -0
  125. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/master_dict.py +0 -0
  126. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/portuguese.py +0 -0
  127. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/russian.py +0 -0
  128. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/spanish.py +0 -0
  129. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/translate/translator.py +0 -0
  130. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/__init__.py +0 -0
  131. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/cdp.py +0 -0
  132. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  133. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  134. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  135. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  136. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  137. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  138. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  139. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  140. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/dprocess.py +0 -0
  141. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/options.py +0 -0
  142. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/patcher.py +0 -0
  143. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/reactor.py +0 -0
  144. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/undetected/webelement.py +0 -0
  145. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/__init__.py +0 -0
  146. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  147. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  148. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  149. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  150. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  151. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  152. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  153. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  154. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  155. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  156. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  157. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  158. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  159. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase.egg-info/SOURCES.txt +0 -0
  160. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase.egg-info/dependency_links.txt +0 -0
  161. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase.egg-info/entry_points.txt +0 -0
  162. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/seleniumbase.egg-info/top_level.txt +0 -0
  163. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/setup.cfg +0 -0
  164. {seleniumbase-4.53.3 → seleniumbase-4.53.4}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.53.3
3
+ Version: 4.53.4
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
@@ -71,7 +71,7 @@ Requires-Dist: filelock>=3.32.5
71
71
  Requires-Dist: fasteners>=0.20
72
72
  Requires-Dist: mycdp>=1.4.0
73
73
  Requires-Dist: pynose>=1.5.5
74
- Requires-Dist: platformdirs>=4.11.5
74
+ Requires-Dist: platformdirs>=4.11.7
75
75
  Requires-Dist: typing-extensions>=4.16.0
76
76
  Requires-Dist: sbvirtualdisplay>=1.4.0
77
77
  Requires-Dist: MarkupSafe>=3.0.3
@@ -32,14 +32,8 @@ Tool-selection philosophy:
32
32
  - Use wait_for when the agent needs to wait for a condition to become true.
33
33
  - Use assert_that when the agent needs to verify an expected condition and
34
34
  treat failure as an assertion error.
35
- - Use click/fill_input/select_option/hover/act_on_element for interactions.
36
-
37
- Note on elements: CDP-mode element objects (from find_element/find_all) are
38
- live handles with their own methods (.click(), .get_html(), ...) that can't
39
- cross the MCP boundary as stateful objects. Tools here resolve elements
40
- immediately to plain dicts (tag, text, html) rather than returning handles.
41
- To act on one of several matches, use click(selector, nth=...) rather than
42
- find + click.
35
+ - Use click/fill_input/select_option/hover_with_action/focus_on for
36
+ interactions and element positioning.
43
37
  """
44
38
  from __future__ import annotations
45
39
  import atexit
@@ -708,54 +702,84 @@ def click(
708
702
 
709
703
  @mcp.tool()
710
704
  @handle_sb_errors
711
- def hover(
712
- selector: str,
713
- then_click_selector: str | None = None,
705
+ def hover_with_action(
706
+ selector1: str,
707
+ selector2: str | None = None,
708
+ action: Literal[
709
+ "none",
710
+ "click",
711
+ "drag_and_drop",
712
+ ] = "none",
714
713
  ) -> str:
715
- """Hover over an element, optionally clicking an element revealed by hover.
714
+ """Hover over an element, optionally click another element, or drag-&-drop.
716
715
 
717
- Use this for menus, dropdowns, tooltips, or other interfaces where an
718
- element must first be hovered before its target becomes available.
716
+ Use this tool for hover interactions, hover-triggered menus, and
717
+ drag-and-drop operations.
719
718
 
720
719
  Args:
721
- selector: Element to hover over.
722
- then_click_selector: Optional element to click after the hover.
723
- Useful for a submenu item or dropdown option revealed by hover.
720
+ selector1:
721
+ The primary element selector.
724
722
 
725
- Returns:
726
- A confirmation describing the hover/click operation.
727
- """
728
- sb = _get_sb()
723
+ For action="none", this is the element to hover over.
729
724
 
730
- if then_click_selector:
731
- sb.hover_and_click(selector, then_click_selector)
732
- return f"Hovered {selector} and clicked {then_click_selector}"
725
+ For action="click", this is the element to hover over before
726
+ clicking selector2.
733
727
 
734
- sb.hover_element(selector)
735
- return f"Hovered {selector}"
728
+ For action="drag_and_drop", this is the draggable source element.
736
729
 
730
+ selector2:
731
+ The secondary element selector.
737
732
 
738
- @mcp.tool()
739
- @handle_sb_errors
740
- def drag_and_drop(
741
- source_selector: str,
742
- target_selector: str,
743
- ) -> str:
744
- """Drag a draggable element and drop it onto another element.
733
+ Required for action="click", where it identifies the element
734
+ revealed or targeted after hovering selector1.
745
735
 
746
- Drag-and-drop is performed through SeleniumBase's CDP browser controls,
747
- simulating the pointer and mouse events expected by web applications.
736
+ Required for action="drag_and_drop", where it identifies the
737
+ destination/drop target.
748
738
 
749
- Args:
750
- source_selector: CSS selector identifying the draggable source.
751
- target_selector: CSS selector identifying the drop target.
739
+ Not used for action="none".
740
+
741
+ action:
742
+ - "none": Hover over selector1 only.
743
+ - "click": Hover over selector1, then click selector2.
744
+ - "drag_and_drop": Drag selector1 and drop it onto selector2.
745
+
746
+ Returns:
747
+ A confirmation describing the performed operation.
748
+
749
+ Tool selection:
750
+ - Simple hover -> action="none".
751
+ - Hover over one element and then click another -> action="click".
752
+ - Drag one element onto another -> action="drag_and_drop".
753
+
754
+ Notes:
755
+ For action="click", selector1 is the hover target and selector2 is
756
+ the click target.
752
757
 
753
- The simulated interaction includes events such as pointerdown,
754
- mousedown, dragstart, dragenter, dragover, drop, dragend, mouseup, and
755
- pointerup.
758
+ For action="drag_and_drop", selector1 is the source and selector2
759
+ is the destination.
756
760
  """
757
- _get_sb().drag_and_drop(source_selector, target_selector)
758
- return f"Dragged {source_selector} onto {target_selector}"
761
+ sb = _get_sb()
762
+
763
+ if action == "none":
764
+ sb.hover_element(selector1)
765
+ return f"Hovered {selector1}"
766
+
767
+ if action == "click":
768
+ if selector2 is None:
769
+ return "Error: action='click' requires selector2."
770
+ sb.hover_and_click(selector1, selector2)
771
+ return f"Hovered {selector1} and clicked {selector2}"
772
+
773
+ if action == "drag_and_drop":
774
+ if selector2 is None:
775
+ return "Error: action='drag_and_drop' requires selector2."
776
+ sb.drag_and_drop(selector1, selector2)
777
+ return f"Dragged {selector1} onto {selector2}"
778
+
779
+ return (
780
+ f"Error: unknown action '{action}'. "
781
+ "Use 'none', 'click', or 'drag_and_drop'."
782
+ )
759
783
 
760
784
 
761
785
  @mcp.tool()
@@ -860,50 +884,52 @@ def select_option(
860
884
 
861
885
  @mcp.tool()
862
886
  @handle_sb_errors
863
- def act_on_element(
887
+ def focus_on(
864
888
  selector: str,
865
889
  action: Literal[
890
+ "scroll_to_element",
866
891
  "focus",
867
892
  "highlight",
868
- "scroll_into_view",
869
- ] = "focus",
893
+ ] = "scroll_to_element",
870
894
  ) -> str:
871
- """Perform a non-click positioning or debugging action on an element.
895
+ """Scroll to, focus, or highlight an element.
872
896
 
873
- Use this tool when an element needs to be focused, highlighted for human
874
- observation/debugging, or scrolled into the viewport.
897
+ Use this tool when an element needs to be brought into view, focused for
898
+ keyboard interaction, or highlighted for debugging/demonstration.
875
899
 
876
900
  This tool does NOT click, type into, select from, hover over, or otherwise
877
901
  activate the element.
878
902
 
879
903
  Args:
880
904
  selector: CSS selector or SeleniumBase selector identifying the target.
905
+
881
906
  action:
907
+ - "scroll_to_element": Scroll the page until the element is in
908
+ the current viewport. This is the default action.
882
909
  - "focus": Move keyboard focus to the element.
883
910
  - "highlight": Temporarily highlight the element for debugging or
884
911
  demonstration. This can affect timing and may reduce stealth.
885
- - "scroll_into_view": Scroll the page until the element is in the
886
- current viewport.
887
912
 
888
913
  Tool selection:
914
+ - Bring an element into view -> use focus_on with the default action.
915
+ - Focus an element -> use focus_on(action="focus").
916
+ - Highlight element for debugging -> use focus_on(action="highlight").
889
917
  - Click -> use click.
890
918
  - Type into a form control -> use fill_input.
891
- - Hover -> use hover.
892
- - Focus, highlight, or scroll without activating -> use
893
- act_on_element.
919
+ - Hover -> use hover_with_action.
894
920
  """
895
921
  sb = _get_sb()
896
922
 
897
- if action == "focus":
923
+ if action == "scroll_to_element":
924
+ sb.scroll_into_view(selector)
925
+ elif action == "focus":
898
926
  sb.find_element(selector).focus()
899
927
  elif action == "highlight":
900
928
  sb.highlight(selector)
901
- elif action == "scroll_into_view":
902
- sb.scroll_into_view(selector)
903
929
  else:
904
930
  return (
905
931
  f"Error: unknown action '{action}'. "
906
- "Use 'focus', 'highlight', or 'scroll_into_view'."
932
+ "Use 'scroll_to_element', 'focus', or 'highlight'."
907
933
  )
908
934
 
909
935
  return f"{action} done for {selector}"
@@ -1221,8 +1247,8 @@ def scroll(
1221
1247
  up/down scrolling. For example, amount=25 scrolls approximately
1222
1248
  one quarter of the viewport height.
1223
1249
 
1224
- Use act_on_element(action="scroll_into_view") when the goal is to reveal
1225
- a specific element rather than scroll the page by a relative amount.
1250
+ Use focus_on(action="scroll_to_element") when the goal is to reveal a
1251
+ specific element rather than scroll the page by a relative amount.
1226
1252
  """
1227
1253
  sb = _get_sb()
1228
1254
 
@@ -11,7 +11,7 @@ filelock>=3.32.5
11
11
  fasteners>=0.20
12
12
  mycdp>=1.4.0
13
13
  pynose>=1.5.5
14
- platformdirs>=4.11.5
14
+ platformdirs>=4.11.7
15
15
  typing-extensions>=4.16.0
16
16
  sbvirtualdisplay>=1.4.0
17
17
  MarkupSafe>=3.0.3
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.53.3"
2
+ __version__ = "4.53.4"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.53.3
3
+ Version: 4.53.4
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
@@ -71,7 +71,7 @@ Requires-Dist: filelock>=3.32.5
71
71
  Requires-Dist: fasteners>=0.20
72
72
  Requires-Dist: mycdp>=1.4.0
73
73
  Requires-Dist: pynose>=1.5.5
74
- Requires-Dist: platformdirs>=4.11.5
74
+ Requires-Dist: platformdirs>=4.11.7
75
75
  Requires-Dist: typing-extensions>=4.16.0
76
76
  Requires-Dist: sbvirtualdisplay>=1.4.0
77
77
  Requires-Dist: MarkupSafe>=3.0.3
@@ -9,7 +9,7 @@ filelock>=3.32.5
9
9
  fasteners>=0.20
10
10
  mycdp>=1.4.0
11
11
  pynose>=1.5.5
12
- platformdirs>=4.11.5
12
+ platformdirs>=4.11.7
13
13
  typing-extensions>=4.16.0
14
14
  sbvirtualdisplay>=1.4.0
15
15
  MarkupSafe>=3.0.3
@@ -177,7 +177,7 @@ setup(
177
177
  'fasteners>=0.20',
178
178
  'mycdp>=1.4.0',
179
179
  'pynose>=1.5.5',
180
- 'platformdirs>=4.11.5',
180
+ 'platformdirs>=4.11.7',
181
181
  'typing-extensions>=4.16.0',
182
182
  'sbvirtualdisplay>=1.4.0',
183
183
  'MarkupSafe>=3.0.3',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes