feat(web): 靶子显示友好名 + 支持连打次数

- targets.py 增加 label 字段(1ms 签到 / mliev 登录),下拉框、说明、历史表统一用友好名
- POST /api/jobs 支持 count(1~20):一次任务连打 N 发,发间自动按靶子频控节流、可取消
- 每发结果记入 stats.rounds,EVT_VERIFY 带 round,结果区展示「每发结果(通过 x/y)」彩色一览
- 滑块不再生成标注图(红圈+序号只表达点击顺序,对滑块是误导)
- 观测台 README 补齐启动/后台运行/端口占用/自检说明
This commit is contained in:
yml2213
2026-10-15 11:20:24 +08:00
parent 99565f65f0
commit 5c4ff8c4a1
8 changed files with 534 additions and 222 deletions
+50 -29
View File
@@ -13,18 +13,20 @@
<span class="sub">腾讯天御验证码 · 纯协议求解 · 实时观测</span>
</div>
<div class="controls">
<label>靶子
<select id="target"></select>
</label>
<label>靶子 <select id="target"></select></label>
<label>题型
<select id="kind">
<option value="any">any 遇到啥过啥(推荐)</option>
<option value="icon">icon 图标点选 2408</option>
<option value="text">text 文字点选 2404</option>
<option value="slider">slider 滑块 2401/2402</option>
<option value="any">any · 遇到啥过啥</option>
<option value="icon">icon · 图标点选 2408</option>
<option value="text">text · 文字点选 2404</option>
<option value="slider">slider · 滑块 2401/2402</option>
</select>
</label>
<button id="start" class="primary">开始一发</button>
<label>次数
<input id="count" type="number" min="1" max="20" step="1" value="1"
title="连打次数;发与发之间按靶子频控自动节流,可随时取消">
</label>
<button id="start" class="primary">开始</button>
<button id="cancel" disabled>取消</button>
<span id="cooldown" class="cooldown"></span>
</div>
@@ -32,30 +34,44 @@
</header>
<main>
<section class="panel">
<h2>执行轨迹 <span id="state" class="badge">空闲</span>
<span id="jobId" class="mono muted"></span>
</h2>
<div id="log" class="log"></div>
</section>
<!-- 左栏:执行过程 -->
<div class="col">
<section class="panel">
<h2>执行轨迹 <span id="state" class="badge">空闲</span>
<span class="right mono muted" id="jobId"></span>
</h2>
<div id="log" class="log"><div class="empty">还没有任务。</div></div>
</section>
<section class="panel">
<h2>题目 / 点位 / 结果</h2>
<div id="result" class="result"><p class="muted">还没有任务。选好靶子与题型,点「开始一发」。</p></div>
<div id="images" class="images"></div>
</section>
<section class="panel">
<h2>结果</h2>
<div id="result"><p class="empty-hint">选好靶子 / 题型 / 次数,点「开始」。</p></div>
</section>
</div>
<!-- 右栏:题目与点位 -->
<div class="col">
<section class="panel">
<h2>题目 / 点位 <span class="right muted" style="font-weight:400">点图片可放大</span></h2>
<div id="challenges"><p class="empty-hint">抽到题目后,底图与标注图会出现在这里(标注图上的 1/2/3 即点击顺序)。</p></div>
</section>
<section class="panel">
<h2>历史任务</h2>
<table id="history">
<colgroup>
<col class="c-time"><col class="c-target"><col class="c-kind">
<col class="c-ec"><col class="c-ms"><col class="c-ok"><col>
</colgroup>
<thead>
<tr><th>时间</th><th>靶子</th><th>题型</th><th>errorCode</th><th>耗时</th><th>结果</th><th>ticket</th></tr>
</thead>
<tbody></tbody>
</table>
</section>
</div>
</main>
<section class="panel wide">
<h2>历史任务</h2>
<table id="history">
<thead>
<tr><th>时间</th><th>靶子</th><th>题型</th><th>errorCode</th><th>耗时</th><th>点位</th><th>ticket</th></tr>
</thead>
<tbody></tbody>
</table>
</section>
<footer class="legend">
<span><b class="ec0">0</b> 通过</span>
<span><b class="ec50">50 / 9</b> 答案被否(点位或目标错)</span>
@@ -63,6 +79,11 @@
<span class="muted">靶子带实测最小间隔,后端会强制节流</span>
</footer>
<div id="lightbox" class="lightbox">
<span class="tip">点击任意处 / Esc 关闭</span>
<img id="lightboxImg" alt="放大查看">
</div>
<script src="/static/app.js"></script>
</body>
</html>