mcpField
E
Eyebrowse

Eyebrowse

本地服务
pypi.org浏览器自动化119 周前更新

关于 Eyebrowse

EyeBrowse 是面向 LLM 浏览器自动化的 Python 引擎和 MCP 服务,结合隐身 Chromium、ARIA 引用交互与 Chrome DevTools Protocol 能力。

主要功能

  1. 01隐身 Chromium 浏览器引擎
  2. 02带引用句柄的 ARIA 快照
  3. 03Chrome DevTools Protocol 访问
  4. 04网络检查与 HAR 导出
  5. 05多会话及身份轮换

适用场景

  1. 01通过 ARIA 引用执行浏览器操作
  2. 02检查请求与 WebSocket 流量
  3. 03将页面保存为 MHTML 或 PDF
  4. 04录制浏览器会话视频

MCP 相关

EyeBrowse 提供含 85 个浏览器工具的 MCP 服务,供 MCP 客户端调用。工具涵盖导航、页面快照、基于引用的操作、会话、网络访问和内容提取。

配置

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

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

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

安装包
pypieyebrowse0.3.10

工具

还没有获取到工具列表

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

详细介绍

👁️ EyeBrowse

隐蔽、可由大模型驱动的浏览器引擎——同一套代码,两种用法。

一个 Python 库 和 一个 MCP 服务,用于驱动真实且难以检测的浏览器,从而避免合法的自动化操作被 Cloudflare、DataDome、Akamai 或 PerimeterX 误判或封禁 IP。基于 CloakBrowser 构建——一种隐蔽的 Chromium(Chrome/146),可直接替代 Playwright——因此 EyeBrowse 可使用完整的 Chrome DevTools Protocol:可信的无光标点击、深度网络检查、MHTML、PDF 和原生视频。

CI PyPI Python 3.12 License: MIT
MCP tools Engine: CloakBrowser Code style: Ruff PRs welcome

EyeBrowse — an AI agent driving a stealth browser past Cloudflare, over MCP

▶ 高画质 MP4:docs/demo.mp4 — AI Agent 通过 MCP 驱动 EyeBrowse:通过 Cloudflare 检查,然后读取真实文档(asyncio · httpx · MDN)。


为什么选择 EyeBrowse?

  • 🥷 默认隐蔽 — 引擎级指纹伪装(开箱即启用 geoip + humanize,每次启动都会生成新指纹);隐藏 navigator.webdriver;视口会根据伪装后的屏幕自动调整。没有 puppeteer-extra 这种权宜补丁——反检测功能直接编译进浏览器。
  • 🤖 专为大模型打造 — 页面以带有 [ref=…] 句柄的 ARIA 树形式读取;模型通过 ref 操作(click/type/hover),而非依赖脆弱的 CSS 或原始像素。跨域 iframe、shadow DOM、弹窗均可处理。
  • ⚡ Chrome DevTools Protocol — 通过节点 ref 实现可信的无光标点击(Input.dispatchMouseEvent),直接访问原始 Network/Performance/Emulation,并支持 MHTML 快照、PDF 导出和原生视频——均可通过工具调用。
  • 🧰 同一套代码兼具库和 MCP 服务 — 简洁的 Python API(EyeBrowse + Session),并由轻量 MCP 服务(85 个 browser_* 工具)一对一提供,适用于 Claude Code 和任何 MCP 客户端。
  • 🪟 不受封装限制 — 精选的高级 API 不会隐藏 Playwright:需要未封装的功能时,可直接使用 session.page / .context / .browser。
  • 🔋 开箱即用 — 多会话、代理与身份轮换、API 模式验证码求解器、原生视频、完整 HAR 捕获,以及清爽 Markdown 提取。

范围。 EyeBrowse 是一个底层浏览器引擎——不包含任何工作流逻辑。 使用者决定做什么;引擎提供能做什么。

目录

快速入门 · 安装 · 功能 · 对比 · 用作库 · 通过 MCP 使用 · 代理与身份 · 内容提取 · 录制 · 工作原理 · 注意事项 · 工具 · 许可证

快速入门

pip install eyebrowse
# The stealth-Chromium binary downloads automatically on first launch — nothing else to run.
import asyncio
from eyebrowse import EyeBrowse

async def main():
    eb = EyeBrowse()                          # stealth defaults: geoip · humanize
    async with eb.session() as s:
        await s.navigate("https://example.com")
        print(await s.snapshot())             # ARIA tree with [ref=...] handles
        await s.click("e6")                   # act on a ref from the snapshot
    await eb.aclose()

asyncio.run(main())

……或者将它接入 Claude Code(或任何 MCP 客户端)——请参阅通过 MCP 使用。

安装

从 PyPI 安装

pip install eyebrowse                 # or: uv pip install eyebrowse
# CloakBrowser fetches its Chromium binary lazily on first launch — nothing to run.
pip install "eyebrowse[extract]"     # optional: + Crawl4AI markdown extraction (heavier)

从源代码安装(开发)

git clone https://github.com/Evil-Bane/eyebrowse && cd eyebrowse
uv sync                              # core engine  (add --extra extract for Crawl4AI)
cp .env.example .env                 # only if you use a proxy / captcha keys

Python 3.12(固定为 <3.13)。引擎:cloakbrowser>=0.3(隐身 Chromium,Chrome/146),基于 playwright 1.60 和 mcp 1.27。

功能

🥷 隐身CloakBrowser 的补丁版 Chromium 指纹伪装(每次启动都会生成新的 --fingerprint);默认启用 geoip + humanize;隐藏 webdriver;视口与伪装后的屏幕匹配。
🤖 LLM 交互aria_snapshot(mode="ai") → ARIA 树 + [ref] 句柄;点击 / 输入 / 悬停 / 选择 / 拖动 / 文件上传 / 对话框 / 键盘操作;也支持坐标鼠标操作。
⚡ CDP按 ref 进行可信无光标点击,原始 CDP(Network / Performance / Emulation)、MHTML 捕获、PDF 导出。
🪟 框架与 DOM按 ref 路由跨域 iframe,穿透 shadow DOM,切换弹出窗口 / 新标签页,在任意框架内执行 evaluate。
🗂 多会话独立的隐身会话,每个会话都有自己的 context / 身份 / 代理。
🌐 网络检查请求 / 响应(包括 XHR/fetch 请求体和 WebSocket 帧)、屏蔽 URL、模拟响应、离线,以及完整的 HAR 导出。
💾 状态Cookie、localStorage 和 sessionStorage(CRUD),保存 / 重新加载 storage_state。
🪪 身份轮换全新指纹 + 隔离配置文件 + 配对代理;可插拔的住宅代理 ProxyProvider。
🧩 验证码可插拔的 API 模式 识别器(CapSolver / 2Captcha / CapMonster / NextCaptcha)+ TOTP,无需浏览器扩展。
📄 提取Crawl4AI raw: feed → 整洁、节省 token 的 markdown(无需大模型或 API 密钥)。
🎥 捕获截图、Playwright 跟踪,以及原生视频(.webm)。
✅ 验证与调试断言、元素高亮、定位器生成、地理位置 / 标头模拟。

完整的工具参考文档:docs/TOOLS.md(18 个分组中的 85 个工具)。

EyeBrowse 对比

EyeBrowsePlaywright MCPbrowser-useplaywright-stealth
内置于浏览器的反检测功能✅❌❌⚠️ JS 补丁
面向大模型的原生 ARIA [ref] 交互模型✅✅✅❌
提供 MCP 服务✅(85 个工具)✅⚠️ 部分支持❌
单一代码库:Python 库和 MCP✅仅 MCP仅库仅库
完整 CDP(可信点击 · 网络 · MHTML · PDF · 视频)✅⚠️ 部分支持❌⚠️ 部分支持
验证码(API 模式)+ TOTP✅❌❌❌
内置代理 + 身份轮换✅❌⚠️ 部分支持❌
跨域 iframe · shadow DOM · 弹出窗口✅✅⚠️ 部分支持不适用

公平使用说明:每个项目针对的细分领域各不相同——此处仅从 EyeBrowse 着重优化的维度(隐身 + 可由大模型驱动 + 单一库 / MCP 代码库)进行比较,并非总体排名。

作为库使用

import asyncio
from eyebrowse import EyeBrowse

async def main():
    eb = EyeBrowse()                           # stealth defaults
    try:
        async with eb.session() as s:          # a stealth session (auto-closed)
            await s.navigate("https://example.com")
            print(await s.snapshot())          # ARIA tree with [ref=...] handles
            await s.click("e6")                # act on a ref
            await s.type("e8", "hello", submit=True)
            png = await s.screenshot(full_page=True)
            title = await s.page.title()        # full Playwright power when you need it
    finally:
        await eb.aclose()

asyncio.run(main())

运行随附的示例:uv run python examples/direct_usage.py。

通过 MCP 使用

EyeBrowse 自带 MCP 服务(eyebrowse-mcp,通过 stdio 运行的 FastMCP)。将其添加到任意 MCP 客户端。

Claude Code(CLI):

claude mcp add eyebrowse -- eyebrowse-mcp

任意 MCP 客户端(JSON 配置):

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

然后按以下步骤操作:browser_navigate(url) → 读取快照 → 根据引用执行操作 (browser_click / browser_type / …)。系统会自动创建默认会话,因此大多数工具都能直接使用。完整列表请参阅:docs/TOOLS.md。

代理与身份(可选)

默认不使用代理(geoip 仍会根据你的真实 IP 调整区域设置和时区)。仅在需要时添加代理:

await eb.new_session(proxy="http://user:[email protected]:8080")
await eb.rotate_identity(proxy="socks5://host:1080")   # fresh fingerprint + paired IP
await eb.new_session(no_proxy=True)                     # force proxyless

通过 .env 中的 EYEBROWSE_PROXY_*、eb.set_static_proxy(...),或用于轮换代理的自定义 ProxyProvider,设置一次默认代理。通过 MCP:browser_new_session(proxy_url=…) / browser_new_identity(proxy_url=…) / browser_set_proxy(…)。

reCAPTCHA v3 / 声誉门槛基于评分,并依据 IP + 会话声誉判定 —— 即使使用隐蔽性功能,干净的新浏览器在被标记的 IP 上仍会失败。请将 EyeBrowse 与干净的住宅代理配合使用。

提取

eb.extract()(或 browser_extract)会将渲染后的 HTML 交给 Crawl4AI 的 raw: feed,并返回经过清理和精简的Markdown —— 不会调用 LLM,也不会读取任何 LLM 密钥;结构化工作由使用它的 Agent 完成。

md  = await eb.extract()                            # markdown string
res = await eb.extract(output_path="data/page.md")  # → {"path": ..., "chars": ...}

录制

原生视频 —— Playwright 会录制整个会话并保存为 .webm,在会话关闭时写入。文件路径会预先确定;会话关闭后,文件才会完成写入:

s = await eb.new_session(record_video=True)
# ... drive the browser ...
print(await s.video_path())          # path is known up-front; file finalizes on close
await eb.close_session(s.id)

通过 MCP:browser_new_session(record_video=True) → browser_video_path。想为 README 准备 GIF? 使用 ffmpeg 将 .webm 转换为 GIF(ffmpeg -i demo.webm demo.gif)。顶部的演示就是这样录制的 —— 参见 examples/make_demo.py。

工作原理

CONSUMERS                         ENGINE (library: eyebrowse/)
 Claude Code  ──MCP──▶  mcp/  ──▶  EyeBrowse façade (public API)
 your code   ─ import ──────────▶   ├─ BrowserEngine (CloakBrowser / stealth Chromium)
 any MCP client                     ├─ proxy / identity rotation (pluggable)
                                    ├─ captcha solvers (pluggable, API-mode)
                                    └─ Crawl4AI (raw: feed) → clean markdown

门面层(EyeBrowse + Session)就是产品;MCP 适配器只是对它进行薄封装的一对一包装。高级 API 经过精心设计,便于 LLM 使用 —— 并非 对 Playwright 的完整重实现 —— 而且只需访问一个属性,就能随时获取原始的 page / context / browser 对象。启动器是唯一依赖具体引擎的层;其他一切都是普通的 Playwright。

注意事项

请留意:

  • evaluate 在页面的主世界中运行(可访问页面全局变量)。若要覆盖页面组件的全局变量并触发站点回调(例如用于验证码),EyeBrowse 会注入 <script>,使代码在页面世界中运行 —— 参见 captcha/inject.py。
  • 导出 HAR 会关闭会话 —— 只有在上下文关闭时,Playwright 才会刷新 HAR 缓冲区。请使用检查点模式:browser_storage_state → browser_har_export → browser_new_session(storage_state=...)。若要获取包含发起方信息的 Chrome HAR(JS 调用栈),请通过 browser_cdp_send 访问 Network.* 域。
  • 原生视频格式为 .webm —— 若需要其他格式,可使用 ffmpeg 转换为 GIF/MP4。

项目结构

eyebrowse/
  api.py            EyeBrowse façade — the single public entry point
  config.py         settings / secrets (pydantic-settings)
  snapshot.py       aria_snapshot(mode="ai") + aria-ref= resolution
  proxy.py          ProxyConfig + pluggable ProxyProvider
  identity.py       Identity + random_identity() (isolated profile dir)
  extract.py        Crawl4AI raw: feed → markdown (lazy, optional dep)
  engine/           engine.py (CloakBrowser launch) + session.py (verbs + registry)
  captcha/          solver ABC + 4 providers + DOM detect/inject
  mcp/              FastMCP server + state + tools/ (18 groups · 85 tools)
examples/direct_usage.py   library proof (no MCP)
examples/make_demo.py      the native-video demo above
docs/TOOLS.md              full tool reference

构建说明、版本固定理由和已验证的引擎行为见 CLAUDE.md。

负责任地使用

EyeBrowse 会驱动具有反检测功能的真实浏览器。仅在你拥有的网站或明确授权自动化的网站上使用,并遵守其条款及适用法律。

许可证

MIT © Evil-Bane


觉得 EyeBrowse 好用? ⭐ 为仓库点个 Star — 这确实很有帮助。

使用 Python · Playwright · CloakBrowser · FastMCP · Model Context Protocol 构建

评论

支持 Markdown

第一次接触 MCP?

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

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