Jarvis-Brain 0.1.4.6__tar.gz → 0.1.5.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.
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/PKG-INFO +1 -1
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/mcp_tools/dp_tools.py +14 -4
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/mcp_tools/main.py +5 -3
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/pyproject.toml +1 -1
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/tools/browser_manager.py +5 -1
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/tools/tools.py +12 -1
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/.gitignore +0 -0
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/README.md +0 -0
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/mcp_tools/__init__.py +0 -0
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/tools/__init__.py +0 -0
- {jarvis_brain-0.1.4.6 → jarvis_brain-0.1.5.4}/uv.lock +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import os
|
|
2
3
|
from typing import Any
|
|
3
4
|
|
|
@@ -69,19 +70,28 @@ def register_close_tab(mcp: FastMCP, browser_manager):
|
|
|
69
70
|
|
|
70
71
|
|
|
71
72
|
def register_check_selector(mcp: FastMCP, browser_manager):
|
|
72
|
-
@mcp.tool(name="check_selector", description="查找tab
|
|
73
|
-
async def check_selector(browser_port: int, tab_id: str, css_selector: str) -> dict[str, Any]:
|
|
73
|
+
@mcp.tool(name="check_selector", description="查找tab页中是否包含元素,并返回元素attr_name所对应的值")
|
|
74
|
+
async def check_selector(browser_port: int, tab_id: str, css_selector: str, attr_name: str = "text") -> dict[str, Any]:
|
|
74
75
|
_browser = browser_manager.get_browser(browser_port)
|
|
75
76
|
target_tab = _browser.get_tab(tab_id)
|
|
76
77
|
css_selector = css_selector
|
|
77
78
|
if "css:" not in css_selector:
|
|
78
79
|
css_selector = "css:" + css_selector
|
|
79
|
-
|
|
80
|
+
target_eles = target_tab.eles(css_selector)
|
|
81
|
+
exist_flag = False
|
|
82
|
+
if len(target_eles) != 0:
|
|
83
|
+
exist_flag = True
|
|
84
|
+
if attr_name == "text":
|
|
85
|
+
ele_text_list = [i.text.replace("\n", "") for i in target_eles]
|
|
86
|
+
attr_output = "\n".join(ele_text_list)
|
|
87
|
+
else:
|
|
88
|
+
attr_output = json.dumps([i.attr(attr_name) for i in target_eles])
|
|
80
89
|
return dp_mcp_message_pack(
|
|
81
90
|
f"已完成tab页:【{tab_id}】对:【{css_selector}】的检查",
|
|
82
91
|
tab_id=tab_id,
|
|
83
92
|
selector=css_selector,
|
|
84
|
-
selector_ele_exist=
|
|
93
|
+
selector_ele_exist=exist_flag,
|
|
94
|
+
attr_output=attr_output
|
|
85
95
|
)
|
|
86
96
|
|
|
87
97
|
|
|
@@ -7,14 +7,16 @@ mcp = FastMCP("Jarvis Brain Mcp Tools")
|
|
|
7
7
|
|
|
8
8
|
# 根据环境变量加载模块
|
|
9
9
|
enabled_modules = os.getenv("MCP_MODULES", "TeamNode-Dp").split(",")
|
|
10
|
-
base_cwd = os.getenv("BASE_CWD", os.
|
|
10
|
+
base_cwd = os.getenv("BASE_CWD", os.path.expanduser('~'))
|
|
11
11
|
|
|
12
12
|
if "TeamNode-Dp" in enabled_modules:
|
|
13
|
-
|
|
13
|
+
# 页面管理
|
|
14
14
|
register_close_tab(mcp, browser_manager)
|
|
15
15
|
register_switch_tab(mcp, browser_manager)
|
|
16
|
-
register_get_html(mcp, browser_manager)
|
|
17
16
|
register_get_new_tab(mcp, browser_manager)
|
|
17
|
+
# 功能
|
|
18
|
+
register_visit_url(mcp, browser_manager)
|
|
19
|
+
register_get_html(mcp, browser_manager)
|
|
18
20
|
register_check_selector(mcp, browser_manager)
|
|
19
21
|
|
|
20
22
|
if "JarvisNode" in enabled_modules:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""浏览器池管理模块 - 单例模式确保状态共享"""
|
|
2
2
|
import random
|
|
3
3
|
from typing import Optional, Tuple
|
|
4
|
-
|
|
4
|
+
import os
|
|
5
5
|
from DrissionPage import ChromiumPage, ChromiumOptions
|
|
6
6
|
|
|
7
7
|
|
|
@@ -22,6 +22,10 @@ class BrowserManager:
|
|
|
22
22
|
random_port = random.randint(9223, 9934)
|
|
23
23
|
|
|
24
24
|
co = ChromiumOptions().set_local_port(random_port)
|
|
25
|
+
custom_data_dir = os.path.join(os.path.expanduser('~'), 'DrissionPage', "userData", f"{random_port}")
|
|
26
|
+
co.set_user_data_path(custom_data_dir) # 设置用户数据路径
|
|
27
|
+
# if not os.path.exists(custom_data_dir):
|
|
28
|
+
# os.makedirs(custom_data_dir)
|
|
25
29
|
self.browser_pool[random_port] = ChromiumPage(co)
|
|
26
30
|
return random_port, self.browser_pool[random_port]
|
|
27
31
|
|
|
@@ -21,8 +21,19 @@ def requests_html(url):
|
|
|
21
21
|
def dp_headless_html(url):
|
|
22
22
|
opt = ChromiumOptions().headless(True)
|
|
23
23
|
opt.set_argument('--no-sandbox')
|
|
24
|
+
"""创建新的浏览器实例"""
|
|
25
|
+
random_port = random.randint(9223, 9934)
|
|
26
|
+
while random_port in self.browser_pool:
|
|
27
|
+
random_port = random.randint(9223, 9934)
|
|
28
|
+
|
|
29
|
+
custom_data_dir = os.path.join(os.path.expanduser('~'), 'DrissionPage', "userData", f"{random_port}")
|
|
30
|
+
opt.set_user_data_path(custom_data_dir) # 设置用户数据路径
|
|
31
|
+
# if not os.path.exists(custom_data_dir):
|
|
32
|
+
# os.makedirs(custom_data_dir)
|
|
33
|
+
# self.browser_pool[random_port] = ChromiumPage(co)
|
|
24
34
|
# 随机端口,固定9222端口的话,可能会被瑞数检测到
|
|
25
|
-
opt.auto_port()
|
|
35
|
+
# opt.auto_port()
|
|
36
|
+
opt.set_local_port(random_port)
|
|
26
37
|
page = ChromiumPage(opt)
|
|
27
38
|
tab = page.latest_tab
|
|
28
39
|
tab.get(url)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|