0%

TOEFL Available Seats Auto Query with JavaScript

托福考位自动查询爬虫 浏览器Javascript版

托福考位太难抢了,不想一遍遍手动刷新。

想安静地做一条咸鱼

简介

改编自 GitHub上 @Augustpan同学 的爬虫代码,增加了筛选日期和城市的功能(全爬一遍太慢了),代码见下。

使用方法

  • 修改代码中的时间和城市限制,我这里时间是限制今年10月及以后,城市是限制了我可能会去的城市(见代码中的注释);
  • 使用Chrome或类似浏览器,登录NEEA账号,进入“考位查询”界面,打开控制台(Windows F12,macOS ⌘+⌥+j);
  • 粘贴下面代码后回车运行,然后就会依次打印出有名额的记录;
  • 因为NEEA反爬虫比较厉害所以查询间隔做得比较久

代码

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
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}

function checkDate(dateStr) {
y = dateStr.indexOf("年");
m = dateStr.indexOf("月");
d = dateStr.indexOf("日");

// year_n = dateStr.substring(0, y);
month_n = dateStr.substring(y + 1, m);
// day_n = dateStr.substring(m + 1, d);

// 这里用来筛选时间,下面一段表示只考虑10月份之后的
if (month_n >= 10) return true;
return false;
}

city = document.getElementById("centerProvinceCity");
day = document.getElementById("testDays");
btn_query = document.getElementById("btnQuerySeat");
// 想查看的城市列表
cityList = [
"北京",
"南京",
"苏州",
"扬州",
"青岛",
"上海",
"天津",
"杭州",
"宁波",
"温州",
];

for (i = 1; i < city.options.length; ++i) {
city.options[i].selected = true;
cityName = city.options[i].innerText;
if (cityList.indexOf(cityName) === -1) continue;
console.log("开始检查城市:" + cityName);

for (j = 1; j < day.options.length; ++j) {
if (!checkDate(day.options[j].innerText)) continue;
day.options[j].selected = true;
btn_query.click();

await sleep(1500);
tables = document.getElementsByClassName(
"table table-bordered table-striped"
);
if (tables.length == 1) {
tb = tables[0];
for (row = 2; row < tb.rows.length; ++row) {
if (tb.rows[row].cells[3].innerText == "有名额") {
console.log(
city.options[i].innerText,
day.options[j].innerText,
tb.rows[row].cells[1].innerText,
// tb.rows[row].cells[2].innerText,
tb.rows[row].cells[3].innerText
);
}
}
}
}
}

祝大家早日抢到考位!