惟愿言行合一,砥砺前行

0%

hust公选脚本

前言

  由于官网修复了左右翻页重新获取数据的bug,原脚本不再适用,需刷新之后重新进才可以实现页面更新。所以要不用下auto.js?(手机)
  auto.js挺简单的,但是拿手机蹲很容易没电而且不能玩手机。同时不知道你们的浏览器刷新键是否叫做刷新,兼容性不一定强。

test.js

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
var m = require("module.js");
var name = "城市与文化遗产(在线课程)"; //课堂全名
var key = "20202w125011001"; //课堂编号
var number = "189/190"; //期望人数
var type = "历史与文化(原 人文社会科学类)"; //课程类型
var c = desc("刷新").findOne();
while (true) {
if (text("选课系统更新公告").findOne(100)) {
sleep(50);
desc("选课").findOne().click();
sleep(50);
} else if (text("选课提示信息").findOne(100)) {
m.clicktext("下一步");
sleep(50);
} else if (text(key).findOne(100)) {
if (text(number).findOne(100)) {
home();
break;
} else {
sleep(50);
c.click();
sleep(50);
}
} else if (text(name).findOne(100) && text(type).findOne(100)) {
m.clicktext("查看课堂");
sleep(100);
} else if (text("课程名称: ").findOne(100)) {
sleep(50);
input(name);
sleep(50);
m.clicktext("查询");
sleep(100);
}
sleep(100);
}

module.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var m = {};
m.clicktext = (item) => {
while (true) {
var a = text(item).findOne(1000);
if (a) {
a = a.bounds();
if (a) {
var x = a.centerX();
var y = a.centerY();
click(x, y);
break;
}
}
}
}
module.exports = m;

使用方法

  1. 下载Auto.js;
  2. 浏览器调至电脑版;
  3. 复制粘贴成两个文件,test.js,module.js;
  4. 修改test.js的name,key,number;
  5. 运行test.js;
  6. 打开选课页面并登录进入首页,会发现脚本已经开始运行,将页面缩放至最小。

    以下是原博客,已经不太行了

    1. 撰写过程中学到的几点

    一、如何用js绕开页面中的confirm判断。

    这里的页面本身非常简陋,直接把按钮对应的原函数写了出来。
    所以我采用的方法是直接改变按钮的onclick事件,并重写onclick事件对应的函数,覆盖掉,把其中的confirm去掉。非常简单粗暴。
1
2
3
4
var what1=document.getElementsByTagName("input")[10];
what1.onclick =function () {
selectKT(what1.id,nowRenshu,renshu,where.cells[2].innerText,bianhao,xuefen);
};

后话:由于学校网站经久失修,其实只要读取对应的并且填写表单即可,即使用抓包和发包之类的也很容易,根本就不需要用js模拟。

二、修改网页DOM元素,给使用者一点小惊喜

本来页面上想蹲的课的按钮是“选课”,由于改页面元素着实简单,顺手改成“加油”了,自我感觉极好,但是这里有一个需要注意的点。(看代码)

1
2
3
4
5
6
what1.value = '加油';
var btn=document.creatElement("button");
btn.onclick=function(){
what1.value = '加油';
};
btn.onclick();

我这里额外加了一个btn按钮,而不是只修改value值。因为众所周知,这玩意改完之后不会立即重新渲染。(也就是,只写第一行代码是基本没用的)所以添加一个小小的点击事件就能让它立即生效。

三、sleep函数在js中的极有效写法

不瞒您说,这个sleep函数我抄的。但是真的好香,记小本本。

1
2
3
4
5
6
7
8
9
10
function sleep(n) {
var start = new Date().getTime();
// console.log('休眠前:' + start);
while (true) {
if (new Date().getTime() - start > n) {
break;
}
}
// console.log('休眠后:' + new Date().getTime());
}

四、油猴的脚本和朴素的js代码的区别

区别极小,只是它需要加一个头,而且这个头必须加(开头被注释掉的那一大片)。好像不止可以用js,还可以用别的语言,可惜我不会。至于这个头怎么写嘛,这里讲的还不错,随便看一下先入个门就行

五、油猴是啥?咋用?(这个是顺便一提)

这篇文章,往下翻,包安装包会。这篇文章我也发在了csdn上,mooc小助手那篇。

2. 使用说明

清空并复制粘贴以下代码。并阅读下面的说明。

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
// ==UserScript==
// @name 华科公选抢课
// @namespace http://tampermonkey.net/
// @version 0.1.3
// @description 抢课前后刷新,并自动选课
// @author shandianchengzi
// @require http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js
// @match http://*/*
// @grant none
// @include http://wsxk.hust.edu.cn/*
// ==/UserScript==
var shuaxin=500;//刷新频率(单位毫秒)
function sleep(n) {
var start = new Date().getTime();
// console.log('休眠前:' + start);
while (true) {
if (new Date().getTime() - start > n) {
break;
}
}
// console.log('休眠后:' + new Date().getTime());
}

function selectKT(ktbh,ktrl,ktrs,kcmc,kcbh,kczxf){
document.getElementById("ktbh").value=ktbh;
document.getElementById("ktrl").value=ktrl;
document.getElementById("ktrs").value=ktrs;
document.getElementById("kcmc1").value=kcmc;
document.getElementById("kczxf").value=kczxf;
document.getElementById("kcbh").value=kcbh;
document.form.submit();
}
(function() {
;

var what = document.getElementsByTagName("table")[0].rows[3];
var what3=what.cells[0].className;
if(what3=="pagebar"){
var where=document.getElementsByTagName("table")[0].rows[2];
var what10=where.cells[9].innerText;
var what2=where.cells[2].innerHTML;
var xuefen=where.cells[4].innerText.split('/')[1];
var bianhao=what2.split('=\'+')[1];
bianhao=bianhao.split(')')[0];
var renshu=what10.split('/')[1];
var nowRenshu=what10.split('/')[0];
var bili=renshu+'/'+renshu;
var noChance=what10.indexOf(bili);

var what1=document.getElementsByTagName("input")[10];
what1.value = '加油';
var btn=document.creatElement("button");
btn.onclick=function(){
what1.value = '加油';
};
btn.onclick();
what1.onclick =function () {
selectKT(what1.id,nowRenshu,renshu,where.cells[2].innerText,bianhao,xuefen);};

if(noChance!= -1)
{
history.go(-1);
}
else {
what1.onclick();
return;}
}
else history.go(1);
sleep(shuaxin);
// Your code here...
})();

使用说明:

  1. 前提:你没有满课。
  2. 来到华中大选课的页面,左上角按课堂选课,然后打开脚本。
  3. 查询你想蹲的课程并回车。
  4. 然后就会自动刷了。过程略鬼畜,如果有人退了就会自动抢。不可以挂后台,请让这个页面一直在窗口上,可以把窗口拉到很小,然后用DeskPins固定不管。

补充说明:
5. 其他的浏览器不清楚,谷歌是可以的。
6. 暂时只支持课程名称查询之后只有一个结果的课,比如华科学子走世界查得到很多课,这个就不支持。
7. 如果觉得刷新频率不满意,把开头的shuaxin改成对应的毫秒数。
8. 放弃刷这一门了就先停止脚本,再打开别的重复1~4步骤。刷到了脚本会自动挂掉,但是也要手动关上,不然可能会继续重复跳页面。