mcpField
B
Browsegrab

Browsegrab

本地服务
github.com/QuartzUnit浏览器自动化028 周前更新

关于 Browsegrab

Browsegrab 是面向本地 LLM 的浏览器自动化库,适用于构建网页操作 Agent 的开发者。它结合 Playwright 可访问性树与 MarkGrab 内容提取,并提供 MCP 服务、CLI 和 Python API。

主要功能

  1. 01基于可访问性树定位元素
  2. 02使用 MarkGrab 提取网页内容
  3. 03提供 8 种浏览器自动化工具
  4. 04缓存成功流程以复用操作
  5. 05解析本地 LLM 的操作输出

适用场景

  1. 01让本地 LLM 浏览并操作网页
  2. 02提取网页的 Markdown 内容
  3. 03通过 MCP 客户端执行浏览器操作

MCP 相关

Browsegrab 内置 MCP 服务,向 MCP 客户端提供导航、点击、输入、快照、滚动、内容提取、返回和等待等 8 种浏览器工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"arknill-browsegrab": {
"command": "uvx",
"args": [
"browsegrab"
]
}
}
}
启动命令uvx browsegrab

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypibrowsegrab0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

browsegrab

한국어 문서 · llms.txt

面向本地大模型的高效浏览器 Agent — Playwright + 无障碍树 + MarkGrab,原生支持 MCP。

browsegrab 是一款轻量级浏览器自动化库,专为本地大模型(8B-35B 参数)设计。它结合了 Playwright 的无障碍树与 MarkGrab 的 HTML 转 Markdown 功能,与 browser-use 等替代方案相比,每个步骤的 Token 用量减少 5-8 倍。

功能

  • 高效使用 Token:约 500-1,500 个 Token/步骤(browser-use 约为 4,000-10,000)
  • 优先支持本地大模型:针对 vLLM、Ollama 和兼容 OpenAI 的端点进行优化
  • 原生支持 MCP:内置 MCP 服务,包含 8 个浏览器自动化工具
  • 集成 MarkGrab:将 HTML 转换为简洁的 Markdown,以提取内容
  • 无障碍树 + 引用系统:无需视觉模型即可获得稳定的元素引用(e1、e2……)
  • 成功模式缓存:重复工作流无需调用大模型
  • 5 阶段 JSON 解析器:稳健解析本地大模型输出的操作
  • 依赖精简:核心部分仅依赖 playwright + httpx

安装

pip install browsegrab
playwright install chromium

安装可选功能:

pip install browsegrab[mcp]      # MCP server support
pip install browsegrab[content]  # MarkGrab content extraction
pip install browsegrab[cli]      # CLI with rich output
pip install browsegrab[all]      # Everything

快速开始

Python API
from browsegrab import BrowseSession

async with BrowseSession() as session:
    # Navigate and get accessibility tree snapshot
    await session.navigate("https://example.com")
    snap = await session.snapshot()
    print(snap.tree_text)
    # - heading "Example Domain" [level=1]
    # - link "Learn more": [ref=e1]

    # Click using ref ID
    result = await session.click("e1")
    print(result.url)  # https://www.iana.org/help/example-domains

    # Type into search box
    await session.navigate("https://en.wikipedia.org")
    snap = await session.snapshot()
    await session.type("e4", "Python programming", submit=True)

    # Extract compressed content (AX tree + markdown)
    content = await session.extract_content()
CLI
# Accessibility tree snapshot
browsegrab snapshot https://example.com

# JSON output
browsegrab snapshot https://example.com -f json

# Extract content (AX tree + markdown)
browsegrab extract https://en.wikipedia.org/wiki/Python

# Agentic browse (requires LLM endpoint)
browsegrab browse https://example.com "Find the about page"
MCP 服务
browsegrab-mcp  # Start MCP server (stdio)

Claude Desktop / Cursor / VS Code 配置:

{
  "mcpServers": {
    "browsegrab": {
      "command": "browsegrab-mcp"
    }
  }
}

8 个 MCP 工具:browser_navigate、browser_click、browser_type、browser_snapshot、browser_scroll、browser_extract_content、browser_go_back、browser_wait

工作原理

Agent 浏览循环
flowchart LR
    A["🌐 URL + Goal"] --> B["Navigate"]
    B --> C["AX Tree Snapshot\n~200–500 tokens"]
    C --> D{"LLM\nDecision"}
    D -->|"click / type / scroll"| E["Execute Action"]
    E --> C
    D -->|"goal reached"| F["Extract Content\n(MarkGrab)"]
    F --> G["✅ Result"]
Token 效率

browsegrab 将结构(无障碍树)与内容(MarkGrab Markdown)分开,只向大模型发送其所需的信息:

flowchart TD
    A["Raw HTML"] --> B["Accessibility Tree"]
    A --> C["MarkGrab Markdown"]
    B --> D["Structure: ~200–500 tokens\nInteractive elements with ref IDs"]
    C --> E["Content: ~300–800 tokens\nClean markdown · on-demand"]
    D --> F["Combined: ~500–1,300 tokens/step\n⚡ 5–8× fewer than browser-use"]
    E --> F
Token 效率(实测)
页面交互元素Token 数browser-use 等效值
example.com1~60~500+
Wikipedia 文章452~1,254~10,000+

架构

browsegrab/
├── config.py                 # Dataclass configs (env var loading)
├── result.py                 # Result types (ActionResult, BrowseResult, ...)
├── session.py                # BrowseSession orchestrator
├── browser/
│   ├── manager.py            # Playwright lifecycle (async context manager)
│   ├── snapshot.py           # Accessibility tree + ref system
│   ├── selectors.py          # 4-strategy selector resolver
│   └── actions.py            # navigate, click, type, scroll, go_back, wait
├── dom/
│   ├── ref_map.py            # ref ID ↔ element bidirectional mapping
│   └── compress.py           # AX tree + MarkGrab → compressed context
├── llm/
│   ├── base.py               # LLMProvider ABC
│   ├── provider.py           # vLLM, Ollama, OpenAI-compatible
│   ├── prompt.py             # System prompts (~400 tokens)
│   └── parse.py              # 5-stage JSON fallback parser
├── agent/
│   ├── history.py            # Sliding window history compression
│   ├── cache.py              # Domain-based success pattern cache
│   └── loop_guard.py         # Duplicate action detection
├── __main__.py               # CLI (click)
└── mcp_server.py             # FastMCP server (8 tools)

配置

通过环境变量配置所有设置(前缀为 BROWSEGRAB_*):

# Browser
BROWSEGRAB_BROWSER_HEADLESS=true
BROWSEGRAB_BROWSER_TIMEOUT_MS=30000

# LLM (for agentic browse)
BROWSEGRAB_LLM_PROVIDER=vllm          # vllm | ollama | openai
BROWSEGRAB_LLM_BASE_URL=http://localhost:8000/v1
BROWSEGRAB_LLM_MODEL=Qwen/Qwen3.5-32B-AWQ

# Agent
BROWSEGRAB_AGENT_MAX_STEPS=10
BROWSEGRAB_AGENT_ENABLE_CACHE=true

QuartzUnit 生态系统的一部分

库作用
markgrab被动提取(URL → Markdown)
snapgrab被动捕获(URL → 截图)
docpick文档 OCR → 结构化 JSON
browsegrab主动自动化(目标 → 浏览器操作 → 结果)

开发

git clone https://github.com/QuartzUnit/browsegrab.git
cd browsegrab
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
playwright install chromium

# Unit tests (no browser needed)
pytest tests/ -m "not e2e"

# Full suite including E2E
pytest tests/ -v

许可证

MIT


属于 QuartzUnit 生态系统 — 用于数据收集、提取、搜索和 AI Agent 安全的可组合 Python 库。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。