# 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 保留的答题逻辑扩展位 ```