mirror of
https://git.openapi.site/https://github.com/desirecore/market.git
synced 2026-09-05 22:24:06 +08:00
feat(web-access): 迁移到内置受管浏览器工具(v2.1.0) (#72)
## 变更说明 / Description ### 中文 客户端 v10.0.98(desirecore/desirecore#1596)停用了旧的 `BrowserListTabs` / `BrowserNavigate` / `BrowserEval` / `BrowserClick` / `BrowserScreenshot` / `BrowserScroll` / `BrowserSetFiles` / `BrowserCloseTab` 及其 cdp-proxy 后端,调用会直接返回「该旧 BrowserXxx/cdp-proxy 入口已停用」。而 web-access v2.0.2 的 `provides.tools` 仍声明这批工具——技能激活后注入的是一组必然失败的工具。 本次把 `provides.tools` 换成统一浏览器工具,并同步正文与参考文档: - `provides.tools`:`BrowserManage` / `BrowserSnapshot` / `BrowserAct` / `BrowserImport` / `BrowserShare` + 保留 `SitePatternRead` / `SitePatternWrite` / `LocalBookmarks` - 中英文 SKILL 正文同步改写(L0 / 能力描述 / 决策树 / 四层策略表 / L3-fast 速查 / 反模式) - `references/browser-tools.md` 整篇重写为新 API + 实测边界 - 5 份站点经验(小红书 / B站 / 微博 / 知乎 / 飞书)的流程改用新工具 - 版本 2.0.2 → 2.1.0,`updated_at` 更新,i18n `source_hash` 重算 **L3-fast 的定位相应收窄**:内置浏览器负责「到达 + 交互 + 截图 + 隔离」,抽取长正文仍回落 Jina Reader(公开页)或 Playwright(登录态)——理由见下方实测。 ### English Client v10.0.98 retired the legacy `BrowserXxx` tools and the cdp-proxy behind them, so web-access v2.0.2 was injecting a set of tools that always fail. This PR migrates `provides.tools` to the unified browser tools and rewrites the body, the browser-tools reference, and the five site-pattern playbooks accordingly. L3-fast is re-scoped to navigation/interaction/screenshots; bulk text extraction still falls back to Jina Reader or Playwright. ## 测试方式 / Test Plan 在客户端 v10.0.98 + `electron-embedded` Provider 上实测: - [x] `provides.tools` 里 8 个工具 ID 全部在 builtin registry 中存在 - [x] 把本 PR 的技能装进 dev 实例,带 `skillIds:['web-access']` 驱动智能体:真实调用 `BrowserManage(create_space)` → `BrowserManage(start_session)` → `BrowserAct(tab.navigate)` → `BrowserManage(close_session)`,全部 success - [x] `scripts/i18n/validate-i18n.py` 全仓库通过(中英文标题数一致、source_hash 一致) 文档中记录的边界均来自实测,而非推测: | 边界 | 实测现象 | |------|---------| | 截图前必须 `tab.activate` | 标签页默认停在 `(-10000,-10000,1x1)`,直接截图卡满 30s deadline 并触发 `browser.host.gone`,之后全部 `BROWSER_TAB_HOST_NOT_FOUND` | | `page.evaluate` 不是取文通道 | 每次调用需人工审批;字符串/对象返回值被替换为 `[REDACTED:browser-runtime-value]`,仅 number/boolean/null 穿透 | | `accessibility` 快照真实页面不可用 | example.com 正常返回 StaticText;维基百科条目一律 `BROWSER_RESULT_TOO_LARGE`(2 MB 上限,且 `depth` 参数被宿主忽略) | | `semantic` 快照不含正文 | 只列 button / input / a 等可交互元素 | ## 风险与回滚 / Risk and rollback - 纯技能内容变更,无脚本或清单结构改动 - 需要客户端 v10.0.98+;旧客户端装到本版会拿到一组不存在的工具名(旧客户端上原本那批工具也已失效,不构成回退) - 回滚即 revert 本 PR
This commit is contained in:
@@ -5,7 +5,7 @@ type: site-pattern
|
||||
pinned: true
|
||||
confidence: medium
|
||||
learned_at: '2026-05-05'
|
||||
updated_at: '2026-05-05'
|
||||
updated_at: '2026-08-06'
|
||||
---
|
||||
|
||||
## L0
|
||||
@@ -18,7 +18,7 @@ updated_at: '2026-05-05'
|
||||
|
||||
## 推荐流程
|
||||
- 仅取标题/UP 主/播放数 → WebFetch 即可
|
||||
- 取完整简介 / 评论 → BrowserNavigate + BrowserEval
|
||||
- 取完整简介 / 评论 → 内置浏览器 BrowserAct(tab.navigate) 到达页面,正文抽取回落 L3-fallback Playwright
|
||||
- 批量数据 → 优先尝试 `api.bilibili.com` 公开接口(有专门的 wbi 签名机制)
|
||||
|
||||
## 推荐选择器
|
||||
|
||||
@@ -5,7 +5,7 @@ type: site-pattern
|
||||
pinned: true
|
||||
confidence: high
|
||||
learned_at: '2026-05-05'
|
||||
updated_at: '2026-05-05'
|
||||
updated_at: '2026-08-06'
|
||||
---
|
||||
|
||||
## L0
|
||||
@@ -19,7 +19,7 @@ updated_at: '2026-05-05'
|
||||
|
||||
## 推荐流程
|
||||
1. 公开文档(companion 页面/官方文档站点 `feishu.cn/hc/...`)→ WebFetch / Jina
|
||||
2. 用户文档 → BrowserNavigate(已登录 Chrome)+ BrowserEval 抓正文
|
||||
2. 用户文档 → 内置浏览器 BrowserImport 导入 Cookie + BrowserAct(tab.navigate) 到达,正文抽取回落 Playwright
|
||||
3. 长期程序化访问 → 申请 OpenAPI access_token,走 HTTP,避免 CDP
|
||||
|
||||
## 推荐选择器
|
||||
|
||||
@@ -5,7 +5,7 @@ type: site-pattern
|
||||
pinned: true
|
||||
confidence: medium
|
||||
learned_at: '2026-05-05'
|
||||
updated_at: '2026-05-05'
|
||||
updated_at: '2026-08-06'
|
||||
---
|
||||
|
||||
## L0
|
||||
@@ -18,8 +18,8 @@ updated_at: '2026-05-05'
|
||||
|
||||
## 推荐流程
|
||||
1. 单条公开微博 → 优先尝试 `https://m.weibo.cn/status/<id>`,WebFetch 看是否拿到正文
|
||||
2. 拿不到 → BrowserNavigate(已登录态 Chrome)+ BrowserClick 点"展开" + BrowserEval 取正文
|
||||
3. 用户主页时间线:必须登录,BrowserScroll 触发懒加载
|
||||
2. 拿不到 → 内置浏览器 BrowserImport 导入 Cookie + BrowserAct(tab.navigate) + BrowserAct(input.click ref) 点"展开",正文抽取回落 Playwright
|
||||
3. 用户主页时间线:必须登录,BrowserAct(input.wheel) 触发懒加载
|
||||
|
||||
## 推荐选择器
|
||||
- 单条详情:`.weibo-text` / `[class*='WB_text']`
|
||||
|
||||
@@ -5,7 +5,7 @@ type: site-pattern
|
||||
pinned: true
|
||||
confidence: high
|
||||
learned_at: '2026-05-05'
|
||||
updated_at: '2026-05-05'
|
||||
updated_at: '2026-08-06'
|
||||
---
|
||||
|
||||
## L0
|
||||
@@ -18,10 +18,10 @@ updated_at: '2026-05-05'
|
||||
- xsec_token:详情页 URL 包含 `xsec_token=...`,**通过站内交互生成**——直接拼 URL 容易失败
|
||||
|
||||
## 推荐流程
|
||||
1. 通过 BrowserListTabs 找到已登录的 xhs tab;如无,BrowserNavigate 打开
|
||||
2. BrowserEval 注入选择器抓取标题与正文
|
||||
3. 列表页用 `[...document.querySelectorAll('.note-card a')].map(a => a.href)` 收集详情页链接
|
||||
4. 单条笔记结尾调用 `BrowserCloseTab` 释放 tab,避免 tab 池溢出
|
||||
1. BrowserManage(create_space/start_session) → BrowserImport 按域导入 xiaohongshu.com 的 Cookie
|
||||
2. BrowserAct(tab.navigate) 打开笔记;列表页用 BrowserSnapshot(semantic) 收 `.note-card` 链接的 ref
|
||||
3. 正文抽取回落 L3-fallback Playwright(内置浏览器的 semantic 快照不含正文,accessibility 在本站会超限)
|
||||
4. 收尾 BrowserManage(close_session);ephemeral Space 不留 Profile
|
||||
|
||||
## 推荐选择器
|
||||
- 笔记标题:`#detail-title` 或 `h1[class*="title"]`
|
||||
@@ -36,8 +36,8 @@ updated_at: '2026-05-05'
|
||||
|
||||
## 反爬细节
|
||||
- xsec_token 由前端生成,与会话/路由绑定,不能跨 tab 复用太久
|
||||
- User-Agent 检查较弱,但 navigator.webdriver 必须为 false(cdp-proxy 已默认绕过)
|
||||
- click 操作建议优先用 `mode='real-mouse'`(CDP 真实鼠标事件),避免被 .click() 检测
|
||||
- User-Agent 检查较弱,但 navigator.webdriver 必须为 false
|
||||
- 点击走 `BrowserAct(input.click)`(CDP 派发的真实指针事件),不要用页面内 `.click()`
|
||||
|
||||
## 速率限制
|
||||
- 自评:单 IP 每分钟 ≤ 30 个详情页请求;超过会出验证码
|
||||
|
||||
@@ -5,7 +5,7 @@ type: site-pattern
|
||||
pinned: true
|
||||
confidence: medium
|
||||
learned_at: '2026-05-05'
|
||||
updated_at: '2026-05-05'
|
||||
updated_at: '2026-08-06'
|
||||
---
|
||||
|
||||
## L0
|
||||
@@ -18,8 +18,8 @@ updated_at: '2026-05-05'
|
||||
|
||||
## 推荐流程
|
||||
1. 专栏文章 → WebFetch / Jina Reader 优先
|
||||
2. 问答详情 → BrowserNavigate + BrowserEval;批量回答用 `[...document.querySelectorAll('.AnswerItem')].map(...)`
|
||||
3. 评论 → 必须登录,BrowserClick 展开,BrowserScroll 加载更多
|
||||
2. 问答详情 → 内置浏览器 BrowserAct(tab.navigate) 到达;批量回答的正文抽取回落 Playwright(`.AnswerItem`)
|
||||
3. 评论 → 必须登录,BrowserAct(input.click ref) 展开,BrowserAct(input.wheel) 加载更多
|
||||
|
||||
## 推荐选择器
|
||||
- 文章标题:`h1.Post-Title` / `h1[class*='Title']`
|
||||
|
||||
Reference in New Issue
Block a user