Jarvis-Brain 0.1.12.3__tar.gz → 0.1.13.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Jarvis_Brain
3
- Version: 0.1.12.3
3
+ Version: 0.1.13.1
4
4
  Summary: Jarvis brain mcp
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: beautifulsoup4
@@ -248,22 +248,17 @@ def register_click_action(mcp: FastMCP, browser_manager):
248
248
  if "css:" not in css_selector:
249
249
  css_selector = "css:" + css_selector
250
250
  target_eles = target_tab.eles(css_selector)
251
- # click_success = False
252
- # element_clickable = False
253
- # if len(target_eles) == 1:
254
251
  target_element = target_eles[target_element_index]
255
252
  element_clickable = target_element.states.is_clickable
256
253
  try:
257
- target_element.click()
258
- click_success = True
254
+ click_success = target_element.click()
255
+ # click_success = True
259
256
  except Exception as e:
260
257
  click_success = False
261
258
  if target_element_index > 0:
262
259
  message = f"tab页:【{tab_id}】点击【{css_selector}】【index={target_element_index}】的元素 {'成功' if click_success else '失败'} 了"
263
260
  else:
264
261
  message = f"tab页:【{tab_id}】点击【{css_selector}】 {'成功' if click_success else '失败'} 了"
265
- # else:
266
- # message = f"tab页:【{tab_id}】传入的css_selector找到了{len(target_eles)}个元素,请确保传入的css_selector可以找到唯一的一个元素"
267
262
  return dp_mcp_message_pack(
268
263
  message=message,
269
264
  browser_port=browser_port,
@@ -352,6 +347,69 @@ def register_mouse_hover(mcp: FastMCP, browser_manager):
352
347
  )
353
348
 
354
349
 
350
+ def register_get_ele_info(mcp: FastMCP, browser_manager):
351
+ @mcp.tool(name="ele_is_clickable", description="返回元素有关一系列的信息。"
352
+ "参数说明:"
353
+ "browser_port:浏览器端口号。"
354
+ "tab_id:tab页的id。"
355
+ "css_selector:目标选择器"
356
+ "element_index:如果选择器定位到的是一个列表【或者可以定位到多个元素】,则该值用于定位这个列表中具体元素,默认值为0【列表中的第一个元素】"
357
+ "返回值说明:"
358
+ "element_tag:此属性返回元素的标签名。"
359
+ "element_attrs_key:此属性以list的形式返回元素所有属性的key。"
360
+ "element_child_count:此属性返回元素内第一级子元素个数。"
361
+ "element_rect_size:此属性以元组形式返回元素的大小。"
362
+ "is_in_viewport:此属性以布尔值方式返回元素是否在视口中,以元素可以接受点击的点为判断。"
363
+ "is_whole_in_viewport:此属性以布尔值方式返回元素是否整个在视口中。"
364
+ "is_alive:此属性以布尔值形式返回当前元素是否仍可用。用于判断是否因页面刷新而导致元素失效。"
365
+ "is_checked:此属性以布尔值返回表单单选或多选元素是否选中。"
366
+ "is_selected:此属性以布尔值返回<select>元素中的项是否选中。"
367
+ "is_enabled:此属性以布尔值返回元素是否可用。"
368
+ "is_displayed:此属性以布尔值返回元素是否可见。"
369
+ "is_covered:此属性返回元素是否被其它元素覆盖/遮挡。如被覆盖/遮挡,返回覆盖元素的 id【无障碍树的id,无法用于Selector】,否则返回False。"
370
+ "is_clickable:此属性返回元素是否可被模拟点击,从是否有大小、是否可用、是否显示、是否响应点击判断,不判断是否被遮挡。"
371
+ "has_rect:此属性返回元素是否拥有大小和位置信息,有则返回四个角在页面上的坐标组成的列表,没有则返回False。")
372
+ async def get_ele_info(browser_port: int, tab_id: str, css_selector: str, element_index: int = 0) -> dict[
373
+ str, Any]:
374
+ _browser = browser_manager.get_browser(browser_port)
375
+ target_tab = _browser.get_tab(tab_id)
376
+ css_selector = css_selector
377
+ if "css:" not in css_selector:
378
+ css_selector = "css:" + css_selector
379
+ target_eles = target_tab.eles(css_selector)
380
+ try:
381
+ target_element = target_eles[element_index]
382
+ except IndexError:
383
+ return dp_mcp_message_pack(
384
+ message="报错:IndexError: list index out of range。请检查Selector中是否包含了如:first-child、nth-child等字段,如果有则去掉。必须使用element_index来控制元素的选择",
385
+ browser_port=browser_port,
386
+ tab_id=tab_id,
387
+ css_selector=css_selector,
388
+ element_index=element_index,
389
+ )
390
+ return dp_mcp_message_pack(
391
+ message="元素可以被正常的选择到,以下是元素相关的一系列信息",
392
+ browser_port=browser_port,
393
+ tab_id=tab_id,
394
+ css_selector=css_selector,
395
+ element_index=element_index,
396
+ element_tag=target_element.tag,
397
+ element_attrs_key=list(target_element.attrs.keys()),
398
+ element_child_count=target_element.child_count,
399
+ element_rect_size=target_element.rect.size,
400
+ is_in_viewport=target_element.states.is_in_viewport,
401
+ is_whole_in_viewport=target_element.states.is_whole_in_viewport,
402
+ is_alive=target_element.states.is_alive,
403
+ is_checked=target_element.states.is_checked,
404
+ is_selected=target_element.states.is_selected,
405
+ is_enabled=target_element.states.is_enabled,
406
+ is_displayed=target_element.states.is_displayed,
407
+ is_covered=target_element.states.is_covered,
408
+ is_clickable=target_element.states.is_clickable,
409
+ has_rect=target_element.states.has_rect,
410
+ )
411
+
412
+
355
413
  def register_get_screenshot(mcp: FastMCP, browser_manager):
356
414
  @mcp.tool(name="get_tab_screenshot",
357
415
  description="尝试对传入tab页进行截图,并将截图压缩为1M大小png图片,会返回截图保存路径")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "Jarvis_Brain" # 别人下载时用的名字,必须在 PyPI 上唯一
3
- version = "0.1.12.3"
3
+ version = "0.1.13.1"
4
4
  description = "Jarvis brain mcp"
5
5
  dependencies = [
6
6
  "fastmcp",
File without changes