最近油猴上超星尔雅的挂课脚本不好使,自己弄点基础的功能先用着。脚本直接从网上Copy后发现不能直接用,应该是平台更新的缘故,经过一些列调整之后成功跑起来了,放出来造福社会

网课 Auto Play

哪些课该用脚本挂哪些课不该用脚本取决于使用者自己的认知,慎用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
var body = $("body")
var button = $("<li id='set'></li>")
button.html("<span id='start'>开启自动播放模式</span>")
var json = {
"background": "#36f",
"height": "16px",
"padding": "5px",
"z-index": 999, // Stay top
"cursor": "pointer",
"bottom": "0",
"left": "0",
"color": "#fff",
"position": "fixed"
};
button.css(json);
body.append(button)

// Index of current video
var index = 0;
$(".posCatalog_select").each((i, item) => {
if ($(item).hasClass("posCatalog_active")) {
index = i;
return false;
}
});

console.log("第" + (index + 1) + "个视频开始播放");

// Blacklist of course id, courses in this list will be skipped
var blacklist = [];

function autoNext() {
index++;
var selectID = $(".posCatalog_select")[index].id;
while (selectID.indexOf('cur') == -1 || blacklist.indexOf(selectID) != -1)
inedx++;
console.log("第" + (index + 1) + "个视频开始播放");
var next = document.querySelectorAll(".posCatalog_select")[index].querySelector(".posCatalog_name");
next.click();
}

var progressRecord = -1;

button.click(function () {

setInterval(function () {
// Get iframe
var video = $("iframe").contents().find("iframe").contents();
// Get video progress 0~100 float
var spans = video.find("#video > div.vjs-control-bar > div.vjs-progress-control.vjs-control > div").attr("aria-valuenow");
var play = function () {
if (spans == progressRecord) {
video.find("#video > button").click();
console.log("视频被暂停,已继续");
}
progressRecord = spans;
var slience = video.find("#video > div.vjs-control-bar > div.vjs-volume-panel.vjs-control.vjs-volume-panel-vertical > button");
// Mute
if (slience.attr("title") != "取消静音") {
slience.click();
}
}
var load = video.find("#loading");
if (load.css("visibility") != "hidden") {
return false;
}
if (spans != 100) {
play();
}
else {
console.log("第" + (index + 1) + "个视频播放完成");
autoNext();
}
$("#start").html("自动模式已开启,本视频进度:" + spans + "%");
}, 2000);
});

更多注解

  • Line20:找正在播放的视频的index的思路:

    • 元素审查观察右侧课程列表

      选择中的选项指向两个类,posCatalog_selectposCatalog_active,通过观察,前者是一般的选项的类,后者主要就负责显示一个蓝色的选中样式,由此,含有posCatalog_active这个类的就是被选中的视频

  • Line32:播放下一个视频的思路:

    • 一样的元素审查,见上图,虽然正常情况下只需要index++即可,但是目录的类也是posCatalog_select(比如上图中的2 劳动与人生就是一个folder,点了也就是折叠一下),观察目录类,发现其id中不含cur,可以以此和视频选卡区分开来
    • 在某些网课中,还存在除了目录类之外的二级目录,这些选卡里面没有需要刷的点,也没有视频之类的,点开就是一个空白页,而且id中还带有cur,懒得想办法,直接用黑名单,每次手动设置一下需要跳过的选卡即可
  • Line75:一旦操作过于频繁就会弹出验证码,所以SetInterval间隔稍微大一些

  • 关于倍速设置,如果直接获取html5播放器然后设置playbackRate会导致跳验证码以及设置不上,正常速度挂网课对我来说也足够了,懒得弄了就

Comments

⬆︎TOP