visual-evidence-recovery
当浏览器自动化或网页抓取工具失效时,通过检索并分析历史执行中的截图或视觉缓存提取关键信息。
SKILL.mdskills/visual-evidence-recovery/SKILL.md
GitHubvisual-evidence-recovery
适用场景
- 反爬拦截:目标网站触发了 Cloudflare、验证码或 403 Forbidden,导致无法获取 HTML 源码。
- 动态渲染失败:JavaScript 渲染超时或环境限制导致 DOM 树不完整,但浏览器已生成预览图。
- 会话中断:任务执行中途崩溃,需要从最后的视觉状态恢复上下文。
- UI 元素不可定位:传统的 CSS 选择器或 XPath 无法定位到复杂的 Canvas 或 Shadow DOM 内容。
步骤
- 确认失效模式:当
browser或web_fetch工具返回错误、空内容或拦截页面时,停止重复请求。 - 检索视觉资产:
- 检查当前会话的
screenshots/目录或工具输出中的last_action_screenshot。 - 使用
ls -ltr screenshots/命令按时间顺序排列截图,定位最后一张有效页面。
- 检查当前会话的
- 多模态分析请求:
- 将定位到的截图路径或 Base64 数据输入给具备视觉能力的模型。
- 提示词应聚焦于:识别页面关键数据(如价格、标题、状态码)、确认是否存在验证码、判断页面是否加载完全。
- 数据提取与验证:
- 从模型描述中提取结构化信息。
- 如果截图显示信息不全,尝试通过
browser移动滚动条并再次截图。
- 更新任务状态:基于视觉证据决定是继续执行、切换策略还是报告不可恢复的错误。
工具和命令
- 查看截图列表:
ls -1 ./.cache/screenshots/(路径根据具体环境调整) - 读取视觉日志:
cat session_logs.json | grep "screenshot" - 视觉提示词模板:
"这张图片是 [URL] 的最后抓取状态。请提取页面中心表格的第三行数据,并告知我页面底部是否有 'Next' 按钮。"
注意事项
- 时效性:截图仅代表抓取瞬间的状态,对于高频变动的数据(如秒杀价格)需谨慎使用。
- 分辨率限制:如果截图过小或模糊,模型可能产生幻觉,需结合
browser.set_viewport调整分辨率后重试。 - 隐私脱敏:在分析截图时,注意避开可能包含的用户敏感信息(如登录后的 Cookie 提示或个人账户名)。
- 成本意识:多模态分析通常比文本分析消耗更多 Token,仅在常规抓取失败时作为后备方案。
示例
场景:尝试抓取某电商网站价格,但被 Cloudflare 拦截。 操作:
web_fetch返回 403。- 调用
browser.screenshot获取当前拦截页面的视觉图像。 - 分析截图发现页面右侧其实已经加载了部分推荐商品的价格。
- 提示模型:“忽略中间的验证码弹窗,提取右侧 'Recommended' 栏目下的所有商品名称和价格。”
- 成功获取部分数据,绕过完全阻塞。