Nexmoe

Nexmoe

一个开发者。关于勇敢与热爱,互联网/创造/赛博朋克
twitter
github

在樹莓派上掛自動簽到腳本

由於某學習平台屏蔽了腾訊雲和阿里雲這兩家服務商的 IP,我就把我 15 年買的古董樹莓派 3B 翻了出來用來跑腳本。

由於我的樹莓派不是全天 24 小時供電的,不能保證永久在線,所以我希望開機就自動啟動的我腳本。

然後我希望我的腳本僅在有簽到的時候通過 Server 醬通知我。

刷入系統#

SD 卡這東西說實話在如今已經很少見了,我在家到處翻才翻到一張雜牌的 8G 卡,不過能用就行,現在樹莓派刷入系統真方便,直接用官方的軟體就行。

幹掉 Python2 換上 Python3#

正當我以為能直接跑腳本的時候 ,我才知道樹莓派默認用的 Python2,所以第二步就是幹掉 Python2 換上 Python3 了,終端中運行

sudo apt remove python # 卸載 Python2 
sudo apt autoremove # 清理 Python2
sudo apt install python3 # 一般系統已經有 Python3 了,這步可以跳過
sudo ln -s /usr/bin/python3.7 /usr/bin/python #	創建一個新的連結指向 Python3

Clone 腳本#

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#

終端中運行

sudo apt install screen

開機自動運行腳本#

/home/pi/Desktop/ 新建 start.sh 方便編輯查找,內容如下

#!/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 方便編輯查找,內容如下

#!/bin/sh

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

終端中運行

sudo nano /etc/rc.local

exit 0 上插入如下代碼以讓系統在啟動時自動運行 start.sh

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

編輯完成後按組合鍵 Ctrl+O 回車保存,然後就可以重啟樹莓派了,重啟後在終端輸入

screen -r chaoxing

查看腳本是否運行正常

(擴展)僅有簽到時通過 Server 醬通知#

2021 年 9 月 17 日:不是很懂 python,改了過後貌似簽到成功了也不會通知。

腳本默認在每次運行時都會進行通知,頻率很高非常煩人。所以做此修改。

修改 chaoxing_auto_sign\local\message.py 的代碼為

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
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。