基于超轻量 Rust 无头浏览器 Moli 的 web_fetch 提供方:专为微前端与复杂 SPA 渲染设计,内存占用仅约 60MB。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:GreyRaphael/dsh-web-fetch-moli
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DeepSeek Harness (DSH) 官方生态插件,为内置 web_fetch 工具提供基于 Moli(超轻量级 Rust 无头浏览器)的渲染后端。在仅占用 ~60MB 内存(相比 Chromium/Playwright 的 ~1GB 降低超 90%)的前提下,完美支持企业级复杂微前端(Micro-Frontend)、动态单页应用(SPA)与静态页面,并通过 LinkeDOM + Readability + mdream 高性能双阶段管道降噪清洗后输出规范的大模型优化 Markdown。
核心特性
- 极致低内存占用 — 单个本地 Moli 常驻守护服务仅占用 ~50–60 MB 内存,在资源受限的边缘节点或云服务器上亦可轻松支撑高并发抓取。
- 企业级微前端与复杂 SPA 全面兼容 — 突破了传统轻量级无头浏览器(如 Lightpanda 在 iframe 沙箱崩溃、Obscura 在 style-loader 报错)的瓶颈:
- 支持 CDP 动态绕过 CSP(
Page.setBypassCSP)、证书忽略与 SW 穿透,彻底解决严格内容安全策略阻止动态import()的问题。 - 基于 CDP Micro-Clip 排版物化(
Page.captureScreenshot1x1 微视口)驱动 Moli 原生排版树计算,联动 W3C 标准scrollIntoView({ block: 'nearest' })触发展开全量无限滚动与瀑布流卡片列表(零用户脚本注入、零代理劫持)。
- 支持 CDP 动态绕过 CSP(
- 两种灵活运行模式:
local(默认):自动拉起受管的本地moli serveCDP 守护进程,提供最完整的动态 SPA 渲染能力(~60MB 极低内存)。cdp:连接用户自建或远端的 Moli / Chromium CDP 服务。
- 高性能双阶段降噪管道 — 采用 LinkeDOM + Mozilla Readability 提取正文并剔除布局噪音(广告、导航栏、侧边栏、页脚),并通过 mdream(Rust 原生引擎 + 纯 JS 回退)转为高质量、高保真大模型友好 Markdown。自动缩略长 base64 图片,防止污染上下文。
- Cloudflare 挑战有界等待 — 自动识别
cf-mitigated: challenge验证页,在同一页面上下文内有界等待浏览器自然完成人机验证,无需任何违规模拟行为。
方案对比
| 特性 / 指标 | Chromium / Playwright | Lightpanda (Zig) | Obscura (Rust) | Moli (Rust) + DSH 插件 |
|---|---|---|---|---|
| 内存占用 | ~800 MB – 1.2 GB | ~40 MB | ~50 MB | ~50 – 60 MB |
| 微前端沙箱兼容性 | ✅ 完整 | ❌ iframe 沙箱崩溃 (contentWindow.bind) |
❌ 动态 style-loader 样式报错 |
✅ 100% 完美支持(CDP + CSP 绕过) |
| 无限滚动/懒加载卡片 | ✅ 原生像素循环 | ❌ 几何模型不全 | ❌ 几何模型不全 | ✅ 原生排版物化 + 滚动 (Micro-Clip CDP) |
| 交互协议 | 重量级 CDP | 轻量级 CDP | 自定义 / CDP | 轻量级原生 CDP |
架构原理
web_fetch (tool-web)
└─ ctx.web.fetchProvider = moli
├─ local: 自动定位 moli 二进制 → 启动并管理 `moli serve` 守护进程 → connectOverCDP
│ └─ setupPageHooks: 开启 Page.setBypassCSP + 证书忽略 + 绕过 Service Worker
├─ cdp: 连接用户配置的 remoteEndpoint CDP 端口
├─ page.goto → Micro-Clip 排版物化 + 原生滚动循环 → 等待网络空闲 (networkidle) → page.content()
├─ 降噪管道: LinkeDOM (DOM) → Readability (正文提取) → mdream (转 Markdown)
└─ 输出 Markdown(关闭 denoise 时输出原始渲染 HTML)
环境依赖
- DeepSeek Harness (
dsh web),Node.js ≥ 22(插件通过原生全局WebSocket驱动 CDP,Node 20 不提供该 API)。 - 免手动安装:插件内置首次使用自动下载安装能力。若检测到系统中未安装 Moli,会自动从官方 Release 下载适配当前操作系统与 CPU 架构(Linux、macOS、Windows x86_64 / arm64)的最新版二进制并就绪,开箱即用。
- 亦支持使用已有的 Moli v1.1.5+(置于系统
$PATH、~/.local/bin/moli,或在配置项中指定moliPath)。
手动安装参考(可选):
curl -sSL https://github.com/GreyRaphael/moli/releases/latest/download/moli-x86_64-unknown-linux-gnu.tar.gz | tar -xz -C ~/.local/bin
chmod +x ~/.local/bin/moli
安装插件
# 方式 1:直接通过 GitHub 仓库安装(即时可用)
dsh plugin --profile web add github:GreyRaphael/dsh-web-fetch-moli
# 方式 2:通过 npm 包名安装
dsh plugin --profile web add dsh-web-fetch-moli
添加后重启 dsh web 即可生效。
设置与配置
插件的每个配置项都是本行 Config 里的 volatile 字段:DSH 的设置域(0.1.7 起)直接按 profile 条目渲染表单,保存即热更新——不重启、也不重挂插件。在 DSH 的「插件」页面打开 dsh-web-fetch-moli 即可配置:
| 配置项 | 默认值 | 说明 |
|---|---|---|
backend |
local |
后端模式:local(受管本地 Moli 服务)或 cdp(远端 CDP 地址)。 |
moliPath |
(自动) | moli 可执行文件路径;留空自动按系统 $PATH 探测。 |
cdpEndpoint |
127.0.0.1:9222 |
远端 CDP 地址(host:port 或完整 URL,在 cdp 模式生效)。 |
bypassCsp |
true |
是否通过 CDP 开启 Page.setBypassCSP,微前端沙箱动态加载脚本必备。 |
autoScrollSentinel |
true |
是否自动触发 IntersectionObserver 哨兵,加载瀑布流无限滚动卡片。 |
shareBrowserContext |
true |
是否复用浏览器上下文(在 cdp 模式生效);本地模式下始终使用隔离上下文防止污染。 |
denoise |
true |
启用 LinkeDOM + Readability + mdream 降噪与 LLM 优化 Markdown 转换。 |
timeoutMs |
90000 |
单次抓取的总超时预算(毫秒);重型微前端页面需要多轮排版与滚动。bundle 层出厂 60000,schema 默认 90000。 |
maxConcurrency |
(自动) | 最大并发抓取数(自动:本地 20,远端 50)。 |
challengeWaitMs |
5000 |
Cloudflare 人机验证有界等待上限(毫秒;0 为关闭)。 |
challengeRetries |
0 |
验证超时后的同页面重试次数。 |
开源协议
MIT
链接
同类插件
Tencent/BrowserSkill#dsh-plugin-browserskill★ 9785
BrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edge Agent Window,支持可访问性与 VOM 页面观察、截图、隔离的多会话控制和 Web UI 实时观察浮层。
omdsh-dev/dsh-browser#packages/browser/bridge-browser★ 941
Chrome 侧边栏扩展,让 DSH 直接操控你的浏览器,无需视觉能力。
liustack/modsearch★ 875
纯文本 agent 的联网搜索桥:搜索网页与 X,返回结构化 JSON 证据(search/fetch/引用)。
DDDMUC/dsh-free-search★ 718
DSH 免费搜索插件:7 个引擎(DuckDuckGo/Bing/SearXNG 免费 + Exa/Perplexity/DeepSeek 付费)、自动回退、设置页 UI(API key 输入 + 官网链接)、web_fetch、引擎测试工具。
wqty123/dsh-browser★ 154
共享真实浏览器:用户可观看并随时接管的原生 Electron 窗口,agent 通过 CDP 驱动,内置 20 个 browser_* 工具(打开/快照/执行/填表/截图/下载/登录态);任务级会话隔离、登录态持久化、人机验证识别,纯 `dsh web` 无需桌面外壳即可自托管。
Tabbit-Browser/dsh-tabbit★ 116
让 DeepSeek Harness 能够控制 Tabbit 浏览器:安装即自动加载 tabbit-browser skill,检测国际版 Tabbit 与国内版 Tabbit Browser 正式版(>= 1.9.0),检查 tabbit-cli 常驻运行时,按平台诊断调用 CLI 所需的 DSH sandbox 模式,并在没有合格版本时通过后台任务下载与系统地区匹配的正式版安装包。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。