Skip to main content
Glama

DrissionPage MCP Browser Automation

by griifth
PROJECT_SUMMARY.md7.89 kB
# DrissionPage MCP 项目总结 ## 项目概述 基于 DrissionPage 构建的 MCP (Model Context Protocol) 浏览器自动化服务,为 AI 模型提供强大的网页自动化和数据抓取能力。 ## 核心特性 ✅ **21 个专业工具** - 3 个浏览器管理工具 - 10 个基础操作工具 - 2 个 Markdown 转换工具 - 6 个高级功能工具 ✅ **混合粒度设计** - 原子级操作:精细控制每个步骤 - 高级封装:常见任务一键完成 ✅ **核心功能:网页转 Markdown** - 智能提取主要内容 - 自动清理广告和无关元素 - 支持 markdownify 和 html2text 两种引擎 - 可添加元数据(标题、URL、时间等) ✅ **稳定可靠** - 浏览器单例管理,避免资源冲突 - 统一的错误处理机制 - 超时控制,防止无限等待 - 详细的日志记录 ## 技术架构 ``` drissionpage_mcp/ ├── server.py # MCP 服务器(约 800 行) ├── browser.py # 浏览器管理器(约 250 行) ├── tools/ │ ├── basic.py # 基础工具(约 800 行) │ ├── markdown.py # Markdown 工具(约 400 行) │ └── advanced.py # 高级工具(约 800 行) ├── test_example.py # 测试用例 ├── requirements.txt # 依赖管理 ├── README.md # 项目文档 ├── USAGE_GUIDE.md # 使用指南 ├── CHANGELOG.md # 更新日志 └── config_example.json # 配置示例 ``` **总代码量**:约 3,050 行 Python 代码 + 完整文档 ## 工具功能清单 ### 1. 浏览器管理(3 个工具) | 工具名 | 功能 | 关键参数 | |--------|------|----------| | `init_browser` | 初始化浏览器 | headless, window_size | | `get_browser_status` | 获取浏览器状态 | - | | `close_browser` | 关闭浏览器 | - | ### 2. 基础操作(10 个工具) | 工具名 | 功能 | 关键参数 | |--------|------|----------| | `navigate` | 导航到 URL | url, timeout | | `find_elements` | 查找元素 | selector, selector_type, single | | `click_element` | 点击元素 | selector, selector_type | | `input_text` | 输入文本 | selector, text, clear_first | | `get_element_text` | 获取文本 | selector | | `get_element_attribute` | 获取属性 | selector, attribute | | `wait_for_element` | 等待元素 | selector, timeout | | `scroll_page` | 滚动页面 | direction, amount | | `take_screenshot` | 截图 | file_path, full_page | | `execute_javascript` | 执行 JS | script | ### 3. Markdown 转换(2 个工具) | 工具名 | 功能 | 关键参数 | |--------|------|----------| | `page_to_markdown` | **保存为 Markdown** | file_path, extract_main, remove_ads | | `get_page_content` | 获取内容 | format, extract_main | ### 4. 高级功能(6 个工具) | 工具名 | 功能 | 关键参数 | |--------|------|----------| | `extract_table_data` | 提取表格 | selector, format, output_file | | `smart_extract` | 智能抓取 | selector, fields, limit | | `fill_form` | 填写表单 | fields, submit_selector | | `handle_infinite_scroll` | 处理懒加载 | max_scrolls, scroll_pause | | `manage_cookies` | Cookie 管理 | action, name, value | | `switch_to_tab` | Tab 管理 | action, url, index | ## 使用场景 ### 场景 1:新闻聚合 ``` 导航 → 等待加载 → 转换为 Markdown → 保存 ``` **工具链**:`init_browser` → `navigate` → `wait_for_element` → `page_to_markdown` → `close_browser` ### 场景 2:数据采集 ``` 导航 → 懒加载处理 → 智能提取 → 保存 JSON ``` **工具链**:`navigate` → `handle_infinite_scroll` → `smart_extract` ### 场景 3:自动化测试 ``` 导航 → 填写表单 → 提交 → 截图验证 ``` **工具链**:`navigate` → `fill_form` → `wait_for_element` → `take_screenshot` ### 场景 4:表格数据抓取 ``` 导航 → 查找表格 → 提取为 CSV/JSON ``` **工具链**:`navigate` → `extract_table_data` ## 技术亮点 1. **DrissionPage 深度集成** - 充分利用 DrissionPage 的强大功能 - 跨 iframe 查找、shadow-root 支持 - 内置的等待机制和自动重试 2. **智能 Markdown 转换** - 自动识别主要内容区域 - 清理广告和无关元素 - 支持多种转换引擎 - 格式化和优化输出 3. **MCP 协议标准实现** - 完整的工具声明(inputSchema) - 统一的返回格式 - 详细的错误处理 - 支持所有主流 MCP 客户端 4. **开发者友好** - 清晰的代码结构 - 完善的类型注解 - 详细的注释文档 - 易于扩展新功能 ## 依赖项 | 依赖 | 版本要求 | 用途 | |------|----------|------| | DrissionPage | >=4.0.0 | 浏览器自动化核心 | | mcp | >=0.9.0 | MCP 协议实现 | | markdownify | >=0.11.6 | HTML 转 Markdown | | html2text | >=2020.1.16 | HTML 转 Markdown(备选) | | beautifulsoup4 | >=4.12.0 | HTML 解析和清理 | | lxml | >=4.9.0 | 高性能 XML/HTML 解析 | ## 文档完备性 ✅ **README.md**:完整的项目介绍和快速开始指南 ✅ **USAGE_GUIDE.md**:详细的工具使用文档(每个工具都有说明) ✅ **CHANGELOG.md**:版本更新记录 ✅ **config_example.json**:MCP 客户端配置示例 ✅ **test_example.py**:9 个测试用例,覆盖主要功能 ✅ **.gitignore**:完整的 Python 项目忽略规则 ## 测试覆盖 编写了 9 个测试用例: 1. ✅ 浏览器生命周期测试 2. ✅ 导航功能测试 3. ✅ 元素操作测试 4. ✅ 页面转 Markdown 测试 5. ✅ 获取页面内容测试 6. ✅ 截图功能测试 7. ✅ 滚动功能测试 8. ✅ JavaScript 执行测试 9. ✅ 清理测试 ## 代码质量 ✅ **无 Linter 错误**:所有 Python 文件通过 linter 检查 ✅ **统一风格**:遵循 PEP 8 编码规范 ✅ **错误处理**:所有工具都有完善的异常处理 ✅ **日志记录**:使用标准 logging 模块 ✅ **类型提示**:关键函数都有类型注解 ## 性能特点 - **启动快**:浏览器单例,避免重复初始化 - **响应快**:DrissionPage 内核性能优秀 - **资源省**:单实例模式,内存占用低 - **可扩展**:支持多进程部署多个服务实例 ## 最佳实践示例 ### 批量文章采集 ```python 1. init_browser() 2. for url in article_urls: navigate(url) page_to_markdown(f"articles/{title}.md") 3. close_browser() ``` ### 表单批量提交 ```python 1. init_browser() 2. navigate(form_url) 3. for data in form_data_list: fill_form(fields=data, submit_selector="button") wait_for_element(".success-message") 4. close_browser() ``` ### 动态内容抓取 ```python 1. init_browser() 2. navigate(url) 3. handle_infinite_scroll(max_scrolls=20) 4. smart_extract(selector=".item", fields={...}) 5. close_browser() ``` ## 未来扩展方向 1. **多实例支持**:允许并发运行多个浏览器 2. **会话管理**:支持保存和恢复浏览器会话 3. **反爬虫策略**:集成常见的反检测技术 4. **模板库**:常见网站的登录和抓取模板 5. **性能监控**:添加详细的性能指标和监控 6. **PDF 支持**:支持导出为 PDF 格式 ## 总结 本项目成功实现了一个**功能完整、文档齐全、易于使用**的 DrissionPage MCP 服务器。 **核心优势**: - 🎯 混合粒度设计,适应不同复杂度需求 - 📄 强大的 Markdown 转换能力 - 🔧 21 个专业工具,覆盖常见场景 - 📚 完善的文档和示例 - 🚀 高性能、稳定可靠 **适用对象**: - AI 应用开发者 - 自动化测试工程师 - 数据采集从业者 - 研究人员和学生 **项目状态**:✅ 已完成,可投入使用 --- **开发完成时间**:2025-11-16 **版本**:v0.1.0 **总代码量**:3,050+ 行 **工具数量**:21 个 **文档页数**:约 600+ 行文档 🎉 **项目已全部完成!**

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/griifth/drissionpage-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server