← 返回目录
D

DrissionPage MCP Server

社区
基于 DrissionPage 的本地浏览器自动化 MCP 服务器
GitHub 源仓库 ↗
★ 488 Stars 分类 · 浏览器自动化 非常热门
64FMRS · C

这是一款社区维护的本地浏览器自动化 MCP 服务器,由 DrissionPage 驱动,通过 stdio 提供 69 个带类型的原子工具,覆盖导航、标签页、元素交互、截图、帧与 Shadow DOM、Cookie 与存储、网络观测、等待与控制台日志等能力。它强调结构化优先、视觉为辅,提供 direct 与确定性 natural 两种指针轨迹,并默认对 URL、凭据、请求头、Cookie、网络正文等做脱敏。工具均为默认加载,没有提示词,只有一个静态的可选 Skills 目录资源。项目处于 beta 阶段,许可证为 Apache 2.0,非上游官方项目;真实行为依赖本地 Chrome/Chromium 与目标站点,使用前建议用独立浏览器配置并自行验证结果。

可靠性
11/20
安全与权限
12/20
维护活跃度
12/20
文档质量
15/20
安装易用性
14/20
查看 FMRS 评分方法 →

DrissionPage MCP Server 是一个本地运行的 Model Context Protocol 服务器,将 DrissionPage 的浏览器自动化能力以 69 个带类型的原子工具形式暴露给 Codex CLI/IDE、Claude Code、Claude Desktop、Cursor 等 MCP 客户端。它通过 stdio 传输启动,基于 PyPI 包 drissionpage-mcp 安装,需要本机 Chrome 或 Chromium 与 Python 3.10+。设计上坚持「结构化优先、视觉为辅」:有可靠选择器时用 DOM 结构操作,只有画布、地图、图表等纯视觉界面才使用坐标配合 direct 或确定性的 natural 指针轨迹。服务器只负责精确执行被请求的浏览器操作,站点流程、组件库适配、挑战应对等业务策略由客户端或可选 Skills 承担;不含 MCP prompts,仅提供一个静态的可选 Skills 目录资源。项目处于 beta 阶段,许可证为 Apache 2.0,由社区作者维护,并非上游产品官方项目。

工具能力

page_navigate
导航到任意 URL,可指定已有 tab_id,或用 new_tab=true 配合 background、new_window、new_context;observe 返回变更摘要
page_navigate_with_http_auth
在专用的一次性 Chromium 上下文中通过限定范围的 HTTP 认证挑战完成导航,不返回凭据
page_go_back
在浏览器历史中后退
page_go_forward
在浏览器历史中前进
page_refresh
重新加载当前页面
tab_list
列出已打开的浏览器标签页及稳定的 MCP tab ID
tab_switch
切换到 tab_list 返回的标签页
tab_close
先拒绝新任务、排空进行中的操作,再关闭单个标签页而不关闭整个浏览器
element_find
用 CSS 选择器或 XPath 查找单个元素;h1 这类裸选择器按 CSS 处理
element_find_all
提取有数量上限的重复元素,含文本、属性和推荐选择器
element_click
点击任意元素,支持左/右/中键与单击/双击语义
element_click_and_download
把一次选择器、坐标或键盘触发与 DP_MCP_DOWNLOAD_ROOT 下一个完整性校验过的产物关联起来
element_type
向元素输入文本
element_upload_file
用 element_upload_file(paths=[...]) 从 DP_MCP_UPLOAD_ROOT 上传文件到 input[type=file]
element_click_and_upload
预备 Chromium 文件选择器、点击触发元素、注入已批准文件并清理拦截,不弹出操作系统选择框
element_scroll_into_view
操作前将元素滚动到视口内
element_hover
悬停元素以触发菜单或提示状态
element_select
按值、文本或索引选择选项
element_check
勾选或取消勾选复选框/单选按钮
element_get_text
获取元素或页面文本
element_get_attribute
获取 HTML 属性
element_get_property
获取实时 DOM 属性,例如输入框的值
element_get_html
获取元素或页面的 HTML
element_state_get
读取单个元素的实时 DrissionPage 状态标志以及文档/视口几何信息
page_screenshot
截取内联的整页或视口截图
page_screenshot_save
在 DP_MCP_SCREENSHOT_ROOT 下保存截图
page_export_artifact
在 DP_MCP_ARTIFACT_ROOT 下生成受管理的 PDF 或 MHTML 产物,并附 SHA-256 与回执证据
page_snapshot
返回有上限的页面大纲,包含标题、链接、按钮、输入、表单和选择器建议
page_accessibility_snapshot
返回页面或指定元素的有限 Chromium 无障碍树,除非显式请求否则字段值会被脱敏
page_observe
返回紧凑的页面指纹,含 URL、标题、计数、可见文本样本、活动元素和最近控制台摘要
page_evaluate
在当前页面执行受限 JavaScript 并返回 JSON 安全的结果
page_scroll
用 page_scroll(pixels=...) 做相对滚动,或传 x/y 指定绝对位置
keyboard_press
向活动元素或页面发送按键,结果中不回显输入内容
page_resize
调整浏览器窗口
page_pointer_move
以 direct 或确定性的 natural 轨迹移动到视口 CSS 精确坐标
page_pointer_drag
按选定轨迹执行一次失败安全的坐标拖拽,可经过最多六个有序路径点
page_pointer_drag_element
拖拽前即时解析源与目标几何;支持顶层文档或单个同源 iframe 中的 CSS/XPath,也可用 CSS 路径穿过嵌套的开放 Shadow DOM 宿主
page_click_xy
以 direct 或 natural 轨迹移动,可选择等待显式延时,然后在精确目标处按下并释放
page_close
关闭浏览器
page_get_url
获取当前 URL
page_dialog_observe
等待并查看待处理的原生 alert、confirm 或 prompt,但不处理它
page_dialog_respond
用 page_dialog_respond(action="accept")(或 "dismiss")处理一个待处理的 alert、confirm 或 prompt
frame_list
列出 iframe/frame 上下文,不改变全局 frame 状态
frame_snapshot
用 frame_snapshot(frame_selector="...") 或 frame_index 以有限大纲数据检查单个 iframe
frame_find
在选定的 iframe 内查找元素
shadow_find
在当前支持的 DrissionPage 运行时暴露的 shadow root 内查找单个元素,包括已验证的闭合根
shadow_find_all
从 DrissionPage 暴露的 shadow root 中提取重复元素
browser_headers_set
替换额外请求头并返回脱敏后的名称;空对象表示清除
browser_user_agent_set
覆盖 user agent 与可选平台,返回被接受和先前的 user agent
browser_cache_clear
清理 HTTP 缓存,同时保留 Cookies、localStorage 与 sessionStorage
browser_permission_get
查询当前文档来源的某项浏览器权限,且不弹出操作系统提示
browser_permission_set
用 browser_permission_set(setting="granted")(或 "denied"/"prompt")为精确来源或当前 Chromium 上下文设置权限
browser_permissions_reset
重置当前 Chromium 上下文的权限覆盖
browser_cookies_get
读取规范化后的 Cookie,默认对值脱敏
browser_cookies_set
一次最多设置 100 个 Cookie,返回被接受的元数据且值已脱敏
browser_cookies_delete
按名称删除单个 Cookie,可附带 URL/域名/路径范围
browser_cookies_clear
清除所有浏览器 Cookie
storage_get
按键或按映射读取 localStorage/sessionStorage,除非 include_values=true 否则值被脱敏
storage_set
设置一条 localStorage/sessionStorage 数据且不回显该值
storage_clear
清除单个存储键或整个存储区域
page_console_logs
读取有上限的浏览器控制台消息,支持级别过滤、游标分页和条数限制
wait_for_element
等待元素出现(带超时)
wait_for_url
用 wait_for_url(url_pattern="...") 等到当前 URL 包含指定文本
wait_until
用 wait_until(condition="text_contains", value="...") 或其他文档化的条件/值组合等待
wait_time
延迟执行
network_listen_start
通过 DrissionPage 启动有上限的 HTTP/XHR/Fetch 观测
network_listen_wait
等待有上限的数据包元数据,可选返回脱敏的请求头或正文片段
network_listen_stop
停止观测,可选择清空已排队的数据包
network_blocked_urls_set
用 network_blocked_urls_set(urls=[...]) 替换被拦截的 URL 模式;空列表表示清除

安装接入

  1. 安装或更新客户端(例如 macOS/Linux 上安装 Codex CLI:curl -fsSL https://chatgpt.com/codex/install.sh | sh)。2. 执行 python -m pip install -U "drissionpage-mcp>=0.8.8" 从 PyPI 安装。3. 运行 drissionpage-mcp --version 与 drissionpage-mcp doctor 验证包与环境,doctor 应报告 mcp_supported 和 mcp_server_wiring 均为 ok,需要时可加 --launch-browser 检查浏览器启动。4. 配置客户端:Codex 在 ~/.codex/config.toml(或项目内 .codex/config.toml)加入 [mcp_servers.drissionpage] command = "drissionpage-mcp"、startup_timeout_sec = 20、tool_timeout_sec = 60;JSON 客户端(Claude Code、Cursor、Claude Desktop)在对应配置文件中加入 {"mcpServers": {"drissionpage": {"command": "drissionpage-mcp"}}}。5. 重启客户端:Codex 中用 /mcp 或 codex mcp list 检查;GUI 启动的客户端若看不到 PATH 或虚拟环境,可将 command 改为绝对 Python 路径并加 args = ["-m", "drissionpage_mcp.cli"]。
claude_desktop_config.json
{
  "mcpServers": {
    "drissionpage": {
      "command": "drissionpage-mcp"
    }
  }
}

选型与风险

适合谁

  • 已经在使用 Codex CLI/IDE、Claude Code、Claude Desktop 或 Cursor 等 MCP 客户端并希望在本地驱动浏览器的开发者
  • 需要既可基于 DOM 选择器、又可在视觉界面用坐标操作的自动化场景
  • 希望使用 TypeScript/JSON 之外、基于 Python 3.10+ 与本地 Chrome/Chromium 的轻量浏览器自动化方案
  • 需要本地运行、无需外部 API 凭据的自动化与可访问性工作流

不适合谁

  • 期望服务器内置站点专属流程、组件库适配或验证码应对逻辑的用户(这些属于客户端或可选 Skills)
  • 无法安装 Chrome/Chromium 或不具备 Python 3.10+ 环境的场景
  • 需要云端托管浏览器或远程执行环境的用户
  • 需要官方厂商支持或 SLA 的生产关键场景

所需权限

  • 本地浏览器控制:打开标签页、导航到任意可达网址、执行受限 JavaScript
  • 读取与写入浏览器 Cookie、localStorage、sessionStorage
  • 读取与修改请求头、user agent、HTTP 缓存、浏览器权限
  • 文件上传与下载(受 DP_MCP_UPLOAD_ROOT、DP_MCP_DOWNLOAD_ROOT 约束),截图与 PDF/MHTML 产物写入(受 DP_MCP_SCREENSHOT_ROOT、DP_MCP_ARTIFACT_ROOT 约束)
  • 访问本地浏览器中已登录的会话与页面内容

风险与副作用

  • 使用的本地浏览器可能带有已登录会话、Cookie、下载内容与页面数据,误操作可能影响真实账号或生产系统
  • 可打开并交互本机可达的任意站点,存在越权或违反站点条款的风险
  • 坐标式交互依赖模型对截图坐标的判断,可能点错位置,务必先观察再验证结果
  • 下载、上传、导出产物会写入本地文件系统,需注意目录与内容边界
  • DP_NO_SANDBOX=1 会关闭 Chrome 沙箱,仅应保留给受限容器或 root 环境
  • 项目为 beta 状态,真实浏览器行为依赖本地 Chrome/Chromium 与目标站点

常见排障

  1. 工具未加载时先运行 drissionpage-mcp --version 确认版本输出,例如 drissionpage-mcp 0.8.8
  2. 运行 drissionpage-mcp doctor,确认 mcp_supported 与 mcp_server_wiring 均为 ok;仅版本输出不能证明客户端可初始化服务器
  3. 浏览器问题:在 Linux 用 which google-chrome、macOS 用 which chromium 检查安装;必要时用 CHROME_PATH 指定路径,DP_HEADLESS=1 以无头模式运行
  4. Codex 未找到服务器时运行 codex mcp list,或在 TUI 中执行 /mcp;JSON 客户端检查配置路径与 JSON 语法,并重启客户端
  5. GUI 启动的客户端看不到 shell PATH 或虚拟环境时,改用绝对 Python 可执行文件并传入 ["-m", "drissionpage_mcp.cli"]
  6. 需要调试日志时使用 drissionpage-mcp --log-level DEBUG,并参考 docs/troubleshooting.md
  7. 验证安装与场景可用性:python -m pytest tests/ 或 DP_HEADLESS=1 python playground/run_mcp_lab.py --all --json

使用场景

自动化测试 Web 应用
抓取网站结构化数据
填写并提交表单
监控页面更新或变化
截图并验证页面状态
以编程方式分析网页内容
对画布、地图、图表等纯视觉界面进行坐标交互

支持客户端

Claude Desktop完整支持
Claude Code完整支持
Cursor完整支持
Codex CLI/IDE完整支持
VS Code部分支持