# 网页项目检查助手 · 脱敏案例摘要

> Lexmount 云平台真实任务挑战 · 可公开版本
> 检查对象：一个已上线的大学生学业助手网页应用（公开可访问）
> 检查日期：2026-11-07（UTC+8）
> 作者：投稿时填写

## 一、任务

选一个真实需要解决的网页任务：让 Agent 打开自己已上线的网页项目，用**云端浏览器实际点击、输入、跳转**，把发现的问题整理成带复现步骤、操作记录和可视证据的检查报告。选题对应活动页「网页项目检查助手」示例，但全部任务、用例与结论均为自主设计。

## 二、做法

不用人工肉眼点页面，也不靠静态代码审读。全部动作由 Lexmount 云平台上的远程浏览器真实执行，本地只负责编排与落盘。

| 环节 | 云平台（Lexmount） | 本地工具 |
| --- | --- | --- |
| 打开与操作网页 | Cloud Browser（browser-cli 1.2.4）：创建临时会话，执行 `open-url` / `click` / `fill` / `eval` / `screenshot`，覆盖 7 个页面与 17 个用例 | Python 3.14 编排脚本：按用例调用 CLI、计时、记录操作轨迹 |
| 内容可提取性探活 | Web Fetch（webfetch-cli 0.1.5）：抽取正文、标题、Request ID、DOM ID，对三个站点做对照 | 汇总为 Markdown 原始记录 |
| 证据 | 云端截图 24 张、页面 DOM 快照、几何测量值 | `trials.jsonl`、`findings.json`、`run-summary.json` 等结构化落盘 |

**为什么必须用云平台**：云端浏览器提供真实渲染与交互环境，能拿到 `getComputedStyle`、`getBoundingClientRect`、页面 innerText 与截图；这些是静态抓取拿不到的，也是判断「遮挡」「空态提示」「交互反馈」的必要证据。

**安全边界**：全程只读检查。唯一一次写入（添加任务）只发生在临时云会话的浏览器本地存储，会话关闭即丢弃，未向任何服务端提交表单，未填写任何 API Key。所有凭据由 CLI 通过 OAuth 管理并自动脱敏，报告与证据不含 Session ID、连接地址或密钥。

## 三、结果

首轮 17 个用例全部执行成功，**0 个 JS 运行时错误、0 个未处理 Promise 拒绝**；二、三轮针对可疑点做精确复核，确认 3 个可复现问题，另有 2 条对照观察。所有临时云会话均已显式关闭，活跃会话数为 0。

### F01（高）同一引导页内 Key 说明文案自相矛盾

- 复现：云端浏览器打开首页 → 阅读红色「分享版提示」框与下方蓝色「这是什么？」框。
- 实际：红框写「本版本已移除内置额度，请填写你自己的 Key 才能用 AI 与联网功能」；蓝框写「不用。本工具已内置一份免费智谱额度，你什么都不填也能直接联网用」。四段互斥表述同屏存在。
- 交叉验证：实测未填 Key 时仅「规则助手」可用、联网功能不可用，证明蓝框是遗留的旧版文案。
- 影响：用户无法判断是否要申请 Key，可能误以为联网能力已可用。
- 建议：统一为「联网/大模型能力需自备 Key，本地功能无需 Key」。
- 证据：`16-key-copy-conflict.png`、`webfetch-probe.md`（含 Request ID）、`confirmations.json`。

### F02（中）任务搜索不支持课程简称

- 复现：任务页载入演示数据（含 2 条「高等数学」课程任务）→ 搜索「高数」→ 清空后搜索「高等数学」。
- 实际：输入「高数」显示「没有匹配「高数」的任务」；输入「高等数学」命中 2 条（进行中 2 · 筛选）。空态只回显关键词，无补救提示。
- 建议：增加课程别名映射，或在空态给出完整课程名候选。
- 证据：`12-search-gaoshu.png`、`13-search-gaoshu-full.png`、`trials.jsonl`。

### F03（中）375px 视口下悬浮按钮遮挡说明文字

- 复现：创建 375×812 云端会话 → 打开首页 → 测量 `#fab` 与 Key 说明段落的矩形交集。
- 实际：FAB (298,690)-(348,740) 与文字 (35,663)-(325,852) 相交 **27×50 px**，`intersects=true`。
- 建议：引导页隐藏 FAB，或为内容容器增加底部间距。
- 证据：`17-mobile-fab-overlap.png`、`case-11-mobile.png`、`confirmations.json`。

### 对照观察（不计为故障）

- 另一个 SPA 项目两次 WebFetch 抽取正文长度分别为 4 与 161，第二次带 `thin_content` 警告，静态抓取不稳定。
- 某站点第二次 WebFetch 返回 502 `browser_fetch_failed`（首次 200）。按巡检要求保留失败记录，未据此判定站点故障。

### 验证通过的部分

7 个导航页切换全部正确；跳过引导后今日页正常渲染；演示数据、添加任务、搜索、知识页分类、主题切换、浮动菜单均可用；必填项为空提交时有 toast「任务、课程、DDL 都要填」且未产生空任务；375px 无横向溢出（scrollWidth 360 ≤ innerWidth 375，溢出元素为空）。

### 一处自我纠错

第二轮曾记录「375px 下 Key 输入框被裁切」。第三轮几何复测显示输入框 left=35 / right=325 / width=290，完整落在视口内，且溢出元素列表为空，该结论**不成立，已撤回**。输入框内 placeholder 文字过长只是控件自身截断，不是布局缺陷。修正后的结论是 F03 的悬浮按钮遮挡，并有矩形交集数据支撑。保留这段纠错记录，是为了说明本报告的每条问题都经过独立复核，而非把截图观感当成结论。

## 四、材料清单

| 文件 | 内容 |
| --- | --- |
| `evidence/trials.jsonl` | 17 个用例的步骤、观测、耗时、截图索引 |
| `evidence/run-summary.json` | 首轮运行汇总（用例数、会话数、耗时、工具版本、安全声明） |
| `evidence/findings.json` | 最终发现、观察项、验证通过项、纠错记录 |
| `evidence/confirmations.json` | 文案冲突与矩形交集的量化确认 |
| `evidence/webfetch-probe.md` | 三站点 WebFetch 原始输出（含 Request ID / DOM ID） |
| `evidence/*.png` | 24 张云端浏览器截图 |
| `evidence/01-initial.html` | 首屏 DOM 快照 |
| `run_inspection.py` / `verify_findings.py` / `confirm_findings.py` | 三轮巡检编排脚本（内部核验用，无需公开源码） |

## 五、可公开性与授权

本摘要与截图不包含完整源码、账号凭据、Session ID 或任何连接地址；检查对象为公开可访问的网页项目。案例摘要与必要演示素材可供主办方在官网展示，发布前请与作者核对内容与署名。

> 材料访问链接：即本案例公开摘要页所在的站点地址（以投稿表中填写的链接为准）。
