145 lines
3.9 KiB
Markdown
145 lines
3.9 KiB
Markdown
# auto-answer
|
|
|
|
一个纯 Python 的自动练题脚本,用 Playwright 控制 Microsoft Edge,自动进入中石化网络学院“自主练测”的顺序练习页面,并根据页面里的“答案解析”选择正确答案。
|
|
|
|
不包含 Web 服务和 API 服务,直接命令行运行。
|
|
|
|
## 快速使用
|
|
|
|
最简单方式:双击项目根目录的 `start.bat`。
|
|
|
|
它会执行:
|
|
|
|
```bat
|
|
uv run auto-answer practice --answer-count -1 --answer-wait-s 5-10 --result-delay-s 2
|
|
```
|
|
|
|
含义:
|
|
|
|
- `--answer-count -1`:一直答题,直到没有下一题。
|
|
- `--answer-wait-s 5-10`:每题答题前随机等待 5 到 10 秒。
|
|
- `--result-delay-s 2`:点击答案后到点击下一题前随机等待,范围是 1 到 3 秒。
|
|
- 题库名称、账号、密码等从 `.env` 读取。
|
|
|
|
## 首次准备
|
|
|
|
安装依赖:
|
|
|
|
```powershell
|
|
uv sync
|
|
```
|
|
|
|
如果本机 Playwright 没有浏览器运行环境,可执行:
|
|
|
|
```powershell
|
|
uv run playwright install chromium
|
|
```
|
|
|
|
本项目默认使用系统里的 Microsoft Edge,固定配置在代码中:
|
|
|
|
```text
|
|
BROWSER_CHANNEL=msedge
|
|
```
|
|
|
|
## 配置
|
|
|
|
复制 `.env.example` 为 `.env`,然后填写账号密码:
|
|
|
|
```dotenv
|
|
LOGIN_USERNAME=你的账号
|
|
LOGIN_PASSWORD=你的密码
|
|
QUESTION_BANK=测录融合
|
|
ANSWER_COUNT=0
|
|
ANSWER_WAIT_S=5-10
|
|
RESULT_DELAY_S=2
|
|
```
|
|
|
|
常用配置说明:
|
|
|
|
- `LOGIN_USERNAME` / `LOGIN_PASSWORD`:登录账号密码。
|
|
- `QUESTION_BANK`:题库关键词,程序会从页面 tab 中自动匹配最接近的题库。
|
|
- `ANSWER_COUNT`:自动答题数量,`0` 表示只进入练习不答题,`-1` 表示一直答到结束。
|
|
- `ANSWER_WAIT_S`:每题答题前的随机等待时间,格式是 `最小秒数-最大秒数`。
|
|
- `RESULT_DELAY_S`:点击答案后到点击下一题前的基准等待秒数,实际随机范围是 `50%-150%`。
|
|
|
|
固定默认值在 `src/auto_answer/config.py` 中维护,包括登录页、自主练测入口、Edge channel、cookie/localStorage/sessionStorage 保存路径。
|
|
|
|
`.env`、`.auth/` 已加入 `.gitignore`,不会提交到 Git。
|
|
|
|
## 常用命令
|
|
|
|
进入自主练测,但不自动答题:
|
|
|
|
```powershell
|
|
uv run auto-answer practice
|
|
```
|
|
|
|
指定题库关键词:
|
|
|
|
```powershell
|
|
uv run auto-answer practice --bank "测录融合"
|
|
```
|
|
|
|
答 10 题:
|
|
|
|
```powershell
|
|
uv run auto-answer practice --bank "测录融合" --answer-count 10
|
|
```
|
|
|
|
一直答到结束,每题答题前等待 5 到 10 秒,点击答案后再等待约 1 到 3 秒:
|
|
|
|
```powershell
|
|
uv run auto-answer practice --bank "测录融合" --answer-count -1 --answer-wait-s 5-10 --result-delay-s 2
|
|
```
|
|
|
|
只登录并保存登录态:
|
|
|
|
```powershell
|
|
uv run auto-answer login
|
|
```
|
|
|
|
## 工作原理
|
|
|
|
整体流程:
|
|
|
|
```text
|
|
启动 Edge
|
|
-> 打开自主练测页
|
|
-> 如果登录过期,跳转登录页并自动登录
|
|
-> 保存 cookie/localStorage/sessionStorage
|
|
-> 回到自主练测页
|
|
-> 按 QUESTION_BANK 模糊匹配题库 tab
|
|
-> 点击“顺序练习”的“开始练习”
|
|
-> 展开“答案解析”
|
|
-> 读取“正确答案:A/B/C/D”
|
|
-> 点击对应选项
|
|
-> 点击“下一题”
|
|
-> 循环
|
|
```
|
|
|
|
题库匹配逻辑:
|
|
|
|
- 读取页面中所有题库 tab 的文本。
|
|
- 对 `QUESTION_BANK` 或 `--bank` 传入的关键词做模糊匹配。
|
|
- 如果关键词包含在题库名里,优先使用该题库。
|
|
- 否则使用相似度最高的题库。
|
|
|
|
答题逻辑:
|
|
|
|
- 每题先点击“答案解析”。
|
|
- 从页面文本中解析 `正确答案:B` 或类似格式。
|
|
- 如果是多选,例如 `正确答案:ABC`,会依次点击 A、B、C。
|
|
- 点击“下一题”后等待题号变化。
|
|
- `--answer-count -1` 时会一直循环,直到找不到下一题或题号不再变化。
|
|
|
|
## 目录结构
|
|
|
|
```text
|
|
src/auto_answer/
|
|
cli.py 命令行参数
|
|
config.py .env 配置
|
|
browser.py Edge/Playwright 封装
|
|
runner.py 登录、选题库、答题主流程
|
|
solver.py 保留的答题逻辑扩展位
|
|
```
|