一个用于南京理工大学本科教务系统教学评价页面的 Tampermonkey 用户脚本。脚本会在评教页面右下角生成一个脚本控制菜单,支持一键填写评价选项。
本项目只做页面自动填写辅助。请在提交前自行检查每一项内容,确认评价符合个人真实意见。
- 自动识别教学评价页面中的单选题组。
- 默认将大部分评价选择为“很符合”。
- 每次填写时随机选择一组改为“较符合”,避免所有评价完全相同导致页面无法提交。
- 自动填写页面中可识别的文字评价框。
- 在页面右下角生成脚本控制菜单:
一键填写
- 兼容页面已加载后再运行脚本的情况。
- 支持动态页面重新渲染后自动补回浮动面板。
- 不自动保存、不自动提交,填写完成后由用户自行检查并操作页面原生按钮。
- 填写完成后显示临时提示条,几秒后自动消失,不会弹出需要确认的阻塞窗口。
脚本匹配以下域名下的页面:
*://bkjw.njust.edu.cn/*
主要面向本科教务系统中的学生评教页面,例如标题为“学生评教”的评价表单页面。
根据实际评教页面截图和 Chrome 中打开的真实页面,评教表格大致由两部分组成:
- 左侧为评价指标。
- 右侧为每一行对应的一组选项:
- 很符合
- 较符合
- 一般
- 不符合
- 极不符合
真实页面中,每个评价指标通常对应一组 input[type="radio"],并通过相同的 name 属性组成一组。例如页面上可能有 12 组评价,每组 5 个选项,总计 60 个单选框。
脚本首先收集页面上所有可见、未禁用的单选框:
document.querySelectorAll('input[type="radio"]')然后按 name 属性进行分组。每一组单选框代表一条评价指标。
为了增强兼容性,脚本还处理了没有 name 属性的情况:如果某个单选框没有 name,脚本会尝试回退到它所在的表格行 tr,把同一行里的单选框视为一组。
这样可以适配一些老式教务系统页面或非标准表单结构。
脚本使用配置项控制默认选择第几个选项,以及随机变化项选择第几个选项:
const CONFIG = {
// 0 = 很符合,1 = 较符合,2 = 一般,3 = 不符合,4 = 极不符合
defaultOptionIndex: 0,
fallbackOptionIndex: 1,
};当前默认值为:
defaultOptionIndex: 0:大部分题目选择第一个选项“很符合”。fallbackOptionIndex: 1:随机挑选一组改为第二个选项“较符合”。
这样做是因为教评页面可能不允许所有评价完全一致。如果 12 组评价全部选择“很符合”,页面在保存或提交时可能拦截。脚本会先把所有题目设为默认最高评价,再从可选题组中随机挑一组改成第二好的评价。
选择时脚本不会只修改 checked 属性,而是会同时执行点击和事件触发:
target.click();
["mousedown", "mouseup", "click", "input", "change"].forEach(type => trigger(radio, type));这样做是为了兼容页面中可能存在的事件监听、总分计算或表单状态更新逻辑。
如果页面存在 textarea,或者存在名称、占位符、id 中带有“评价、意见、建议、备注”等含义的文本输入框,脚本会自动填入一段默认评价:
老师教学认真负责,课程内容清晰,讲解准确,课堂安排合理,对学习很有帮助。如果输入框设置了 maxlength,脚本会自动截断到允许长度,避免超过页面限制。
脚本不会填充普通文本框,避免误把课程编号、搜索框、隐藏字段等内容改掉。
脚本运行后会在页面右下角插入一个脚本控制菜单:
脚本控制 | 一键填写
其中:
一键填写:自动填写所有评价选项,并随机把其中一组改为“较符合”。
填写完成后,页面右下角会短暂出现提示条,显示本次填写了多少组评价,以及随机改为“较符合”的题组序号。提示条会自动消失,不需要点击确定。
用户脚本可能在页面加载前执行,也可能在页面加载完成后才执行。脚本对此做了兼容:
if (document.readyState === "loading") {
window.addEventListener("load", () => {
setTimeout(init, 1000);
});
} else {
setTimeout(init, 1000);
}这保证了无论脚本什么时候被 Tampermonkey 注入,浮动面板都能正常出现。
同时,脚本使用 MutationObserver 监听页面变化,如果教务系统局部刷新导致按钮消失,也会自动尝试重新创建。
先在浏览器中安装 Tampermonkey 扩展:
- Chrome / Edge:在扩展商店搜索
Tampermonkey - Firefox:在附加组件商店搜索
Tampermonkey
打开 Tampermonkey 管理面板,点击:
添加新脚本
将仓库中的 main.js 内容完整复制到 Tampermonkey 编辑器中,保存即可。
进入南京理工大学本科教务系统,打开学生评教页面。如果脚本生效,页面右下角会出现脚本控制菜单。
- 打开需要评价的课程页面。
- 等待页面加载完成,观察右下角是否出现脚本控制菜单。
- 点击
一键填写。 - 检查页面中的选项和文字评价是否符合你的真实意见。
- 确认无误后,再手动点击页面原生的保存或提交按钮。
每次一键填写都会随机选择一组题目改为“较符合”,其余题目选择“很符合”。
如果不想默认选择“很符合”,可以修改 main.js 中的配置:
const CONFIG = {
// 0 = 很符合,1 = 较符合,2 = 一般,3 = 不符合,4 = 极不符合
defaultOptionIndex: 0,
fallbackOptionIndex: 1,
};例如改成默认选择“较符合”:
defaultOptionIndex: 1,改成默认选择“一般”:
defaultOptionIndex: 2,如果想修改随机变化项选择的档位,可以修改 fallbackOptionIndex。
例如随机一组改为“一般”:
fallbackOptionIndex: 2,不建议把 fallbackOptionIndex 设置为和 defaultOptionIndex 一样,否则可能再次出现所有评价完全相同、页面无法提交的问题。
修改 CONFIG.commentText 即可:
commentText: "老师教学认真负责,课程内容清晰,讲解准确,课堂安排合理,对学习很有帮助。",建议填写符合自己真实感受的评价内容。
- 脚本只负责填写,不会自动保存或提交。
- 提交前请务必检查内容。
- 页面可能限制所有评价完全一致,因此脚本默认随机一组使用“较符合”。
- 如果学校教务系统页面结构发生变化,脚本可能需要更新选择器或分组逻辑。
- 如果右下角没有出现脚本控制菜单,可以尝试刷新页面,或确认 Tampermonkey 是否已启用该脚本。
- 本脚本仅供学习和个人便利使用。
.
├── main.js # Tampermonkey 用户脚本主体
├── LICENSE # 开源许可证
└── README.md # 项目说明文档
本项目没有复杂构建流程。修改脚本后,可以使用 Node.js 做基础语法检查:
node --check main.js如果命令没有输出错误,说明 JavaScript 语法检查通过。
本项目与南京理工大学及其教务系统无官方关联。脚本只是浏览器端的辅助填写工具,不保证长期可用。使用者应自行承担使用风险,并对提交的评价内容负责。