python打卡以及Linux自動運行python檔案
- 前因
- 分析
- python代碼
- 實作linux自動運行python檔案
- 了解crond
- 開機自啟設定
- 定時運行python檔案設定
- crond踩坑
- 總結
前因
學校弄了個每日打卡,需要我們每天打卡兩次,對于學校這種強烈的關心,我們非常感動(吃不消),為了減輕學校每天催檢的負擔,于是有了這個自動打卡
悄悄的,不要讓學校知道我們這么為它著想
分析
簽到之前是進去填資料,現在改進得簡單了,登陸后點擊一鍵簽到就行,所以,先弄出個python代碼實作登陸和簽到的功能
借鑒了一個大神師兄的代碼,他發現了登陸頁面需要提交三個引數,賬戶密碼和一個固定的引數,而點擊簽到是一個get請求,所以只要用python 的requests庫模擬正常簽到發的網路請求攜帶上正常的引數即可
而對于怎么讓這個python檔案能自動運行呢?
辦法還是有的
- 可以讓python檔案一直運行,代碼邏輯實作到點模擬簽到請求
- 可以使用win10下自帶的定時任務
但是這一個個的方法感覺好low,要一直開著電腦,那么有沒有能一直開著的電腦能給我用用,這就用到了阿里云的服務器了,服務器一般可是一直開著的呀,不用多浪費,
所以,要是把代碼放到阿里云服務器上,并像win10的定時任務一樣到點就運行,這就完美解決了
python代碼
import requests
import time
import urllib3
from bs4 import BeautifulSoup
# 禁用warning
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 填寫賬號密碼
userAccounts = [
# ['username1', 'password2'],
# ['username2', 'password2']
]
# 賬號密碼登陸后回傳請求需要headers
def login(username, password):
#登陸需要的三個引數username、password、rememberme
data = {
'username': username,
'password': password,
'rememberMe': 'false'
}
# 模擬post請求,verify=False禁用https檢測
response = requests.post(
url='簽到網址', data=data, verify=False)
# 獲取setCookie欄位
setCookie = response.headers['Set-Cookie']
# 獲取JSESSIONID
JSESSIONID = setCookie[:setCookie.index(';')]
# 模擬正常請求構造headers,很多頭其實也可以不用,資訊可以從瀏覽器的開發者模式中自己找到加上
headers = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7',
'Connection': 'keep-alive',
'Cookie': JSESSIONID,
'Host': '自己找到加上或者洗掉這個header',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
return headers
'''
點擊打卡請求是get請求,引數只有一個_=13位數字
嗯13位時間戳
所以在后面加上時間戳
那么就很簡單了
解決打卡只需模擬get請求
生成一個13位時間戳,帶上JSESSIONID即可
'''
# process函式處理打卡和簽到
def process():
# 遍歷賬號
for userAccount in userAccounts:
# 登陸,獲取headers
headers = login(userAccount[0], userAccount[1])
# 模擬打卡
r = requests.get('簽到網址?_=%d' %
(int(round(time.time() * 1000))), verify=False, headers=headers)
print('%s打卡成功' % (userAccount[0]))
# main函式呼叫process
if __name__ == '__main__':
process()
實作linux自動運行python檔案
了解crond
windows下有計劃任務,可以設定定時任務
而 crond 就是linux下用來周期性的執行某種任務或等待處理某些事件的一個守護行程

其中:
分鐘,可以是從0到59之間的任何整數,
小時,可以是從0到23之間的任何整數,
日期,可以是從1到31之間的任何整數,
月份,可以是從1到12之間的任何整數,
星期,可以是從0到7之間的任何整數,這里的0或7代表星期日,
command:要執行的命令,可以是系統命令,也可以是自己撰寫的腳本檔案
例如
#基本格式
* * * * * user command
#分 時 日 月 周 用戶 命令
#每天11.30運行該目錄下的test_main腳本
30 11 * * * /home/test_main.sh
#每分鐘執行一次
* * * * * user command
#每隔2小時執行一次
* */2 * * * user command (/表示頻率)
#每天8:30分執行一次
30 8 * * * user command
#每小時的30和50分各執行一次
30,50 * * * * user command(,表示并列)
#每個月的3號到6號的8:30執行一次
30 8 3-6 * * user command (-表示范圍)
#每個星期一的8:30執行一次
30 8 * * 1 user command (周的范圍為0-7,0和7代表周日)
開機自啟設定
用root權限編輯rc.local檔案
sudo vim /etc/rc.local

在exit 0上面編輯啟動腳本的命令
/python路徑 /檔案路徑/auto.py > /日志列印路徑/auto.log
最后重啟Linux,腳本就能自動運行并列印日志了
定時運行python檔案設定
用root權限編輯crontab檔案
sudo vim /etc/crontab

在檔案末尾添加以下命令
2 * * * * root /python路徑/python /檔案路徑/auto.py > /home/日志想存放的位置/auto.log
以上代碼的意思是每隔兩分鐘執行一次腳本并列印日志
如果已經配置了python環境,可以直接寫python,不用具體寫出python路徑
crond踩坑
網上有的博客中提到一些命令不是crond的,而是crontab
所以可能會出現下列錯誤
Unit crond.service could not be found.
這是因為Ubuntu上的服務名稱是cron不是crond,所以你的命令應該是:
service cron start
總結
所以,我們需要用到上面的自動運行python檔案,只需要把簽到的python代碼檔案上傳到服務器,然后在crontab檔案中設定每天什么時候運行就可以了,如果還要追求完美的可以再設定在一個區間時間中隨機時間選取一個時間進行簽到,同時設計出如果簽到失敗可以有郵件通知,防止由于服務器停止運行而錯過簽到
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/250151.html
標籤:其他
上一篇:MAC地址
下一篇:搭建zabbix監控服務
