项目地址:https://github.com/zhegexiaohuozi/seimi-render(Apache 2.0 开源)

从一个老问题说起

做爬虫、做数据采集、做内容聚合的同学,大概都绕不开一个场景:拿到一个 URL,我要的不是它 curl 出来的那段 HTML,而是「人在浏览器里看到的那一页」——JS 跑完之后的内容、登录态后面才能看到的页面、搜索结果里去掉广告的结构化结果。

这条路传统上有几个老掉牙的方案:

  • requests + BeautifulSoup:对 SPA 和动态页面直接歇菜,拿到的是空壳。
  • Selenium / Playwright:能跑,但每个任务要拉起一个完整浏览器进程,重、慢、不稳定,并发起来资源开销惊人。
  • 直接复用日常浏览器:有人图省事,挂个插件或用 puppeteer 连到自己平时用的 Chrome 上跑自动化。但这玩意儿是双向干扰的——自动化跑起来窗口一直在跳、标签页乱切,严重打扰你正常上网;反过来,你随手点个标签、关个页面、甚至切去别的网站,也会干扰甚至直接搞崩正在跑的采集流程。人和机器抢同一个浏览器,谁都别想舒服。
  • 商业渲染 API:能用,但贵、有限额、cookie 登录态完全没法自己掌控。
  • 搜索 API:贵,很贵。

而 2026 年大家又多了一个新需求:AI Agent 要读网页怎么办? Claude Code、Cursor、ZCode 这些 coding agent,本身没有「真实浏览器」这个能力,遇到「帮我看一下这个链接讲了什么」「帮我搜一下这个关键词」就卡住了——它们要么没有联网工具,要么只能用简陋的 fetch,拿不到 JS 渲染后的真实内容。

seimi-render 就是冲着这两个老痛点 + 一个新需求来的。

它是什么

一句话:一个基于 Chromium 内核的网页渲染服务。你提交 URL,它用真实的 Chromium 浏览器加载页面、执行 JS、等待异步内容,然后把渲染后的产物还给你——可以是 HTML、Markdown、PDF、截图,甚至是结构化的搜索结果 JSON。

它对外提供三种接入方式:

  • HTTP API:最通用,提交任务 + 长轮询拿结果,一行 curl 就能跑。
  • WebSocket 推送:渲染完成实时通知,适合搭工作流。
  • MCP 协议:这是最有意思的一条——Claude Code / Cursor / ZCode 这些 AI agent 客户端,可以直接把 seimi-render 当成自己的「浏览器工具」来调用

服务本身默认 offscreen 无头跑,后台静默不打扰,本地浏览器操作不会干扰它,它也不会弹窗干扰你。规模约 4000 行 C++17,单进程,部署简单。

几个我比较喜欢的特性

不是简单罗列,挑几个实际用着爽的点说:

1. 真实浏览器,不是模拟。 底层是 Chromium,Ajax、SPA、懒加载图片、各种诡异的前端框架,统统按真实浏览器行为来。搜狐首页这种重内容页面,渲染完拿到 220KB 的完整 HTML,包含 44 个 script 标签、406 个链接——这就是 Chromium 执行完 JS 后的真实 DOM。

2. Cookie 登录态同步。 这是个被低估但极重要的能力。seimi-render 默认是干净 profile,但配套提供了一个 Chrome 插件,点一下就能把你浏览器里某个域名的登录 cookie 同步过去。之后渲染个人后台、付费内容、需要登录的搜索结果,全部自动带登录态。而且 cookie 加密落盘(data/cookies.dat),服务重启自动恢复,不用重新同步。

3. 运行时代理热切换。 --proxy 启动时配,或者 POST /proxy 运行时改,都不用重启。原理是 Qt WebEngine 底层会轮询 Qt 全局应用代理,运行时修改后几秒内生效。配合自己的代理池,可以彻底避开 IP 流控。这比 Chromium 命令行 --proxy-server 那种「启动快照、运行时不可改」的方案强太多。

4. 搜索引擎结果结构化。 这个特别实用。百度/必应/Google 的搜索结果页,seimi-render 会注入对应的提取脚本,直接返回去广告后的结构化 JSON——每条结果含标题、URL、摘要、来源。不用自己写正则去抠满是 hash 后缀 class 的搜索页 DOM。

5. MCP 协议原生支持。 这是我觉得最对得起 2026 年这个时间点的设计。下面单独说。

MCP:让 AI Agent 直接拥有「浏览器」

MCP(Model Context Protocol)是 Anthropic 推的、现在主流 AI agent 客户端都在跟的协议。seimi-render 内置了一个 MCP server(默认端口 8090),暴露 4 个工具,按「语义层级」从高到低排:

工具干什么用
browser_search给个关键词,自动构造搜索引擎 URL、渲染、返回结构化结果。说「搜一下」「查一下」时用它
get_web_content给个具体 URL,用 readability 提取干净正文 markdown。读文章时用它
render_url全功能渲染器,要 PDF/截图/原始 HTML/手动指定参数时用它
get_render_result上一步超时返回 running 时,用它轮询补取结果

接入 Claude Code / Cursor 只需要一段配置:

{
  "mcpServers": {
    "seimi-render": {
      "type": "http",
      "url": "http://127.0.0.1:8090/mcp"
    }
  }
}

配好之后,你在 agent 里直接说「帮我了解一下北京种植牙哪些医院靠谱」,agent 会自动规划:调 browser_search 搜 → 看结构化结果 → 判断哪几条值得细看 → 调 get_web_content 读全文 → 综合输出。用户全程不用手写 URL,不用解析 HTML,agent 自己决定什么时候渲染、渲染什么。

这个体验和「给 agent 一个简陋的 fetch 工具」是质的差别。seimi-render 给 agent 的是一个会跑 JS、会带登录态、会过基础反爬、会结构化搜索结果的真实浏览器——agent 的数据获取边界一下子就打开了。拿它做股票舆情监控、历史 K 线分析、行业资讯聚合,都是几个 Skill 拼一拼的事。

快速上手

安装依赖

平台命令
Windowsscripts\setup-windows.bat
Linuxsh scripts\setup-linux.sh
macOSsh scripts\setup-macos.sh

构建打包

平台命令
Windowsscripts\package-windows.bat
Linuxsh scripts\package-linux.sh
macOSsh scripts\package.sh

启动

./build/seimi-render.app/Contents/MacOS/seimi-render \
    --http-port 8088 --ws-port 8089

默认 HTTP 8088 / WS 8089 / MCP 8090,仅绑 127.0.0.1。要远程接入再显式 --host 0.0.0.0(强烈建议同时配 --password)。

一行 curl 试一下

curl -X POST http://localhost:8088/render \
  -H "Content-Type: application/json" \
  -d '{"url":"https://www.sohu.com/","settle_ms":2500,"long_poll_ms":35000}'

返回渲染后的完整 HTML。这就是 Chromium 跑完 JS 之后的那一页。

接入 AI agent

上面那段 mcpServers JSON 贴进你的 agent 客户端配置就行。seimi-render 自带一个 Web 管理后台(浏览器访问根路径 GET /),里面「配置示例」标签页可以一键复制各客户端的接入配置,不用手敲。

还有几个值得一提的工程细节

  • 内置 Web 管理后台:运行时统计大盘(成功率、p50/p90/p99 延迟、吞吐、域名分布)、渲染测试台、cookie 管理、接口文档全在一个界面里,远程也能用。做容量规划和定位高失败率站点很方便。
  • 浏览器指纹统一(stealth):所有渲染实例伪装成同一个 Chrome 桌面环境(UA/screen/WebGL/canvas 一致),「融入人群」而不是「特立独行」,绕过 Google 这类的基础反爬。启动时还会先预热一次 Google 拿会话 cookie,降低冷启动首条搜索命中 /sorry/ 验证页的概率。
  • 反爬失败类型化:命中 Google 验证页会自动退避重试(全新 page,2 次),重试耗尽判为 blocked 失败,响应里 error 前缀 blocked: + blocked:true 双标记。调用方可以明确区分「反爬拦截」(建议换引擎/走代理)和「超时/网络错」(重试就行)。
  • 安全:SSRF 防护拦截内网/回环/云元数据地址(含 DNS rebinding 防护);密码鉴权 HTTP/WS/MCP 共用同一 token,登录限流;cookie 加密落盘,密钥由编译期 pepper + 机器绑定盐 PBKDF2 派生,换机器即失效。

谁适合用

  • AI Agent 玩家:想让你的 Claude Code / Cursor / ZCode 真正能读网页、能搜索,而不是只会读本地文件。这是 seimi-render 最独特的价值点。
  • 数据采集 / 爬虫工程师:受够了 Selenium 的重量级和 Playwright 的资源开销,想要一个稳定、可并发、支持登录态、支持代理池的真实浏览器渲染后端。
  • 内容聚合 / 监控服务:需要定时抓一批站点做舆情、资讯、行情,要结构化输出而不是一堆乱糟糟的 HTML。
  • Vibe Coding 实践者:seimi-render 可以作为 AI 做 RL 迭代自动优化的数据获取基础设施,让 agent 自己跑数据采集闭环。

写在最后

seimi-render 是 SeimiAgent 的现代化升级版,用 C++17 重写,单进程,约 4000 行代码,Apache 2.0 开源。

它最让我兴奋的不是某一个单点功能,而是「真实 Chromium + MCP 协议」这个组合——把过去只有爬虫工程师才玩得动的浏览器渲染能力,变成了 AI Agent 用自然语言就能驱动的工具。在这个 Agent 满天飞、但 Agent 普遍缺少「真实世界数据获取能力」的节点,这个组合正好踩在需求上。

如果你也在折腾 AI Agent、在做数据采集、或者单纯想要一个好用的渲染服务,欢迎来仓库看看:

👉 https://github.com/zhegexiaohuozi/seimi-render

Issue、PR、使用反馈都欢迎。Star 一下是对作者最好的鼓励。

标签: seimiagent, Chromium渲染服务, SeimiRender, Zcode, Codex, ClaudeCode, OpenCode, MCP

添加新评论