折影轻梦
文章72
标签41
分类3
在树莓派上挂自挂签到脚本

在树莓派上挂自挂签到脚本

由于某学习平台屏蔽了腾讯云和阿里云这两家服务商的 IP,我就把我15年买的古董树莓派3B翻了出来用来跑脚本。

由于我的树莓派不是全天24小时供电的,不能保证永久在线,所以我希望开机就自动启动的我脚本。

然后我希望我的脚本仅在有签到的时候通过Server酱通知我。

刷入系统

SD卡这东西说实话在如今已经很少见了,我在家到处翻才翻到一张杂牌的8G卡,不过能用就行,现在树莓派刷入系统真方便,直接用官方的软件就行。

干掉 Python2 换上 Python3

正当我以为能直接跑脚本的时候 ,我才知道树莓派默认用的 Python2,所以第二步就是干掉 Python2 换上 Python3 了,终端中运行

1
2
sudo apt remove python # 卸载 Python2 
sudo apt autoremove # 清理 Python2
1
2
sudo apt install python3 # 一般系统已经有 Python3 了,这步可以跳过
sudo ln -s /usr/bin/python3.7 /usr/bin/python #	创建一个新的链接指向 Python3

Clone 脚本

1
git clone https://hub.fastgit.org/mkdir700/chaoxing_auto_sign.git # 用的 Github 加速源

配置脚本并运行测试

进入 chaoxing_auto_sign/local/config.py 对脚本进行配置

然后在终端中 cd {填你的路径}/chaoxing_auto_sign/local/ 并使用 python main.py timing 运行脚本进行测试。

gif

一切就绪,开始进入本文的重头戏。

安装 Screen

终端中运行

1
sudo apt install screen

开机自动运行脚本

/home/pi/Desktop/ 新建 start.sh 方便编辑查找,内容如下

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
 
CreateScreen()
{
        screen -dmS $1
        screen -x -S $1 -p 0 -X stuff "$2"
        screen -x -S $1 -p 0 -X stuff '\n'
}

CreateScreen "chaoxing" "/home/pi/Desktop/chaoxing.sh"

/home/pi/Desktop/ 新建 chaoxing.sh 方便编辑查找,内容如下

1
2
3
4
#!/bin/sh

cd {填你的路径}/chaoxing_auto_sign/local/
python main.py timing

终端中运行

1
sudo nano /etc/rc.local

exit 0 上插入如下代码以让系统在启动时自动运行 start.sh

1
su pi -c "exec /home/pi/Desktop/start.sh"

编辑完成后按组合键 Ctrl+O 回车保存,然后就可以重启树莓派了,重启后在终端输入

1
screen -r chaoxing

查看脚本是否运行正常

(扩展)仅有签到时通过Server酱通知

2021年9月17日:不是很懂 python,改了过后貌似签到成功了也不会通知。

脚本默认在每次运行时都会进行通知,频率很高非常烦人。所以做此修改。

修改 chaoxing_auto_sign\local\message.py 的代码为

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
from datetime import datetime

import aiohttp

from config import SERVER_CHAN_SEND_KEY


async def server_chan_send(dataset):
    """server酱将消息推送"""
    if SERVER_CHAN_SEND_KEY == '':
        return
    
    msg = ("| 账号 | 课程名 | 签到时间 | 签到状态 |\n"
           "| :----: | :----: | :------: | :------: |\n")
    msg_template = "|  {}  |  {}  | {}  |    {}    |"
    
    for datas in dataset:
        if datas:
            for data in datas:
                msg += msg_template.format(data['username'], data['name'], data['date'], data['status'])
                
            params = {
                'title': msg,
                'desp': msg
            }
            
            async with aiohttp.ClientSession() as session:
                async with session.request(
                    method="GET",
                    url="https://sctapi.ftqq.com/{}.send?title=messagetitle".format(SERVER_CHAN_SEND_KEY),
                    params=params
                ) as resp:
                    text = await resp.text()
        else:
            msg = "当前暂无签到任务!\{}".format(datetime.now().strftime('%Y年%m月%d日 %H:%M:%D'))
            break
本文作者:折影轻梦
本文链接:https://nexmoe.com/1M5ZBJX.html
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可