学习通(超星)作业自动化 Skill
把「手动点网页」变成「可复用命令流程」:
- 列作业入口(taskrefId)
- 解析到 doHomeWork URL
- 抓题并生成可编辑答案模板
- 暂存(save)/交卷(submit)
- 手写图答案流水线:文本答案 → 手写 PNG → 图床 URL → HTML
<img>→ 暂存
当前版本:v1.1.2
致谢
感谢本 Skill 使用到的三个核心依赖/服务:
- HandWrite(手写渲染能力)
- 学习通 API:
mooc1-api.chaoxing.com - 超星图床上传接口:
notice.chaoxing.com/pc/files/uploadNoticeFile
安全约束
- 默认 Cookie 文件:
~/.openclaw/credentials/xuexitong_cookie.txt save是安全操作(暂存)submit是高风险操作(交卷),必须显式--confirm
快速开始
目录变量:
{baseDir}指当前 skill 根目录。
# 1) 列出作业入口
python3 {baseDir}/scripts/xuexitong_submit.py list
# 2) 解析 task 链接 -> doHomeWork URL
python3 {baseDir}/scripts/xuexitong_submit.py resolve \
--task-url "<mtaskmsgspecial url>"
# 3) 抓题 + 生成答案模板
python3 {baseDir}/scripts/xuexitong_submit.py fetch \
--dohomework-url "<doHomeWork url>" \
--out work.json
python3 {baseDir}/scripts/xuexitong_submit.py template \
--work-json work.json \
--out answers.json
# 4) 暂存(推荐先走这步)
python3 {baseDir}/scripts/xuexitong_submit.py save \
--dohomework-url "<doHomeWork url>" \
--answers answers.json \
--work-json work.json
# 5) 交卷(必须显式确认)
python3 {baseDir}/scripts/xuexitong_submit.py submit \
--dohomework-url "<doHomeWork url>" \
--answers answers.json \
--work-json work.json \
--confirm
手写图答案流水线
# A. 初始化:抓题并生成可编辑 answers_text.json
python3 {baseDir}/scripts/xuexitong_hw_pipeline.py init \
--dohomework-url "<doHomeWork url>" \
--outdir runs/run1
# 手动编辑 runs/run1/answers_text.json 的 answer 字段
# B. 执行:渲染->上传->生成 HTML 答案->暂存
python3 {baseDir}/scripts/xuexitong_hw_pipeline.py run \
--dohomework-url "<doHomeWork url>" \
--rundir runs/run1
扫描“疑似新作业且未填写”
python3 {baseDir}/scripts/xuexitong_scan_pending.py \
--limit 80 \
--out runs/pending_scan.json
输出包含:
candidates[]:候选作业(疑似未交且未写)resolveFailures[]:解析失败的任务入口
自动更新检查(已内置)
每次运行主脚本都会去 GitHub 检查最新版本(读取仓库 VERSION):
- 若有新版本,会打印更新提示
- 不会阻塞主流程(网络失败时静默跳过)
更新命令:
clawhub update xuexitong-homework-submit
临时关闭更新检查:
XUEXITONG_SKIP_UPDATE_CHECK=1 python3 {baseDir}/scripts/xuexitong_submit.py list
常见故障
- 401/403 或页面异常:Cookie 过期,重新抓取 Cookie。
- 单题提交成功但多题空白:请传
--work-json,脚本会逐题提取隐藏字段。 - 服务器偶发 EOF/限流:重试或加
--sleep-ms 200降速。