fix(chv): 快照改走 page.aria_snapshot()

Playwright 1.64.1 已移除 page.accessibility,真实快照一路报
AttributeError(P2 假实现用的旧 API,单测一直没抓到;2026-11-08
构建 #8 驱动 live 抓到)。新版 aria_snapshot() 返回字符串,
超 64KB 截断;旧版 accessibility.snapshot()(dict)只作回落。
驱动的 a11y 断言接受 str 或 dict。
This commit is contained in:
host committed 2026-11-08 09:45:00 +00:00
1 parent 7361b0654f
commit 0bfb00ab1b
3 files changed
+72 -6

No files matched your search

+22 -5
View File
@@ -24,9 +24,11 @@
返回 changed=false(整帧相同跳过;变化区裁剪是阶段 4 的事,
这里不冒充已做)。
对齐 Muse P2 的不变口径:子代理只向单元返回页面无障碍树快照
(Playwright accessibility.snapshot),不见原始 DOM,不能在页面
上下文跑 JS,不暴露 evaluate/content,不开 DevTools。
对齐 Muse P2 的不变口径:子代理只向单元返回页面无障碍快照,
不见原始 DOM,不能在页面上下文跑 JS,不暴露 evaluate/content,
不开 DevTools。快照 API:当前 Playwright(1.64.1)已移除
page.accessibility,改用 page.aria_snapshot()(返回 YAML 式
字符串);旧版 accessibility.snapshot()(返回 dict)只作回落。
操作(Unix socket /run/chv/browser.sock,JSON 行):
open {url, session?} -> 导航并返回 {title, url, a11y, truncated}
@@ -342,10 +344,25 @@ class BrowserAgent:
try:
title = page.title()
url = page.url
tree = page.accessibility.snapshot()
# 当前 Playwright(1.64.1):page.accessibility 已移除,
# 用 page.aria_snapshot()(字符串);旧版 dict 树只作回落。
if hasattr(page, "aria_snapshot"):
snap = page.aria_snapshot()
if isinstance(snap, dict):
tree, truncated = truncate_a11y(snap)
else:
text = snap or ""
truncated = len(text) > MAX_A11Y_CHARS
tree = text[:MAX_A11Y_CHARS] if truncated else text
elif hasattr(page, "accessibility"):
tree = page.accessibility.snapshot()
tree, truncated = truncate_a11y(tree or {})
else:
return {"ok": False,
"error": "浏览器不支持无障碍快照(无 "
"aria_snapshot/accessibility)"}
except Exception as e:
return {"ok": False, "error": "取快照失败:%s" % e}
tree, truncated = truncate_a11y(tree or {})
return {"ok": True, "title": title, "url": url,
"a11y": tree, "truncated": truncated,
"session": session}