Jarvis-Brain 0.1.4__py3-none-any.whl → 0.1.5.2__py3-none-any.whl
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.dist-info → jarvis_brain-0.1.5.2.dist-info}/METADATA +3 -5
- jarvis_brain-0.1.5.2.dist-info/RECORD +10 -0
- mcp_tools/dp_tools.py +21 -24
- mcp_tools/main.py +6 -5
- tools/browser_manager.py +7 -1
- tools/tools.py +4 -19
- jarvis_brain-0.1.4.dist-info/RECORD +0 -10
- {jarvis_brain-0.1.4.dist-info → jarvis_brain-0.1.5.2.dist-info}/WHEEL +0 -0
- {jarvis_brain-0.1.4.dist-info → jarvis_brain-0.1.5.2.dist-info}/entry_points.txt +0 -0
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Jarvis_Brain
|
|
3
|
-
Version: 0.1.
|
|
4
|
-
Summary: Jarvis brain
|
|
3
|
+
Version: 0.1.5.2
|
|
4
|
+
Summary: Jarvis brain mcp
|
|
5
5
|
Requires-Python: >=3.10
|
|
6
6
|
Requires-Dist: beautifulsoup4
|
|
7
7
|
Requires-Dist: curl-cffi
|
|
8
8
|
Requires-Dist: drissionpage
|
|
9
9
|
Requires-Dist: fastmcp
|
|
10
|
-
Requires-Dist:
|
|
11
|
-
Requires-Dist: jieba
|
|
12
|
-
Requires-Dist: simhash
|
|
10
|
+
Requires-Dist: minify-html
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
mcp_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
mcp_tools/dp_tools.py,sha256=TsktupVxzQkDRH4w-niEqJba3LkeWxIeyyx24ehpqAs,8411
|
|
3
|
+
mcp_tools/main.py,sha256=ockDfiMWaNroXf6sJ9dk-jU-_SvoGgP-0t-TbW2XWyw,827
|
|
4
|
+
tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
tools/browser_manager.py,sha256=G0nUQSmMVWzS08IjO87reEyMCpy-IiM3BxwdNUvcmdI,1740
|
|
6
|
+
tools/tools.py,sha256=qPa80xzQWCD8mSdg8isCgyei0XN8a7guGtR2J_MbQDU,4481
|
|
7
|
+
jarvis_brain-0.1.5.2.dist-info/METADATA,sha256=s5BNa9hKn38Tk0_S8iGPpDxwZ7h-x2NO1iXLtV8kRzM,241
|
|
8
|
+
jarvis_brain-0.1.5.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
9
|
+
jarvis_brain-0.1.5.2.dist-info/entry_points.txt,sha256=YFQT4xpkUqt5dM5wlKPQQOqcjMuFrT9iuRAzIpAyH7U,51
|
|
10
|
+
jarvis_brain-0.1.5.2.dist-info/RECORD,,
|
mcp_tools/dp_tools.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import os
|
|
2
3
|
from typing import Any
|
|
3
4
|
|
|
@@ -5,8 +6,6 @@ from DrissionPage._elements.none_element import NoneElement
|
|
|
5
6
|
from fastmcp import FastMCP
|
|
6
7
|
|
|
7
8
|
from tools.tools import compress_html, requests_html, dp_headless_html, assert_waf_cookie, dp_mcp_message_pack
|
|
8
|
-
import psutil
|
|
9
|
-
from pathlib import Path
|
|
10
9
|
|
|
11
10
|
html_source_code_local_save_path = os.path.join(os.getcwd(), "html-source-code")
|
|
12
11
|
waf_status_code_dict = {
|
|
@@ -71,19 +70,28 @@ def register_close_tab(mcp: FastMCP, browser_manager):
|
|
|
71
70
|
|
|
72
71
|
|
|
73
72
|
def register_check_selector(mcp: FastMCP, browser_manager):
|
|
74
|
-
@mcp.tool(name="check_selector", description="查找tab
|
|
75
|
-
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]:
|
|
76
75
|
_browser = browser_manager.get_browser(browser_port)
|
|
77
76
|
target_tab = _browser.get_tab(tab_id)
|
|
78
77
|
css_selector = css_selector
|
|
79
78
|
if "css:" not in css_selector:
|
|
80
79
|
css_selector = "css:" + css_selector
|
|
81
|
-
|
|
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])
|
|
82
89
|
return dp_mcp_message_pack(
|
|
83
90
|
f"已完成tab页:【{tab_id}】对:【{css_selector}】的检查",
|
|
84
91
|
tab_id=tab_id,
|
|
85
92
|
selector=css_selector,
|
|
86
|
-
selector_ele_exist=
|
|
93
|
+
selector_ele_exist=exist_flag,
|
|
94
|
+
attr_output=attr_output
|
|
87
95
|
)
|
|
88
96
|
|
|
89
97
|
|
|
@@ -149,21 +157,10 @@ def register_assert_waf(mcp: FastMCP, browser_manager):
|
|
|
149
157
|
head_headless_rate_difference=h_hless_rate_diff
|
|
150
158
|
)
|
|
151
159
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
tab.ele
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
def register_test(mcp: FastMCP, cwd: str):
|
|
163
|
-
@mcp.tool(name="test", description="用户说要进行测试时调用这个函数")
|
|
164
|
-
async def test() -> dict[str, Any]:
|
|
165
|
-
test_project = "获取根目录"
|
|
166
|
-
return dp_mcp_message_pack(
|
|
167
|
-
f"当前测试项目是:{test_project}",
|
|
168
|
-
result=cwd
|
|
169
|
-
)
|
|
160
|
+
# def register_highlight_element_captcha(mcp: FastMCP, browser_manager):
|
|
161
|
+
# @mcp.tool(name="highlight_element_captcha",
|
|
162
|
+
# description="将传入的Selector在页面上高亮,并截屏")
|
|
163
|
+
# async def highlight_element_captcha(browser_port: int, tab_id: str, selector: str) -> dict[str, Any]:
|
|
164
|
+
# _browser = browser_manager.get_browser(browser_port)
|
|
165
|
+
# tab = _browser.get_tab(tab_id)
|
|
166
|
+
# tab.ele
|
mcp_tools/main.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# main.py
|
|
2
|
-
from mcp_tools.dp_tools import *
|
|
3
1
|
from fastmcp import FastMCP
|
|
2
|
+
|
|
3
|
+
from mcp_tools.dp_tools import *
|
|
4
4
|
from tools.browser_manager import browser_manager
|
|
5
5
|
|
|
6
6
|
mcp = FastMCP("Jarvis Brain Mcp Tools")
|
|
@@ -10,16 +10,17 @@ enabled_modules = os.getenv("MCP_MODULES", "TeamNode-Dp").split(",")
|
|
|
10
10
|
base_cwd = os.getenv("BASE_CWD", os.environ.get("PWD"))
|
|
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:
|
|
21
23
|
register_assert_waf(mcp, browser_manager)
|
|
22
|
-
register_test(mcp, base_cwd)
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
def main():
|
tools/browser_manager.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"""浏览器池管理模块 - 单例模式确保状态共享"""
|
|
2
2
|
import random
|
|
3
|
-
from DrissionPage import ChromiumPage, ChromiumOptions
|
|
4
3
|
from typing import Optional, Tuple
|
|
4
|
+
import os
|
|
5
|
+
from DrissionPage import ChromiumPage, ChromiumOptions
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class BrowserManager:
|
|
@@ -21,6 +22,11 @@ class BrowserManager:
|
|
|
21
22
|
random_port = random.randint(9223, 9934)
|
|
22
23
|
|
|
23
24
|
co = ChromiumOptions().set_local_port(random_port)
|
|
25
|
+
custom_data_dir = os.path.join(os.path.expanduser('~'), 'DrissionPage', "userData", f"{random_port}")
|
|
26
|
+
|
|
27
|
+
# 2. 配置浏览器选项,指定该目录
|
|
28
|
+
# co = ChromiumOptions()
|
|
29
|
+
co.set_user_data_path(custom_data_dir) # 设置用户数据路径
|
|
24
30
|
self.browser_pool[random_port] = ChromiumPage(co)
|
|
25
31
|
return random_port, self.browser_pool[random_port]
|
|
26
32
|
|
tools/tools.py
CHANGED
|
@@ -1,23 +1,10 @@
|
|
|
1
1
|
import time
|
|
2
|
-
import json
|
|
3
2
|
|
|
4
|
-
import
|
|
3
|
+
import minify_html
|
|
4
|
+
from DrissionPage import ChromiumPage, ChromiumOptions
|
|
5
|
+
from bs4 import BeautifulSoup
|
|
5
6
|
from curl_cffi import requests
|
|
6
7
|
from lxml import html, etree
|
|
7
|
-
from bs4 import BeautifulSoup
|
|
8
|
-
from DrissionPage import ChromiumPage, ChromiumOptions
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
# 传入requests的set-cookie的str,返回一个cookie dict
|
|
12
|
-
def cookie_str2dict(cookie_str: str):
|
|
13
|
-
if cookie_str == "":
|
|
14
|
-
return {}
|
|
15
|
-
cookie_dict = {}
|
|
16
|
-
cookie_list = [cookie.split(";")[0] for cookie in cookie_str.split("HttpOnly,")]
|
|
17
|
-
for cookie in cookie_list:
|
|
18
|
-
key, value = cookie.split("=")
|
|
19
|
-
cookie_dict[key] = value
|
|
20
|
-
return cookie_dict
|
|
21
8
|
|
|
22
9
|
|
|
23
10
|
# 使用requests获取html,用于测试是否使用了瑞数和jsl
|
|
@@ -26,8 +13,6 @@ def requests_html(url):
|
|
|
26
13
|
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
|
|
27
14
|
}
|
|
28
15
|
response = requests.get(url, headers=headers, verify=False)
|
|
29
|
-
# print("response headers=> ", type(response.headers.get("Set-Cookie")),
|
|
30
|
-
# cookie_str2dict(response.headers.get("Set-Cookie", "")))
|
|
31
16
|
response.encoding = "utf-8"
|
|
32
17
|
return response.text, response.status_code
|
|
33
18
|
|
|
@@ -75,7 +60,7 @@ def compress_html(content, only_text=False):
|
|
|
75
60
|
element.attrib.pop(attr)
|
|
76
61
|
|
|
77
62
|
result = etree.tostring(doc, encoding='unicode')
|
|
78
|
-
result =
|
|
63
|
+
result = minify_html.minify(result)
|
|
79
64
|
compress_rate = round(len(content) / len(result) * 100)
|
|
80
65
|
print(f"html压缩比=> {compress_rate}%")
|
|
81
66
|
if not only_text:
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
mcp_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
mcp_tools/dp_tools.py,sha256=PwLd1zTFIQ673-cZjdON4TfU854_h5BgLPOVRbt_kVw,8349
|
|
3
|
-
mcp_tools/main.py,sha256=WO9kNpIORRrIOAWW8jiAd3gNW6rFMExln8y4CquKrM8,837
|
|
4
|
-
tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
tools/browser_manager.py,sha256=AM9hIQKtgMVxIZsEPxfHj9q41ZtzHrOS69wtgGBE3-Q,1458
|
|
6
|
-
tools/tools.py,sha256=3vTMCT_h0eDPtOMHc2KnhNVpQBUs6jgIChutBZZFMK4,5008
|
|
7
|
-
jarvis_brain-0.1.4.dist-info/METADATA,sha256=CPa_sjNrcHRhHvOXryp09mbbgIW3EY0AP_fT0PKCoNM,275
|
|
8
|
-
jarvis_brain-0.1.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
9
|
-
jarvis_brain-0.1.4.dist-info/entry_points.txt,sha256=YFQT4xpkUqt5dM5wlKPQQOqcjMuFrT9iuRAzIpAyH7U,51
|
|
10
|
-
jarvis_brain-0.1.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|