微信答题考试Skill
概述
自动完成微信小程序中的答题、考试、每日打卡(含补卡)等功能。通过窗口固定 + 截图 OCR 文字识别 + 模拟点击技术,目前已适配「智思达远-城建智慧学习」小程序的四门一建课程(一建经济 / 一建管理 / 一建法规 / 一建建筑),内置联网 OCR 兜底、散点图(相关图)像素判别、错题重做等能力。
> 💬 联系作者:使用中遇到问题或有特殊定制需求,欢迎联系免费修改。VX:ywg19890913
逻辑流程图
> 完整端到端流程如下。可缩放的高清矢量图见 assets/logic_diagram.svg,适合插入 PPT / 文档或打印。
flowchart TD
Start([开始:每日打卡任务])
Start --> P1["Phase 1 启动并固定窗口<br/>launch / fix_window · 固定(0,0)"]
P1 --> P2["Phase 2 进入每日打卡<br/>start 点(142,391) → OCR 确认日历"]
P2 --> STATUS{"课程状态判断?"}
STATUS -->|已完成| SKIP["已完成 → 跳过本课<br/>进入下一门 / 结束"]
STATUS -->|开始/补卡/百分数| ENTER["点击显示位置<br/>进入答题页"]
ENTER --> CLEAR["clear_session 清缓存"]
CLEAR --> READ["步骤1 读题<br/>ocr 单屏快检"]
READ --> READOK{"单屏满足三标准?<br/>题号+选项连续+页脚"}
READOK -->|否| OCRF["ocr_full / 滚动补齐"]
OCRF --> READ
READOK -->|是| ANSWER["步骤2 答题<br/>单屏: answer / 多屏: select"]
ANSWER --> VERIFY["步骤3 选项验证守卫"]
VERIFY --> NEXT["步骤4 next 下一题"]
NEXT --> CHKNM{"读页脚<br/>已答 N/M + 按钮颜色"}
CHKNM -->|N/M &lt; 1<br/>蓝色按钮| FWDTO["非最后一题<br/>正常进入下一题"]
FWDTO --> READ
CHKNM -->|N/M &lt; 1<br/>绿色按钮| PREV["漏答!prev 逐题返回补答"]
PREV --> ANSWER
CHKNM -->|N/M == 1<br/>绿色按钮| SUBMIT["最后一题<br/>提交交卷"]
SUBMIT --> RES["结果页<br/>逐题 对/错 汇总"]
RES --> XD{"错题数 X?"}
XD -->|X &lt; 2| AUTO["X&lt;2 直接点已完成<br/>回日历"]
XD -->|X ≥ 2| WA["进入错题(X)标签<br/>逐题联网分析"]
WA --> WAOK{"全部错题分析完?"}
WAOK -->|否| WA
WAOK -->|是| REDO["redo 再考一次"]
REDO --> REDOLP["重做: 非错题复用上下文<br/>错题用联网确认答案"]
REDOLP --> READ
AUTO --> CLN["清理缓存<br/>cleanup + clear_session"]
CLN --> NEXTC{"还有下一门课?"}
NEXTC -->|否| END([全部课程完成])
NEXTC -->|是| P2
SKIP --> NEXTC
环境准备
依赖安装
首次使用前安装 Python 依赖:
# 使用 WorkBuddy 受管 Python
python setup_env.py
或手动安装:
pip install pyautogui Pillow mss pywin32 winocr
前置条件
- Windows 10 或 11
- 微信桌面端已登录,且已打开过「智思达远-城建智慧学习」小程序
- 桌面快捷方式:确保桌面存在
智思达远-城建智慧学习.lnk(脚本按环境变量 → 桌面路径自动解析) - Python 3.10+(推荐 WorkBuddy 受管 Python)
启动
python auto_quiz.py launch
窗口自动固定到屏幕左上角 (0,0),请求 380×1050 尺寸(微信实际会截断至约 326×840,脚本自动适配实时尺寸)。
命令参考
所有命令:python auto_quiz.py <cmd> [args]
| 命令 | 作用 |
|---|---|
launch |
通过桌面快捷方式打开小程序,固定窗口 |
fix_window |
把窗口移到 (0,0) 并置顶 |
start |
快速进入每日打卡:点 (142,391),免 OCR |
ocr |
截图 + Windows OCR,打印当前视口文字及坐标 |
ocr_full |
完整读题:从上到下滚动逐段 OCR 整道题(题干 + 全部选项 + 页脚) |
ocr_online [name] |
联网 OCR.space 识别(本地 OCR 读不清时的兜底) |
click <x> <y> |
点击相对于窗口的坐标 |
click_text <文本> |
OCR 找文字并点击 |
find <文本> |
OCR 找文字,只打印坐标不点击 |
scroll <clicks> [x] [y] |
窗口内滚动(负=下,正=上;默认中点) |
select <A,B,C> [n] |
按字母点选选项。[n]=选项总数。单屏且选项+页脚同屏时零滚动直接点选;多屏时先滚底再点。内置选中验证 + 最多 3 轮补点 |
answer <A,B,C> [n] |
一步完成 select + next/submit(单题最快路径) |
next |
点蓝色「下一题」按钮(先滚到底再点,避免误取消已选) |
submit |
点绿色「提交」按钮交卷(仅在 N/M==1 且按钮绿色时调用) |
prev |
点击"上一题" |
redo |
点击蓝色「再考一次」重做 |
clear_session |
清除本次答题的 session 缓存 |
analyze_scatter [l,t,r,b] |
对"相关图"散点题做像素判别(Pearson + 斜率 + ASCII 图) |
save_question [name] |
把当前题裁剪、2× 放大存成 PNG |
save <名称> <x> <y> |
手动存坐标到 coords.json |
load |
打印所有已存坐标 |
标准答题流程
1. 启动窗口
python auto_quiz.py launch
2. 进入每日打卡 → 逐课答题
python auto_quiz.py start # 快速进入每日打卡
python auto_quiz.py clear_session # 开始新课前清缓存
然后逐课进入、逐题作答:
- 读题:
ocr单屏快检。若单屏看清题干+全部选项+页脚 → 直接作答;不全则用ocr_full滚动补齐。 - 答题:
answer A,B [n](单屏题一步完成)或select A,B [n]→next(多屏题分步)。 - 提交:最后一题 N/M==1 且按钮绿色时,
submit交卷。 - 结果:逐题展示 ✅/❌ → 错题 X 道。
- X < 2 → 直接点«已完成»,执行清理,进入下一门课。
- X ≥ 2 → 进入«错题(X)»标签页,逐题联网搜索确认正确答案 →redo重做。
3. 清理
每门课合格后:
python cleanup.py # 清理截图缓存
python auto_quiz.py clear_session # 清上下文缓存
课程状态判断
- 课程名下方显示«已完成» → 跳过,进入下一门。
- 显示«开始»/«补卡»/百分数/无标记 → 点击进入答题。
跨设备 / 可移植性
本技能为用户级技能(~/.workbuddy/skills/),随账号在多台 Windows 设备间同步。
在新设备上首次使用:
- 装依赖:
python setup_env.py - 确保快捷方式:桌面存在
智思达远-城建智慧学习.lnk - 登录微信:手动登录微信并打开过一次小程序即可
所有脚本不含任何写死的用户名路径。数据文件(coords.json 等)通过脚本自身所在目录定位,可随技能整体迁移。
其它工具脚本
| 脚本 | 功能 |
|---|---|
click_at.py |
按屏幕/相对坐标点击(--double / --right / --delay) |
screenshot.py |
仅截图(--region / --window) |
find_window.py |
按标题查窗口并置顶 |
type_text.py |
模拟键盘输入 |
cleanup.py |
清理 %TEMP%/quiz_screenshots/ 临时截图 |
setup_env.py |
环境自检 / 安装依赖 |
已知问题与排错
| 问题 | 说明与处理 |
|---|---|
| 选项白底白字 | 部分题选项文字不渲染,OCR 不可见。选项控件仍在,盲点预期位置仍能选中,兜底坐标 A≈(215,301)、B≈(215,366)、C≈(215,431)、D≈(215,496) |
| 窗口找不到 | 确认微信已登录;fix_window 会按标题"智思达远"置顶 |
| 点击无响应 | fix_window 确保置顶、增加延迟、必要时用 click_at.py --double |
| session 串课 | 换课程/换日期前必须 clear_session |
| 页面滚动 | 答题页支持鼠标滚轮:scroll <clicks>(负=向下,正=向上) |
| 结果页误回首页 | 脚本已处理:返回→首页→点"每日打卡"回日历,不会误入"更多题库" |
更多排错技巧见 references/diagnostics.md。
目录结构
wechat-quiz-exam-skill/
├── SKILL.md
├── scripts/
│ ├── auto_quiz.py # 主脚本(所有命令入口)
│ ├── coords.json # 固定/存档坐标(运行时自动维护)
│ ├── cleanup.py # 截图缓存清理
│ ├── setup_env.py # 环境自检 / 安装依赖
│ ├── click_at.py # 坐标点击工具
│ ├── find_window.py # 窗口查找工具
│ ├── screenshot.py # 截图工具
│ └── type_text.py # 键盘输入模拟
├── references/
│ ├── workflow.md # 工作流与界面识别参考
│ ├── diagnostics.md # 白底白字缺陷诊断技巧
│ └── internal_rules.md # AI Agent 内部执行规则(详细硬性规则)
└── assets/
└── logic_diagram.svg # 流程高清矢量图
免责声明
本技能仅供个人辅助学习使用,自动化操作需遵守「智思达远-城建智慧学习」小程序的使用协议。使用者自行承担合规责任,开发者不对此技能的第三方使用后果负责。