学习通浏览器自动答题 Skill
基于 Playwright 浏览器自动化的学习通作业答题工具。
核心特点
- 浏览器真实操作:通过 Playwright 控制浏览器,模拟真实用户操作
- 智能题型识别:自动区分单选、多选、判断、填空题
- 防重复操作:检测已答状态,跳过已选/已填的题目,避免取消答案
- 填空题正确同步:使用 UEditor API 设置内容并调用
.sync()同步到 textarea - Cookie 持久化:登录状态保存,下次无需重新登录
- 安全暂存:默认只暂存(saveWork),不自动交卷
依赖
- Node.js >= 18
- Playwright:
npm install playwright
快速开始
1. 安装依赖
npm install playwright
npx playwright install chromium
2. 运行答题脚本
node {baseDir}/scripts/auto_answer.js \
--url "https://mooc1.chaoxing.com/mooc-ans/mooc2/work/dowork?courseId=...&workId=..." \
--answers "D:/path/to/answers.json"
3. 答案文件格式
{
"single": ["B", "A", "C", "D"],
"judge": [1, 0, 1, 0],
"fill": ["视觉效果", "像素", "灰度值"],
"multi": [["A", "B"], ["B", "C", "D"]]
}
single:单选题答案,对应选项字母judge:判断题答案,1=对,0=错fill:填空题答案,每题一个字符串multi:多选题答案,每题一个选项数组
工作流程
- 启动浏览器,加载 Cookie(如有)
- 打开作业页面,检测是否需要登录
- 自动识别题目类型和数量
- 检查每题的已答状态,跳过已答题目
- 按顺序填写答案
- 调用
saveWork()暂存 - 保持浏览器打开供人工检查
页面 DOM 结构参考
超星泛雅模式作业页面的关键 DOM 结构:
单选题/判断题
div.answerBg[qid="405292246"][qtype="0"]
└── span.num_option[data="A"] ← 选项
- 每个选项是独立的
div.answerBg - 点击使用
addChoice(this)函数 - 选中状态:span 上有
cur_check类
判断题
- 与单选题结构相同,但选项 data 值为
true/false - 显示文本为 "A"(对)/"B"(错)
填空题
div.questionLi[id="question405292266"]
└── div.textDIV
└── textarea#answerEditor4052922661 ← 隐藏 textarea
└── iframe#answerEditor4052922661 ← UEditor iframe
- 填空题不在
div.answerBg内,而在div.questionLi内 - UEditor ID 格式:
answerEditor{qid}{blankIndex} - 必须使用
UE.getEditor(id).setContent()+.sync()填写
暂存/提交
- 暂存函数:
saveWork() - 提交函数:
submitWork()/submitValidate() - 表单:
#submitForm,action 指向addStudentWorkNewWeb
配置
Cookie 保存路径
默认:{workspace}/chaoxing_state.json(Playwright storageState 格式)
可选参数
| 参数 | 说明 | 默认值 |
|---|---|---|
--url |
作业页面 URL | 必填 |
--answers |
答案 JSON 文件路径 | 必填 |
--state |
Cookie 状态文件路径 | ./chaoxing_state.json |
--headless |
无头模式 | false |
--no-save |
不自动暂存 | false |
--timeout |
操作超时(秒) | 600 |
常见问题
Q: 填空题填入后右侧答题列表没有更新?
A: 需要调用 UEditor 的 .sync() 方法同步内容到隐藏的 textarea,本 Skill 已内置此逻辑。
Q: 重复运行会取消之前的选择吗?
A: 不会。脚本会先检测每题的已答状态,已答的会跳过。
Q: Cookie 过期了怎么办?
A: 脚本会自动检测,如跳转到登录页会弹出浏览器窗口让你登录,登录后自动继续。
Q: 泛雅(fanya)模式和普通模式有什么区别?
A: 泛雅模式所有题目在一个页面,普通模式分页。本 Skill 主要针对泛雅模式(单页面)。