Seimi-render:把真实 Chromium 浏览器,变成 AI Agent 可免打扰的直接调用的渲染服务
项目地址: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 拼一拼的事。
快速上手
安装依赖
| 平台 | 命令 |
|---|---|
| Windows | scripts\setup-windows.bat |
| Linux | sh scripts\setup-linux.sh |
| macOS | sh scripts\setup-macos.sh |
构建打包
| 平台 | 命令 |
|---|---|
| Windows | scripts\package-windows.bat |
| Linux | sh scripts\package-linux.sh |
| macOS | sh 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 一下是对作者最好的鼓励。