使用说明
Drission页面优化MCP
更好的DrissionPage MCP服务器——涵盖了原始库的大部分功能、255个单元测试、100%的服务覆盖率、AI优化的工具调用和描述。
英语| 中文
为什么选择BetterMCP
| 更好的MCP | 注意 | |
|---|---|---|
| 55工具 | 涵盖浏览器、标签、导航、元素、表单、屏幕截图、网络、Cookie、存储、iframe、文件等 | 原始库的大部分功能,开箱即用 |
| 255个单元测试 | 17个测试模块+6个集成测试套件 | 100%的服务覆盖率,每次提交都可验证 |
| AI友好 | 清晰的工具描述、明确的参数语义、统一的响应结构 | LLM在第一次调用时就能理解——更少的重试,更少的令牌浪费 |
| 元素缓存 | element_find 返回a element_id 用于后续调用中的直接重用 |
无重复查找,更高效的交互 |
| 本机定位器语法 | #id .class @attr text: css: xpath: @@AND @|OR |
完整的DrissionPage语法支持 |
| 双重运输 | stdio + streamable-http |
适用于所有主要的AI编码工具 |
快速开始
先决条件
- Python>=3.10
- 紫外线
- Chrome/Chromium浏览器
安装
git clone https://github.com/pureTrue/DrissionPage-BetterMCP.git
cd DrissionPage-BetterMCP
uv sync
配置您的AI工具
克劳德代码
项目根目录 .mcp.json:
{
"mcpServers": {
"drissionpage": {
"command": "uv",
"args": ["run", "--directory", "/path/to/DrissionPage-BetterMCP", "dp-mcp"]
}
}
}
或者通过CLI:
claude mcp add drissionpage -- uv run --directory /path/to/DrissionPage-BetterMCP dp-mcp
光标
.cursor/mcp.json (项目层面)或 ~/.cursor/mcp.json (全球):
{
"mcpServers": {
"drissionpage": {
"command": "uv",
"args": ["run", "--directory", "/path/to/DrissionPage-BetterMCP", "dp-mcp"]
}
}
}
VS代码(副本)
.vscode/mcp.json:
{
"servers": {
"drissionpage": {
"command": "uv",
"args": ["run", "--directory", "/path/to/DrissionPage-BetterMCP", "dp-mcp"]
}
}
}
注:VS代码使用
servers作为顶级密钥,不是mcpServers.
法典
.codex/config.toml (项目层面)或 ~/.codex/config.toml (全球):
[mcp_servers.drissionpage]
command = "uv"
args = ["run", "--directory", "/path/to/DrissionPage-BetterMCP", "dp-mcp"]
或者通过CLI:
codex mcp add drissionpage -- uv run --directory /path/to/DrissionPage-BetterMCP dp-mcp
替换 /path/to/DrissionPage-BetterMCP 与实际项目路径。
环境变量
可选,前缀为 DP_MCP_:
| 变量 | 默认值 | 描述 |
|---|---|---|
DP_MCP_DEFAULT_TIMEOUT |
15.0 |
默认工具超时(秒) |
DP_MCP_LOG_LEVEL |
INFO |
日志记录级别 |
DP_MCP_NETWORK_CAPTURE_SIZE |
200 |
要捕获的最大网络数据包数 |
复制 .env.example 到 .env 并根据需要进行定制。
刀具清单
浏览器管理
| 工具 | 说明 |
|---|---|
browser_connect |
连接到现有的Chrome或启动新实例;支持无头、代理、user_agent |
browser_info |
获取浏览器状态:地址、标签计数、进程ID |
browser_quit |
关闭浏览器并释放所有资源 |
选项卡管理
| 工具 | 说明 |
|---|---|
tab_new |
打开一个新选项卡,可选择导航到URL |
tab_close |
关闭选项卡;默认为当前选项卡 |
tab_switch |
切换到特定选项卡 |
tab_list |
列出所有打开的选项卡 |
tab_find |
按标题和/或URL搜索选项卡 |
tab_info |
获取选项卡详细信息 |
页面导航
| 工具 | 说明 |
|---|---|
page_navigate |
导航到URL;返回最终URL和页面标题 |
page_back / page_forward |
在历史中前进或后退 |
page_refresh |
刷新页面;可选择忽略缓存 |
page_stop |
停止页面加载 |
元素交互
| 工具 | 说明 |
|---|---|
element_find |
找到一个元素;返回缓存的 element_id |
element_find_all |
查找所有匹配的元素 |
element_wait |
等待元素状态(存在/可见/隐藏/删除) |
element_click |
单击一个元素;支持左/右/中/双击 |
element_input |
在输入中键入文本;可选择先清除 |
element_clear |
清除输入字段 |
element_hover |
将鼠标悬停在元素上 |
element_drag |
拖动到目标元素或像素偏移处 |
element_get_text |
获取可见文本内容 |
element_get_attr |
获取HTML属性值 |
element_get_info |
获取完整详细信息:标签、文本、rect、attrs、HTML、状态 |
element_select |
在中选择一个选项 <select> 元素 |
element_get_options |
获取a的所有选项 <select> 元素 |
element_scroll_into_view |
滚动直到元素可见 |
截图
| 工具 | 说明 |
|---|---|
page_screenshot |
页面截图;支持全页面捕获 |
element_screenshot |
特定元素的截图 |
页面内容
| 工具 | 说明 |
|---|---|
page_get_text |
获取页面的纯文本 |
page_get_html |
获取HTML源代码 |
page_wait_load |
等待页面加载/URL更改/标题更改 |
page_scroll |
沿某个方向滚动页面 |
内嵌框架
| 工具 | 说明 |
|---|---|
frame_list |
列出所有iframe |
frame_switch |
切换到iframe |
frame_parent |
返回父帧 |
frame_main |
返回顶级页面 |
网络捕获
| 工具 | 说明 |
|---|---|
network_listen_start |
开始监听与URL模式匹配的请求 |
network_listen_wait |
等待并检索捕获的网络数据包 |
Cookie和存储
| 工具 | 说明 |
|---|---|
cookie_get_all |
获取所有Cookie;可选择按域筛选 |
cookie_set |
设置cookie |
cookie_remove |
删除cookie或全部清除 |
storage_get |
从本地存储/会话存储读取 |
storage_set |
写入本地存储/会话存储 |
键盘和对话框
| 工具 | 说明 |
|---|---|
keyboard_press |
按一个键或组合键(Enter、Ctrl+a等) |
keyboard_type |
连续键入文本 |
dialog_handle |
处理警报/确认/提示对话框 |
dialog_auto |
启用或禁用自动对话框处理 |
高级
| 工具 | 说明 |
|---|---|
action_chain |
执行动作序列:移动、单击、拖动、键入、等待 |
js_execute |
在页面上执行JavaScript |
cdp_execute |
执行原始Chrome DevTools协议命令 |
文件操作
| 工具 | 说明 |
|---|---|
file_upload |
上传文件;支持隐藏输入 |
file_download |
通过URL下载文件或点击触发器 |
page_save |
将页面另存为PDF或MHTML |
开发者指南
项目结构
src/dp_mcp/
├── server.py # MCP server — 55 tool definitions
├── config.py # Settings (pydantic-settings)
├── models.py # ToolResult, BrowserInfo, TabInfo, etc.
├── core/ # Core services
│ ├── browser.py # Browser lifecycle
│ ├── tab.py # Multi-tab management
│ ├── navigation.py # Page navigation
│ └── element.py # Element finding & interaction
├── services/ # Domain services
│ ├── screenshot.py # Screenshots
│ ├── frame.py # Iframes
│ ├── scroll.py # Scrolling
│ ├── network.py # Network capture
│ ├── cookie.py # Cookies
│ ├── action.py # Action chains
│ ├── dialog.py # Dialogs
│ ├── cdp.py # CDP
│ └── file.py # File operations
└── utils/
└── locator.py # Locator parser + element cache
运行测试
# Unit tests (no browser needed)
uv run pytest tests/unit -v
# Integration tests (requires Chrome)
uv run pytest tests/integration -v -m integration
# All tests
uv run pytest -v
定位器语法
支持完整的DrissionPage定位器语法:
| 语法 | 示例 | 描述 |
|---|---|---|
#id |
#login-btn |
按ID |
.class |
.submit |
按类名 |
@attr=val |
@name=email |
按属性 |
text:str |
text:Login |
按可见文本 |
tag:name |
tag:input |
按标签名称 |
css:selector |
css:div.card>h2 |
CSS选择器 |
xpath:expr |
xpath://div[@id='app'] |
XPath |
@@a@@b |
@@class=btn@@text()=OK |
和条件 |
@|a@|b |
@|class=btn@|class=link |
OR条件 |
使用可选 by 要消除歧义的参数: css, xpath, text, id, class, attr.
贡献
欢迎提交请求和问题。
- 复刻此仓库
- 创建要素分支:
git checkout -b feature/my-feature - 提交您的更改:
git commit -m "feat: add my feature" - 按下分支:
git push origin feature/my-feature - 打开拉取请求
请确保在提交之前通过所有测试:
uv run pytest tests/unit -v
许可证
此项目的代码已获得许可 BSD 3-条款.
备注:该项目取决于 驱动页面,它使用禁止未经授权的商业使用的自定义非商业许可。用户必须独立遵守DrissionPage的许可条款。
