- targets.py 增加 label 字段(1ms 签到 / mliev 登录),下拉框、说明、历史表统一用友好名 - POST /api/jobs 支持 count(1~20):一次任务连打 N 发,发间自动按靶子频控节流、可取消 - 每发结果记入 stats.rounds,EVT_VERIFY 带 round,结果区展示「每发结果(通过 x/y)」彩色一览 - 滑块不再生成标注图(红圈+序号只表达点击顺序,对滑块是误导) - 观测台 README 补齐启动/后台运行/端口占用/自检说明
90 lines
3.2 KiB
HTML
90 lines
3.2 KiB
HTML
<!doctype html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>tcaptcha 观测台</title>
|
|
<link rel="stylesheet" href="/static/style.css">
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<div class="brand">
|
|
<h1>tcaptcha 观测台</h1>
|
|
<span class="sub">腾讯天御验证码 · 纯协议求解 · 实时观测</span>
|
|
</div>
|
|
<div class="controls">
|
|
<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>
|
|
</select>
|
|
</label>
|
|
<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>
|
|
<div id="targetNote" class="note"></div>
|
|
</header>
|
|
|
|
<main>
|
|
<!-- 左栏:执行过程 -->
|
|
<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"><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>
|
|
|
|
<footer class="legend">
|
|
<span><b class="ec0">0</b> 通过</span>
|
|
<span><b class="ec50">50 / 9</b> 答案被否(点位或目标错)</span>
|
|
<span><b class="ec12">12</b> 包级拒答(轨迹指纹 / 频控)</span>
|
|
<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>
|