前言
天天一大早就被測溫員吵醒,睡很差覺,因而國慶的時候,朋友在網上找到了一個大佬的教程looyeagee並修改出了一個適合咱們學校的易班APP自動填寫的腳本洛柒塵,可是他們腳本都是要在電腦執行比較方便,可是天天懶狗就是不想動,還有就是有些測溫員在測溫的時候他們在幹別的事情就忘記填了,因而我就根據這兩位大佬的基礎上進行修改,而後就能不能不用電腦,直接用手機設置一波操做,爲了讓懶狗更加多時間不被吵醒,順便我也會加一個電腦操做教程。html
我建議仍是接受測溫員的測溫,學校這樣作是爲了每一位學生的安全,因爲今年的新冠疫情,雖然我國在抗疫得到很不錯的效果,可是目前國外還有不少人被感染了,咱們仍是不能放鬆。我這個教程只不過想懶得看手機和有時候忘記了填,就想給負責人減小一些工做負擔,仍是要囉嗦的提醒一點,必須測溫,必須測溫,必須測溫
,但願你們身體都健健康康python
注意:我這個教程就是從洛柒塵這位大佬博客基礎上再加一個電腦和手機上操做詳細的教程,這個只適合江門職業技術學院,若是是其餘學校的同窗,須要從新抓包修改,這個腳本是能夠讀到建立的全部程序,經過修改能夠提交幾天後的任務均可以,但前提是發佈人有建立這個任務(有些任務是到點才顯示出來,只有經過讀取數據才能發現)json
我是在Linux系統運行python腳本,由於懶狗就不想在window和MacOS安裝一個python環境vim
代碼
import re import time import requests import json import os import urllib def get_user(): account = [] passwd = [] state = 0 name_file = '/root/data/username.txt'; pass_file = '/root/data/password.txt'; try: f = open(name_file, mode='r'); lines = f.readlines(); for line in lines: conn = line.strip('\n'); account.append(conn); f.close(); except: state = 1; try: f = open(pass_file, mode='r'); lines = f.readlines(); for line in lines: conn = line.strip('\n'); passwd.append(conn); f.close(); except: state = 1; return account, passwd, state; def get_time_stamp(): now_time = time.localtime(time.time()); if now_time[3] == 7 or now_time[3] == 8 or now_time[3] == 9: start_time = '7:00:00'; elif now_time[3] == 11 or now_time[3] == 12 or now_time[3] == 13: start_time = '11:00:00'; elif now_time[3] >= 17 and now_time[3] <= 22: start_time = '17:30:00'; else: return 1; now_year = str(now_time[0]); now_mouth = str(now_time[1]); now_day = str(now_time[2]); fixed_time = (str(now_year + '-' + now_mouth + '-' + now_day + ' ' + start_time)); fixed_time = time.strptime(fixed_time, "%Y-%m-%d %H:%M:%S"); timestamp = int(time.mktime(fixed_time)); return timestamp; #登陸頁面 def login(account, passwd, csrf, csrf_cookies, header): params = { "account": account, "ct": 1, "identify": 1, "v": "4.7.12", "passwd": passwd } login_url = 'https://mobile.yiban.cn/api/v2/passport/login'; login_r = requests.get(login_url, params=params); login_json = login_r.json(); user_name = login_json['data']['user']['name']; access_token = login_json['data']['access_token']; return user_name, access_token; #二次認證 def auth(access_token, csrf, csrf_cookies, header): auth_first_url = 'http://f.yiban.cn/iapp/index?act=iapp7463&v=' + access_token + ''; auth_first_r = requests.get(auth_first_url, timeout=10, headers=header, allow_redirects=False).headers['Location']; verify_request = re.findall(r"verify_request=(.*?)&", auth_first_r)[0]; auth_second_url = 'https://api.uyiban.com/base/c/auth/yiban?verifyRequest=' + verify_request + '&CSRF=' + csrf; auth_result = requests.get(auth_second_url, timeout=10, headers=header, cookies=csrf_cookies); auth_cookie = auth_result.cookies; auth_json = auth_result.json(); return auth_cookie; ''' def get_complete_list(csrf,csrf_cookies,auth_cookie,header): complete_url = 'https://api.uyiban.com/officeTask/client/index/completedList?CSRF={}'.format(csrf); result_cookie = { 'csrf_token': csrf, 'PHPSESSID': auth_cookie['PHPSESSID'], 'cpi': auth_cookie['cpi'] } complete_r = requests.get(complete_url, timeout = 10, headers = header, cookies = result_cookie); task_num = len(complete_r.json()['data']); time = get_time_stamp(); for i in range(0, task_num): task_time = complete_r.json()['data'][i]['StartTime']; if time == task_time: task_id = complete_r.json()['data'][i]['TaskId']; get_task_detail(task_id, csrf, result_cookie, header); break; ''' #未完成的任務 def get_uncomplete_list(csrf, csrf_cookies, auth_cookie, header): uncomplete_url = 'https://api.uyiban.com/officeTask/client/index/uncompletedList?CSRF={}'.format(csrf); result_cookie = { 'csrf_token': csrf, 'PHPSESSID': auth_cookie['PHPSESSID'], 'cpi': auth_cookie['cpi'] } uncomplete_r = requests.get(uncomplete_url, timeout=10, headers=header, cookies=result_cookie); task_num = len(uncomplete_r.json()['data']); for i in range(0, task_num): task_time = uncomplete_r.json()['data'][i]['StartTime']; time = get_time_stamp(); if time == task_time: task_id = uncomplete_r.json()['data'][i]['TaskId']; user_state = 0; return task_id, result_cookie, user_state; break; #獲取表單信息 def get_task_detail(task_id, csrf, result_cookie, header): task_detail_url = 'https://api.uyiban.com/officeTask/client/index/detail?TaskId={0}&CSRF={1}'.format(task_id, csrf); task_detail_r = requests.get(task_detail_url, timeout=10, headers=header, cookies=result_cookie); task_result = task_detail_r.json(); task_wfid = task_result['data']['WFId']; return task_result, task_wfid; #提交表單 def task_submit(task_wfid, csrf, result_cookie, header, task_result): extend = { "TaskId": task_result['data']['Id'], "title": "任務信息", "content": [{ "label": "任務名稱", "value": task_result['data']['Title']}, { "label": "發佈機構", "value": task_result['data']['PubOrgName']}, { "label": "發佈人", "value": task_result['data']['PubPersonName']}]} data = { "0caddc48d709afde9cc4986b3a85155e": "36.5", "a4f42d8428d2d4ca3f4562ff86305eb0": { "name": "江門職業技術學院6棟宿舍樓", "location": "113.104625,22.628090", "address": "潮連街道潮連大道6號江門職業技術學院"}} params = { 'data': json.dumps(data), 'extend': json.dumps(extend) } task_submit_url = 'https://api.uyiban.com/workFlow/c/my/apply/{0}?CSRF={1}'.format(task_wfid, csrf); task_submit_r = requests.post(task_submit_url, timeout=10, headers=header, cookies=result_cookie, data=params); return task_submit_r.json()['data']; #運行程序 def start(): csrf = "365a9bc7c77897e40b0c7ecdb87806d9" csrf_cookies = { "csrf_token": csrf} header = { "Origin": "https://c.uyiban.com", "User-Agent": "yiban"} get_time_stamp(); account, passwd, state = get_user(); if state == 1: print('帳號或者密碼文件打開有誤'); exit(); if len(account) != len(passwd): print('帳號和密碼數量不一致'); exit(); for i in range(0, len(account)): print(account[i]); try: user_name, access_token = login(account[i], passwd[i], csrf, csrf_cookies, header); try: auth_cookie = auth(access_token, csrf, csrf_cookies, header); try: task_id, result_cookie, user_state = get_uncomplete_list(csrf, csrf_cookies, auth_cookie, header); try: task_result, task_wfid = get_task_detail(task_id, csrf, result_cookie, header); try: conncet = task_submit(task_wfid, csrf, result_cookie, header, task_result); if connect != '': print(user_name + '完成'); except: print(user_name + '提交成功'); except: print(''); except: print(user_name + '沒有獲取到未完成的任務'); continue; except: print(user_name + '沒有獲取到cookie'); continue; except: print(user_name + '帳號或者密碼錯誤'); continue; #腳本自動跑 if __name__ == '__main__': def time_sleep(n): while True: a = get_time_stamp(); now_time = time.localtime(time.time()); print( str(now_time[1]) + '-' + str(now_time[2]) + ' ' + str(now_time[3]) + ':' + str(now_time[4]) + ':' + str( now_time[5])); start(); if (now_time[3] >= 7 and now_time[3] <= 21): time.sleep(1800); else: time.sleep(3600); time_sleep(5);
須要修改的地方
登陸和二次認證那塊能夠不修改
get_uncomplete_list
獲取信息後每一個學校是不同的,像咱們學校有測評信息能夠查看的,但有些學校是沒有的,因此須要修改一下獲取的信息
get_task_detail
獲取的是任務表單的信息,也須要修改,好比發佈人、任務名字之類的。
task_submit
是提交數據,這裏須要提交data
和extend
,這兩個數據是不一樣的,須要本身抓包來看進行修改。
最後那個自動跑的time_sleep()是我懶得好好寫,讓他自動提交就行了,懶得去理他幾點提交了
api
電腦操做教程
注意這裏代碼插入的username.txt和password.txt路徑,所以這個名爲data文件夾裏面有3個文件,分別是username.txt、password.txt、qq.py(py的腳本名稱能夠自定義),由於這個大佬寫的代碼很不錯,直接用py遍歷文本里面的全部用戶進行批量填寫,給個贊👍安全
username.txt裏面是填寫易班賬號
password.txt裏面是填寫易班密碼
而後還要進去修改一下py腳本代碼
這裏的name能夠填學校的任何一個建築物,location這裏要填寫經緯度,經緯度必須保留小數點後6位數,例如113.10555,22.628888
,必需要用真實的經緯度,我前面的例子是隨便寫的,不能採用,能夠來這裏查詢https://jingweidu.51240.com/
而後address這裏要填寫學校的地址,若是是江門職業技術學院的同窗使用能夠不用修改。
bash
而後用python3環境來跑腳本,電腦操做教程完成,效果以下:cookie
手機操做教程(只合適安卓手機)
首先在手機安裝一個酷安應用
https://www.coolapk.com/
搜索Termux下載並安裝
app
成功安裝了
ide
pkg install python
安裝python
而後建立username.txt、password.txt、qq.py
路徑爲/data/data/com.termux/files/home/111
pkg install vim
安裝vim
比較好的方法就是用電腦鏈接安卓手機,在電腦弄好再拖進去
在電腦進行修改一下文件路徑
/data/data/com.termux/files/home/111
賦予一些權限給111文件夾
而後在username.txt裏面輸入賬號,在password.txt裏面輸入密碼
提示我沒有安裝python的requests庫,而後我用pip3 install requests
進行安裝
而後發現了有這個報錯,而後我根據提示輸入pip install --upgrade pip
執行腳本,成功
而後由於懶狗,因此咱們設置定時運行腳本用crontab工具實現
由於國內的安卓手機大部分都沒有進行root解鎖,因此沒有root權限,但能夠利用proot
工具模擬root環境
pkg install proot
安裝完成後輸入
termux-chroot
便可模擬root環境
在管理員身份下輸入exit可回到普通用戶身份
pwd命令輸入後便可看到是/home路徑即已經表明是模擬root成功,能夠進行root權限的操做
1.使用以下命令建立腳本:
vi start.sh
2.而後在 start.sh 腳本中結合自己狀況輸入內容,示例:
#!/usr/bin/bash cd /home/111 /usr/bin/python3 qq.py
效果以下:
3.而後使用以下命令,編輯定時任務:
crontab -e
而後在裏面指定何時運行什麼腳本
02 7-18/1 * * * /home/111/start.sh
crontab -e 是進去編輯定時任務
crontab -l 是展現編輯好的定時任務的指令
我這裏寫的是每個月天天早上7點到下午6點,每小時02分執行一次腳本
若是別的同窗還想喜歡設置別的時間段能夠本身再修改,下面是關於設置時間的註解
最後一步就是啓動crond服務
命令以下:
crond start 啓動服務
crond stop 關閉服務
crond restart 重啓服務
crond reload 從新載入配置
crond status 服務是否運行
通常設置完定時任務,就輸入crond reload
和crond start
就能夠了,若是是手機出現了閃退,就要輸入crond reload
、crond restart
、crond reload
、crond start
這四條命令,至於爲何必定要輸入這四條命令我也不清楚,可能手機有問題吧,若是大家手機沒問題
能夠試試只輸入前面兩條
命令看看有沒有效果吧
以上就是手機操做的因此教程部分,但願你們能認真閱讀,並多多支持個人博客,畢竟我是新開的CSDN博客,謝謝你們!!!