diablo2-web/scripts/browser/README.md

42 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 浏览器验证工具(零依赖)
这些脚本用 Node 内置的 `WebSocket` 直接讲 CDP(Chrome DevTools Protocol),
不需要 puppeteer/playwright 这类依赖。目的只有一个:**给"页面里到底发生了什么"留下证据**,
因为像素和截图的判断在这套环境里不可靠(模型读不了图,`readPixels` 在合成后会返回清空缓冲)。
## inspect-page.mjs —— 单页检查
```bash
CHROME=/root/.cache/ms-playwright/chromium-1223/chrome-linux64/chrome
tsx scripts/browser/inspect-page.mjs "$CHROME" \
"http://127.0.0.1:5173/map.html?data=samples/fixtures" \
scripts/browser/checks/map-save-load.js --screenshot /tmp/map.png
```
它会启动一个 headless Chromium(SwiftShader 软件 WebGL2),打开 URL,等待页面加载,
把 check 脚本的返回值打印成 JSON,可选截图。
## many-pages.mjs —— N 页同时跑(联机用)
```bash
tsx scripts/browser/many-pages.mjs "$CHROME" \
"http://127.0.0.1:5173/net.html?data=samples/fixtures&ws=ws://127.0.0.1:8787&peers=3&peer=0" \
"http://127.0.0.1:5173/net.html?data=samples/fixtures&ws=ws://127.0.0.1:8787&peers=3&peer=1" \
"http://127.0.0.1:5173/net.html?data=samples/fixtures&ws=ws://127.0.0.1:8787&peers=3&peer=2" \
--seconds 20 --shot /tmp/coop
```
每一页是一个**独立的 Chromium 实例**(标签页级复用在这套 CDP 流程里会把两次导航混在一起,
曾经导致"两页都跑成了 peer 0"这种假象)。它按页分发不同的方向键,让每个角色只受本页按键驱动,
结束时打印每页的 `window.__d2web*` 状态。判定靠状态字段,不靠看图。
## checks/ —— 页面内脚本
| 文件 | 目标页面 | 做什么 |
| --- | --- | --- |
| `map-save-load.js` | `map.html` | 走位砍怪 → 存档 → 继续跑 → 读档,比较存档点与恢复后的位置/击杀/金币/地面/等级 |
| `walk-state.js` | `walk.html` | 读真实 MPQ(暗黑1 `spawn.mpq`)后的就绪状态、tick、drawCalls、`glError` |
| `net-state.js` | `net.html` | 单机模式的状态:世界 tick、角色数、怪物数、tps |
| `act-state.js` | `acts.html`(`?live=1`) | 读归档路径:归档是否读入、DS1 象限、格数、瓦片引用缺失数、图集尺寸,以及按键后的位移与朝向 |
| `act-pack-state.js` | `acts.html`(默认) | 资源包路径:是否走 pack、首帧装了几页(证明懒加载)、出画面毫秒数、按键位移与朝向 |