学习通刷脸提醒脚本

几分钟刷一次脸,无论是预习复习,还是刷课,都不方便。这门课给我很大的割裂感:诊断是一门很重要的学科,很厚的书,知识点很多,而这学期只“值”1.5的学分;对比之下,有“水课”之嫌的某些课程却有2.0学分甚至更高。人脸识别本意防止部分同学刷课,希望他们认真学习,可是面对有些不懂的知识点,想学习的时候就要被经常打断。有点就像游戏的D加密,防止盗版的同时,游戏性能下降也给正版玩家造成不便,可谓是杀敌一千,自损八百。因为一个学期要看的课实在太多,不可能面面俱到,只能挑重点看。

思路:AutoxJs检测学习通的刷脸弹窗的元素,向局域网的发送消息;局域网的另外一台设备在nodejs环境下运行js文件:监听指定端口的请求,然后向本设备发送通知,提醒做其他事的人刷脸。

具体步骤如下步骤:

AutoxJs:不需要Root权限 的 JavaScript 自动化软件.

官网 开源地址

手机端思路

  1. 学习通出现刷脸弹窗
  2. AutoxJs脚本检测到刷脸弹窗
  3. AutoxJs脚本向局域网

电脑端思路

  1. 安装nodejs环境
  2. 运行一个js脚本,监听来自局域网的请求
  3. 收到请求向电脑发出弹窗提醒(node-notifier)

部分代码:

手机端(client.js)

局域网IP地址不一样,这里不贴代码,感兴趣可以自己写。

1
2
3
// text("请授权通过人脸识别进行身份验证").findOnce()   不建议用这个,因为有时候AutoxJs不能正确的分析页面结构,导致这个控件没有被检测到
text("人脸识别").id("toolbar_tv_title").findOnce() //这是人脸识别控件标志之一
id("land_start").desc("暂停").findOnce() //这是播放完毕控件标志之一

电脑端(server.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
36
37
38
39
const http = require('http')  
const notifier = require('node-notifier'); //需要npm下载
const os = require('os');
function getWlanIP() {
const interfaces = os.networkInterfaces();
// 遍历所有网络接口
for (const interfaceName in interfaces) {
// 判断接口名是否包含 "Wi-Fi" 或 "WLAN",如果是其他语言系统,可能需要调整名称
if (interfaceName.includes("Wi-Fi") || interfaceName.includes("WLAN")) {
for (const alias of interfaces[interfaceName]) {
// 筛选出 IPv4 且非本地回环地址
if (alias.family === 'IPv4' && !alias.internal) {
return alias.address;
}
}
}
}
return '无线局域网IP地址未找到';
}
const wlanIP = getWlanIP();
console.log("无线局域网适配器 WLAN 的 IP 地址:", wlanIP);
http.createServer((req, res) => {
title = "类型错误"
let url = req.url
if (url == "/1") {
title = '狗日的学习通又要扫脸了'
} else if (url == "/2") {
title = '视频播放完毕'
}
notifier.notify({
title: title,
message: 'js是世界上最好的语言!',
wait: false,
timeout: 1,
});
res.statusCode = 200
res.end('响应成功');
console.log(url);
}).listen(1315, wlanIP) //我监听的是1315端口和wlan的IP

效果:

1