超星尔雅/泛雅网课视频辅助

本脚本用于超星学习通视频快速学习。

// ==UserScript==
// @name 超星尔雅/泛雅网课视频辅助
// @namespace https://tampermonkey.net/
// @author WildernessRanger
// @license MIT
// @version 0.5.1
// @description 本脚本用于超星学习通视频快速学习。
// @homepage https://github.com/WRtux
// @match https://mooc1.chaoxing.com/mycourse/studentstudy*
// @match https://mooc1-1.chaoxing.com/mycourse/studentstudy*
// @match https://mooc1-3.chaoxing.com/mycourse/studentstudy*
// @match https://mooc1.chaoxing.com/mooc-ans/mycourse/studentstudy*
// @grant none
// ==/UserScript==
"use strict";

var currentElement, studySpeed;

function handleStudy() {
	if (studySpeed == null) {
		let v = Number(prompt("输入播放速度:", "2"));
		if (Number.isNaN(v) || v <= 0)
			return;
		studySpeed = v;
	}

	let doc = document.getElementById("iframe").contentDocument.getElementsByTagName("iframe")[0].contentDocument;
	let vid = doc.getElementsByTagName("video")[0];
	vid.pause = () => { throw "FxxK"; };
	vid.playbackRate = studySpeed;
	window.addEventListener("mouseout", (e) => e.stopImmediatePropagation(), true);
	let hndl = window.setInterval(() => {
		vid.playbackRate = studySpeed;
		var quiz = doc.getElementsByClassName("ans-videoquiz")[0];
		if (quiz != null) {
			var opts = quiz.getElementsByTagName("input");
			for (var i = 0; i < opts.length; i++) if (opts[i].value == "true")
				opts[i].click();
			quiz.getElementsByClassName("ans-videoquiz-submit")[0].click();
		}
	}, 1000);

	vid.addEventListener("ended", (e) => {
		window.clearInterval(hndl);
		window.setTimeout(nextStudy, 1000);
	});
	doc.getElementsByClassName("vjs-big-play-button")[0].click();
}

function nextStudy() {
	let nxt = currentElement.parentElement.nextElementSibling;
	if (nxt != null) {
		nxt.querySelectorAll("[onclick]")[0].click();
		currentElement = nxt.firstElementChild;
		window.setTimeout(handleStudy, 2000);
	} else {
		currentElement = null;
		alert("本章节已学习完成!");
	}
}

window.setTimeout(() => {
	let id = location.search.match(/(?<=(?:\?|&)(?:chapterId=))[^&]*(?=&|$)/)[0];
	currentElement = document.getElementById("cur" + id);
	let btn = document.createElement("button");
	btn.textContent = "快速学习";
	btn.addEventListener("click", (e) => handleStudy());
	document.querySelector(".content> :first-child").appendChild(btn);
	console.log("已加载超星尔雅网课视频辅助。");
}, 1000);