visual-evidence-recovery

当浏览器自动化或网页抓取工具失效时,通过检索并分析历史执行中的截图或视觉缓存提取关键信息。

SKILL.md

GitHub

visual-evidence-recovery

适用场景

  • 反爬拦截:目标网站触发了 Cloudflare、验证码或 403 Forbidden,导致无法获取 HTML 源码。
  • 动态渲染失败:JavaScript 渲染超时或环境限制导致 DOM 树不完整,但浏览器已生成预览图。
  • 会话中断:任务执行中途崩溃,需要从最后的视觉状态恢复上下文。
  • UI 元素不可定位:传统的 CSS 选择器或 XPath 无法定位到复杂的 Canvas 或 Shadow DOM 内容。

步骤

  1. 确认失效模式:当 browser 或 web_fetch 工具返回错误、空内容或拦截页面时,停止重复请求。
  2. 检索视觉资产:
    • 检查当前会话的 screenshots/ 目录或工具输出中的 last_action_screenshot。
    • 使用 ls -ltr screenshots/ 命令按时间顺序排列截图,定位最后一张有效页面。
  3. 多模态分析请求:
    • 将定位到的截图路径或 Base64 数据输入给具备视觉能力的模型。
    • 提示词应聚焦于:识别页面关键数据(如价格、标题、状态码)、确认是否存在验证码、判断页面是否加载完全。
  4. 数据提取与验证:
    • 从模型描述中提取结构化信息。
    • 如果截图显示信息不全,尝试通过 browser 移动滚动条并再次截图。
  5. 更新任务状态:基于视觉证据决定是继续执行、切换策略还是报告不可恢复的错误。

工具和命令

  • 查看截图列表:ls -1 ./.cache/screenshots/ (路径根据具体环境调整)
  • 读取视觉日志:cat session_logs.json | grep "screenshot"
  • 视觉提示词模板:

    "这张图片是 [URL] 的最后抓取状态。请提取页面中心表格的第三行数据,并告知我页面底部是否有 'Next' 按钮。"

注意事项

  • 时效性:截图仅代表抓取瞬间的状态,对于高频变动的数据(如秒杀价格)需谨慎使用。
  • 分辨率限制:如果截图过小或模糊,模型可能产生幻觉,需结合 browser.set_viewport 调整分辨率后重试。
  • 隐私脱敏:在分析截图时,注意避开可能包含的用户敏感信息(如登录后的 Cookie 提示或个人账户名)。
  • 成本意识:多模态分析通常比文本分析消耗更多 Token,仅在常规抓取失败时作为后备方案。

示例

场景:尝试抓取某电商网站价格,但被 Cloudflare 拦截。 操作:

  1. web_fetch 返回 403。
  2. 调用 browser.screenshot 获取当前拦截页面的视觉图像。
  3. 分析截图发现页面右侧其实已经加载了部分推荐商品的价格。
  4. 提示模型:“忽略中间的验证码弹窗,提取右侧 'Recommended' 栏目下的所有商品名称和价格。”
  5. 成功获取部分数据,绕过完全阻塞。