前言:发现这学期的数据库mooc互评太多了,一个个点实在是太过于麻烦,就写个脚本来实现自动互评。目前脚本已提交油猴:MOOC互评全自动化脚本 (greasyfork.org)。但是不知道为什么用油猴运行不了,在控制台手动输入就能运行(挠头.jpg
// ==UserScript==
// @name MOOC互评全自动化脚本
// @description 自动填充内容并默认勾选最高分提交,默认互评5次
// @version 1.2
// @author 无知呦
// @match https://www.icourse163.org//*
// @grant none
// @license MIT
// @namespace https://greasyfork.org/users/1195678
// ==/UserScript==
// 定义一个函数fillRadios,用于将所有单选框设置为选中状态
function fillRadios() {
var radios = document.getElementsByTagName('input');
for (var i = 0; i < radios.length; i++) {
if (radios[i].type === 'radio') {
radios[i].checked = true;
}
}
}
// 定义一个函数fillTextareas,用于将所有文本框的值填充为'100'
function fillTextareas() {
var textareas = document.getElementsByTagName('textarea');
for (var i = 0; i < textareas.length; i++) {
textareas[i].value = '100';
}
}
// 定义一个函数clickLinkByTextContent,用于通过链接文本内容来点击对应的链接
function clickLinkByTextContent(textContent) {
var links = document.querySelectorAll('a');
for (var i = 0; i < links.length; i++) {
if (links[i].textContent === textContent) {
links[i].click();
break;
}
}
}
// 定义一个函数clickNextLinks,用于点击所有class为'j-gotonext'的链接
function clickNextLinks() {
var nextLinks = document.querySelectorAll('a.j-gotonext');
for (var j = 0; j < nextLinks.length; j++) {
nextLinks[j].click();
}
}
// 定义一个函数doTask,用于执行任务
function doTask(taskIndex) {
fillRadios(); // 调用fillRadios函数,选中所有单选框
fillTextareas(); // 调用fillTextareas函数,将所有文本框的值填充为'100'
clickLinkByTextContent('提交'); // 调用clickLinkByTextContent函数,点击文本内容为'提交'的链接
setTimeout(function () { // 延迟执行
clickNextLinks(); // 调用clickNextLinks函数,点击所有class为'j-gotonext'的链接
if (taskIndex < 4) { // 如果任务索引小于4(共执行5次)
setTimeout(function () {
doTask(taskIndex + 1); // 递归调用doTask函数,继续执行下一个任务
}, Math.random() * 2000 + 1000); // 随机等待时间在1秒到3秒之间
}
}, 2000);
}
doTask(0); // 调用doTask函数,从任务索引为0开始执行任务
这段代码是一个用于自动化MOOC互评的脚本,通过填充内容并默认勾选最高分提交,默认互评5次。具体实现包括将所有单选框设置为选中状态、将所有文本框的值填充为’100’、通过链接文本内容来点击对应的链接、点击所有class为’j-gotonext’的链接等操作。最后通过递归调用,循环执行任务。
题外话:解决mooc提示并发限制
的办法之一是将每份批改之间的等待时间设置为随机,避免使用固定等待时间。