Jarvis-Brain 0.1.8.4__tar.gz → 0.1.9.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.
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/PKG-INFO +1 -1
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/mcp_tools/dp_tools.py +41 -2
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/mcp_tools/main.py +1 -0
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/pyproject.toml +1 -1
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/tools/browser_proxy.py +1 -1
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/.gitignore +0 -0
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/README.md +0 -0
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/mcp_tools/__init__.py +0 -0
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/tools/__init__.py +0 -0
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/tools/browser_manager.py +0 -0
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/tools/tools.py +0 -0
- {jarvis_brain-0.1.8.4 → jarvis_brain-0.1.9.1}/uv.lock +0 -0
|
@@ -231,9 +231,9 @@ def register_click_action(mcp: FastMCP, browser_manager):
|
|
|
231
231
|
click_success = True
|
|
232
232
|
except Exception as e:
|
|
233
233
|
click_success = False
|
|
234
|
-
message = f"
|
|
234
|
+
message = f"tab页:【{tab_id}】点击【{css_selector}】 {'成功' if click_success else '失败'} 了"
|
|
235
235
|
else:
|
|
236
|
-
message = f"
|
|
236
|
+
message = f"tab页:【{tab_id}】传入的css_selector找到了{len(target_eles)}个元素,请确保传入的css_selector可以找到唯一的一个元素"
|
|
237
237
|
return dp_mcp_message_pack(
|
|
238
238
|
message=message,
|
|
239
239
|
browser_port=browser_port,
|
|
@@ -243,3 +243,42 @@ def register_click_action(mcp: FastMCP, browser_manager):
|
|
|
243
243
|
click_success=click_success,
|
|
244
244
|
extra_message="点击成功,页面可能有更新,请重新获取页面html,并重新分析页面Selector" if click_success else ""
|
|
245
245
|
)
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def register_scroll_action(mcp: FastMCP, browser_manager):
|
|
249
|
+
@mcp.tool(name="scroll_action", description="尝试滚动tab页"
|
|
250
|
+
"forward参数是滚动的方向:down、up、left、right"
|
|
251
|
+
"pixel参数是滚动的像素值,默认为None。"
|
|
252
|
+
"当forward为down且pixel为None,则将页面滚动到垂直中间位置,水平位置不变"
|
|
253
|
+
"当forward为up且pixel为None,则将页面滚动到顶部,水平位置不变"
|
|
254
|
+
"当forward为left且pixel为None,则将页面滚动到最左边,垂直位置不变"
|
|
255
|
+
"当forward为right且pixel为None,则将页面滚动到最右边,垂直位置不变")
|
|
256
|
+
async def scroll_action(browser_port: int, tab_id: str, forward: str = "down", pixel: int = None) -> dict[str, Any]:
|
|
257
|
+
_browser = browser_manager.get_browser(browser_port)
|
|
258
|
+
target_tab = _browser.get_tab(tab_id)
|
|
259
|
+
if forward == "down":
|
|
260
|
+
if pixel is None:
|
|
261
|
+
target_tab.scroll.to_half()
|
|
262
|
+
target_tab.scroll.down(pixel)
|
|
263
|
+
elif forward == "up":
|
|
264
|
+
if pixel is None:
|
|
265
|
+
target_tab.scroll.to_top()
|
|
266
|
+
target_tab.scroll.up(pixel)
|
|
267
|
+
elif forward == "left":
|
|
268
|
+
if pixel is None:
|
|
269
|
+
target_tab.scroll.to_leftmost()
|
|
270
|
+
target_tab.scroll.left(pixel)
|
|
271
|
+
elif forward == "right":
|
|
272
|
+
if pixel is None:
|
|
273
|
+
target_tab.scroll.to_rightmost()
|
|
274
|
+
target_tab.scroll.right(pixel)
|
|
275
|
+
else:
|
|
276
|
+
if pixel is None:
|
|
277
|
+
target_tab.scroll.to_half()
|
|
278
|
+
target_tab.scroll.down()
|
|
279
|
+
message = f"已完成对tab页:【{tab_id}】forward={forward} 的滑动"
|
|
280
|
+
return dp_mcp_message_pack(
|
|
281
|
+
message=message,
|
|
282
|
+
browser_port=browser_port,
|
|
283
|
+
tab_id=tab_id,
|
|
284
|
+
)
|
|
@@ -22,6 +22,7 @@ if "TeamNode-Dp" in enabled_modules:
|
|
|
22
22
|
register_pop_first_packet(mcp, browser_manager, client_manager)
|
|
23
23
|
# 页面交互
|
|
24
24
|
register_click_action(mcp, browser_manager)
|
|
25
|
+
register_scroll_action(mcp, browser_manager)
|
|
25
26
|
|
|
26
27
|
if "JarvisNode" in enabled_modules:
|
|
27
28
|
register_assert_waf(mcp, browser_manager)
|
|
@@ -29,7 +29,7 @@ class DPProxyClient:
|
|
|
29
29
|
:return:
|
|
30
30
|
"""
|
|
31
31
|
if start_listen:
|
|
32
|
-
self.driver.listen.set_targets(
|
|
32
|
+
self.driver.listen.set_targets(targets="api|jsonp|callback", is_regex=True, res_type=('xhr', 'fetch'))
|
|
33
33
|
self.driver.listen.start()
|
|
34
34
|
self.thread = threading.Thread(target=self.start_listen, args=(count, timeout,))
|
|
35
35
|
self.thread.start()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|