智能体面试准备(六十六):Web/UI Agent 工程实战——DOM 理解、自愈选择器与失败恢复

智能体面试准备(六十六):Web/UI Agent 工程实战------DOM 理解、自愈选择器与失败恢复

引言

前面(二十四)讲了 GUI Agent 与 Computer Use、(五十三)讲了多模态 Agent 工程。本文把它们落到"生产级 Web/UI Agent":让智能体像人一样操作网页和 App------填表单、点按钮、翻页、抓数据。这是最贴近业务的 Agent 形态之一(RPA 升级、自动化测试、客服代操作),也是坑最多的:页面一改就挂、选择器一失效就傻、反爬一拦就废。

本文讲 Web/UI Agent 的工程骨架:DOM 理解 vs 视觉、自愈选择器、表单与流程编排、反爬对抗、失败恢复。结尾给速答。

一、两条技术路线

复制代码
Web/UI Agent 路线
A. DOM 驱动(结构化): 读页面 DOM/可访问性树 -> 选元素 -> 执行动作
   + 精确、可程序化、便宜
   - 依赖页面结构, 结构变就挂
B. 视觉驱动(Computer Use): 截图 -> VLM 看图 -> 定位坐标 -> 点击
   + 不看内部实现, 拟人, 跨任意界面
   - 坐标不精确, 慢且贵, 需多模态模型(呼应多模态)
混合: 视觉定位 + DOM 校验, 兼顾鲁棒与精确

生产里 DOM 驱动是主力(稳、省),视觉驱动做兜底或处理无结构界面。华为多模态 LLM 方向尤其看重视觉路线。

二、DOM 理解与元素定位

复制代码
DOM 驱动流程
页面 -> 抽取 可访问性树/语义 DOM -> 元素清单(文本/角色/坐标/selector)
     -> Agent 选目标元素 -> 执行(click/type/scroll)

可访问性树(accessibility tree)比原始 HTML 干净:去掉样式噪音,保留"按钮/输入框/链接"及文本,是 Agent 的最佳输入。

代码(用 Playwright 抽可访问性树):

python 复制代码
from playwright.sync_api import sync_playwright

def get_elements(url):
    with sync_playwright() as p:
        b = p.chromium.launch()
        pg = b.new_page()
        pg.goto(url)
        # 抽可访问性快照(结构化)
        tree = pg.accessibility.snapshot()
        els = extract_interactive(tree)   # 递归取 button/input/link
        return els   # [{role, name, bbox, selector}]

三、自愈选择器(核心工程点)

页面重构后,写死的 CSS/XPath 选择器立刻失效。自愈选择器让 Agent 不依赖固定路径:

复制代码
自愈定位策略
1. 多信号匹配: 文本+角色+附近锚点, 不单靠 selector
2. 语义回退: selector 失效 -> 用"按钮文字包含'提交'"再找
3. 属性优先级: 先 stable id > name > 文本 > 坐标
4. 邻居锚定: 找"用户名"输入框旁边的输入控件
5. 失败自愈: 点击失败 -> 重试其他候选 -> 仍失败报人工

代码(语义回退定位):

python 复制代码
def locate(pg, hint):
    # hint: {"text":"提交","role":"button"}
    try:
        return pg.locator(f"text={hint['text']}").first   # 首选文本
    except Exception:
        pass
    # 回退: 角色+关键字
    for el in pg.query_selector_all(f"[role={hint['role']}]"):
        if hint["text"] in (el.inner_text() or ""):
            return el
    raise RuntimeError(f"找不到元素: {hint}")   # 触发自愈/人工

要点:把"定位"封装成带重试+多策略的函数,单点失效不影响整体;每次成功定位可记录"稳定特征"用于下次。

四、表单与流程编排

复制代码
表单填写流程
1. 识别字段(标签->输入框映射): "手机号"旁输入框
2. 按 schema 填值: 类型校验(手机号格式)
3. 失焦/事件触发: 部分页面需 fire event 才校验
4. 提交前校验: 必填/格式/验证码
5. 结果判定: 成功页/错误提示/弹窗

验证码/2FA 是硬墙:生产应接人工(呼应 B63 HITL)或专用验证码服务,不强行破解(合规风险)。

五、反爬与对抗

复制代码
反爬对抗(合规前提: 自有/授权站点)
- 请求特征: 真实 UA/指纹, 限速(呼应六十一), 避免高频
- 行为拟人: 随机间隔/模拟滚动, 不像脚本
- 登录态: 用登录 cookie/令牌(呼应 cookie 管理)
- 检测绕行: headless 特征隐藏, 但遵守 robots/授权
红线: 不爬未授权数据, 不绕付费墙, 不碰隐私(呼应 B62 安全)

强调:Web Agent 必须合法授权,越权抓取有法律风险,这是工程底线。

六、失败恢复与状态管理

复制代码
Web Agent 失败模式与恢复
模式                  恢复
元素找不到            自愈定位/换策略/报人工(B63)
点击无响应            滚动到视口/等待加载/重试
页面跳转丢失上下文    重定位当前页/存状态续跑(呼应 B22)
弹窗遮挡             关弹窗/识别模态再继续
表单校验失败          读错误提示改值重提
网络超时             退避重试(呼应 A66 调度)

状态管理:长流程把"当前步+已填字段"持久化(呼应 B22/B63 断点续跑),崩了能从断点继续而非重头。

七、可观测与评测

复制代码
Web Agent 必看
- 每步动作日志(元素/坐标/结果)
- 自愈触发次数(高=页面不稳)
- 任务成功率(端到端, 呼应 B65 评测)
- 耗时/重试分布
- 失败聚类(哪类页面常挂) -> 补规则

把轨迹接(B65)评测:用固定测试站点跑回归,页面改版后评测掉点就预警。

八、与多模态路线衔接

视觉路线(Computer Use)用 VLM 看截图定位坐标,适合无 DOM 的桌面/原生 App。工程上常"混合":VLM 粗定位区域,DOM 精确定元素;或 DOM 失效时切视觉兜底。这正是(五十三)多模态 Agent 的落地场景。

面试速答

问:DOM 驱动和视觉驱动怎么选?

答:DOM/可访问性树精确便宜,是 Web 主力;视觉(Computer Use)拟人、跨任意界面但慢贵。生产常混合:视觉定位+DOM 校验。

问:自愈选择器为什么重要?

答:页面重构会让写死选择器失效。自愈用多信号(文本/角色/锚点)匹配+语义回退+失败重试,避免一改就挂。

问:Web Agent 的合规红线?

答:只操作自有/授权站点,不爬未授权数据、不绕付费墙、不碰隐私;验证码/2FA 接人工而非破解。

高频追问清单

  1. 可访问性树相比原始 HTML 好在哪?
  2. 自愈定位的多信号优先级怎么排?
  3. 表单字段"标签->输入框"映射怎么自动做?
  4. 验证码/2FA 在 Agent 里怎么处理才合规?
  5. 反爬限速和(六十一)可观测怎么结合?
  6. 长流程状态怎么持久化续跑(呼应 B22)?
  7. 视觉路线坐标不精确怎么补?
  8. Web Agent 成功率怎么评测与回归(呼应 B65)?
  9. DOM 失效时怎么切视觉兜底?
  10. 多页向导(多步跳转)怎么保持上下文不丢?
相关推荐
芯盾时代17 小时前
从《人工智能安全治理框架3.0》看智能体安全治理
人工智能·安全·网络安全·智能体
loulanyue_2 天前
Context Is All You Need:读千问办公CEO陈宇森2026云栖演讲
人工智能·智能体·千问办公
Together_CZ2 天前
UFO²: The Desktop AgentOS——桌面代理操作系统
大模型·llm·gui agent·智能体系统·agentos·ufo²·桌面代理操作系统
Together_CZ3 天前
Large Language Model-Brained GUI Agents:A Survey——大语言模型驱动的GUI智能体:综述
llm·agent·gui agent·ufo·大语言模型驱动·gui智能体综述·model-brained
zmsup3 天前
从运维需求到产品能力:OpsArk Agent 的运维智能平台架构设计思路
运维·系统架构·agent·智能体·运维智能平台
OxYGC3 天前
玩转大模型(一):参数、token、FLOPs 怎么算,提示词/RAG/微调/续训/Agent 怎么选
大模型·模型微调·rag·智能体·提示词工程
RockHopper20254 天前
数字机制与未来企业运行模式(概要版)
人工智能·机器学习·智能体·agent 工程
RockHopper20254 天前
面向工业现实的原生数字化工程框架概要说明
人工智能·智能体·世界模型·工业数字化
AI日报派送佬5 天前
2026年10月4日AI行业日报|AI智能体自主能力升级,模型落地与安全规范双向迭代
人工智能·智能体·ai安全·开源ai·ai日报·人工智能前沿·ai科研
liferecords7 天前
OpenAI 又把训练摁停了:AI agent 用 DNS 给自己开了条外网通道
大模型·智能体·ai安全·ai大厂