deerflow-code/browser-extension/deer-web-clipper/README.md
2026-09-07 18:24:55 +08:00

5.9 KiB
Raw Permalink Blame History

zncm Web Clipper

这是给 zncm 使用的 Chrome 插件,安装后默认连接 config.js 中配置好的服务地址。

默认地址配置在 browser-extension/deer-web-clipper/config.js:

globalThis.ZNCM_WEB_CLIPPER_CONFIG = Object.freeze({
  defaultWebBaseUrl: "http://47.94.209.59:2026",
  defaultApiBaseUrl: "http://47.94.209.59:2026",
});

如果部署地址变化,只需要修改 config.js 里的这两个字段,然后重新加载插件。

正常情况下不需要手动配置 URL,也不需要手动复制 token。

能做什么

  1. 把当前浏览器标签页发送到 zncm,作为 Markdown 附件进入聊天。
  2. 接收 zncm 聊天中由 browser_fetch_page 工具创建的网页抓取任务。
  3. 插件在 Chrome 中打开目标网页,读取可见文本和表格,再把结果回传给 zncm。
  4. 在普通网页右下角显示“zncm 页面问答”浮窗,直接把当前页面内容交给 zncm 问答。
  5. 接收 zncm 的 browser_act 交互式操作任务:在 Chrome 中打开页面并按 zncm 的指令操作页面——点击、输入、滚动、等待、页内跳转,每一步把页面上的可交互元素清单和正文回传给 zncm,由 zncm 决定下一步(observe→act 循环)。

页面操作(browser_act)

除了只读抓取,zncm 还能驱动插件实际操作网页,完成登录、填表、翻页找数据等多步任务:

  1. zncm 调用 browser_act 工具,先 navigate 打开页面。
  2. 插件打开标签页(同一会话会复用这个标签页),扫描页面上的可交互元素,给每个元素编号后连同正文回传给 zncm。
  3. zncm 根据元素编号决定下一步(点第 3 个按钮、在第 1 个输入框填字……),再次调用 browser_act。
  4. 插件执行动作、重新扫描页面、回传新状态,如此循环,直到任务完成。
  5. 任务结束时 zncm 用 action="close" 关闭该会话标签页。

支持的动作:navigate(打开/跳转 URL)、click(点击元素)、type(输入文字,可选回车提交)、scroll(滚动到元素或下翻一屏)、wait(等待某 CSS 选择器出现)、extract(重新读取正文)、observe(仅重新扫描)、close(关闭会话标签页)。

提示:页面操作能力较强(可点击任意按钮、提交表单),可在后端 config.yaml 用 browser_context.actions_enabled: false 关闭,只保留只读抓取。

后端启用

在 offline-backend-20260512/backend/config.yaml 中保持:

browser_context:
  enabled: true          # 只读抓取 + 页面问答
  actions_enabled: true  # 交互式页面操作 browser_act(不需要可设为 false)

修改配置后需要重启后端。

安装插件

  1. 打开 Chrome 的 chrome://extensions。
  2. 开启右上角的“开发者模式”。
  3. 点击“加载已解压的扩展程序”。
  4. 选择目录:browser-extension/deer-web-clipper。
  5. 安装后插件名会显示为 zncm Web Clipper。

安装即用

插件默认已经开启:

  • 自动识别已打开 zncm 页面的服务地址。
  • 自动同步已登录 zncm 的 token。
  • 自动轮询 zncm 聊天触发的浏览器抓取任务。
  • 页面问答框默认开启。

如果你打开的是 config.js 里配置的默认服务器,通常无需进入设置页。

如果部署地址变了,保持一个已登录的 zncm 页面打开,然后在插件设置里点击:

  • 重新识别服务地址
  • 同步 token

自动同步 Token

插件会自动从两个位置获取登录 token:

  1. zncm API 域名下的 access_token Cookie,包括 HttpOnly Cookie。
  2. 已登录 zncm 前端页面里的浏览器本地登录态。

切换登录账号后,插件后台每次轮询任务前都会重新同步 token;点击插件里的“同步 token”也可以立即刷新。

如果当前浏览器已经登出 zncm,且打开的 zncm 页面里没有 token,插件会清空旧 token,避免继续用上一个账号请求。

页面问答框

安装插件后,普通 http / https 页面右下角会出现 AI 按钮。点击后可以在当前网页上直接提问,例如:

总结这页的核心结论
提取页面里的价格和时间
这张表里哪个指标最高?

插件会读取当前页面可见文本和表格,发送到 zncm,并把 zncm 的回答显示回浮窗里。多轮追问会复用同一个 zncm 会话;如果页面 URL 变化,会自动重新开始当前页会话。

是否显示问答框可以自己控制:

  • 插件弹窗里勾选或取消“启用页面问答框”。
  • 插件设置页里勾选或取消“启用页面问答框”。

关闭问答框只会隐藏页面浮窗,不会影响“发送当前页”和 zncm 聊天中的 browser_fetch_page 抓取任务。

手动发送当前网页

点击插件图标,选择“发送当前页”。

插件会读取当前页面的可见文本和表格,发送到 zncm,并打开一个新的 zncm 聊天页面。zncm 会把网页内容作为上传文件注入到首条问题里。

在 zncm 聊天中触发浏览器抓取

在 zncm 中输入带有明确 URL 的问题,例如:

使用 browser_fetch_page 打开 https://example.com/report,提取页面里的关键表格数据并总结。

执行流程:

  1. zncm 调用 browser_fetch_page 工具创建浏览器任务。
  2. 插件后台轮询到任务。
  3. 插件在 Chrome 中打开目标网页。
  4. 插件提取页面文本和表格。
  5. 插件把结果回传给 zncm。
  6. zncm 基于回传内容回答你的问题。

这个方式适合读取需要浏览器登录态、内网权限或当前 Chrome 环境才能访问的页面。

注意事项

  • 目标 URL 必须是明确的 http 或 https 地址。
  • 插件不能读取 chrome:// 等浏览器内部页面。
  • 如果目标网站阻止扩展脚本注入,抓取可能失败。
  • 后台任务默认会打开新标签页;是否抓取完成后关闭标签页,可在插件设置里配置。