-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathback.py
137 lines (112 loc) · 5.01 KB
/
back.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/usr/bin/python3
import requests
import datetime
import re
import execjs
import sys
import json
def login(sess, uname, pwd):
salt_url = 'http://ehall.seu.edu.cn/qljfwapp2/sys/lwReportEpidemicSeu/index.do'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/10'}
salt_response = sess.get(salt_url, headers=headers)
salt_response.encoding = 'utf-8'
lt = re.search('name="lt" value="(.*?)"', salt_response.text).group(1)
salt = re.search('id="pwdDefaultEncryptSalt" value="(.*?)"',
salt_response.text).group(1)
execution = re.search('name="execution" value="(.*?)"',
salt_response.text).group(1)
f = open("encrypt.js", 'r', encoding='UTF-8')
line = f.readline()
js = ''
while line:
js = js + line
line = f.readline()
ctx = execjs.compile(js)
password = ctx.call('_ep', pwd, salt)
login_url = 'https://newids.seu.edu.cn/authserver/login?service=http%3A%2F%2Fehall.seu.edu.cn%2Fqljfwapp2%2Fsys%2FlwReportEpidemicSeu%2Findex.do'
personal_info = {'username': uname,
'password': password,
'lt': lt,
'dllt': 'userNamePasswordLogin',
'execution': execution,
'_eventId': 'submit',
'rmShown': '1'}
login_response = sess.post(login_url, personal_info, headers=headers)
login_response.encoding = 'utf-8'
if re.search("学院", login_response.text):
print("登陆成功!")
else:
print("登陆失败!请检查一卡通号和密码。")
raise
def get_header(sess, cookie_url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/10'}
cookie_response = sess.get(cookie_url, headers=headers)
weu = requests.utils.dict_from_cookiejar(cookie_response.cookies)['_WEU']
cookie = requests.utils.dict_from_cookiejar(sess.cookies)
header = {'Referer': 'http://ehall.seu.edu.cn/qljfwapp2/sys/lwReportEpidemicSeu/index.do',
'Cookie': '_WEU=' + weu + '; MOD_AUTH_CAS=' + cookie['MOD_AUTH_CAS'] + ';', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/10'}
return header
def get_info(sess, header, username):
info_url = 'http://ehall.seu.edu.cn/ygfw/sys/xsqjappseuyangong/modules/wdqj/wdqjbg.do'
info_response = sess.post(
info_url, data={"XSBH": username}, headers=header)
return info_response
def back(sess, username):
cookie_url = 'http://ehall.seu.edu.cn/ygfw/sys/swpubapp/indexmenu/getAppConfig.do?appId=5869188708264821&appName=xsqjappseuyangong'
header = get_header(sess, cookie_url)
info = get_info(sess, header, username)
info.encoding = 'utf-8'
raw_info = re.search('"rows":\[(.*?)\]', info.text).group(1)
raw_info = raw_info.split("},")
leave_list = []
for item in raw_info:
if item[-1] != '}':
item += '}'
leave_list.append(json.loads(item))
post_key = ['SQBH', 'XSBH', 'SHZT', 'XJFS',
'XJSJ', 'XJRQ', 'SQR', 'SQRXM', 'THZT', 'XJZT']
for leave in leave_list:
if leave["XJZT"] == '0' and leave["SHZT"] == '99':
post_info = {}
for key in post_key:
if key in leave.keys():
if leave[key] == 'null':
post_info[key] = ''
else:
post_info[key] = leave[key]
post_info["XJFS"] = "2"
post_info["XJSJ"] = (datetime.datetime.now(
) + datetime.timedelta()).strftime("%Y-%m-%d %H:%M:%S")
post_info["XJRQ"] = (datetime.datetime.now(
) + datetime.timedelta()).strftime("%Y-%m-%d")
post_info['SQR'] = username
post_info['SQRXM'] = leave["XM"]
post_info["XJZT"] = '2'
if post_info["XJZT"] == '1':
return -1
else:
post_info.pop('XJZT')
post_info = {'data': str(post_info)}
print(post_info)
back_url = "http://ehall.seu.edu.cn/ygfw/sys/xsqjappseuyangong/modules/leaveApply/addXjApply.do"
back = sess.post(back_url, data=post_info, headers=header)
back.encoding = 'utf-8'
if back.status_code == 200:
print('销假成功!')
else:
print("销假失败!")
def main():
sess = requests.session()
try:
username = sys.argv[1]
password = sys.argv[2]
except:
username = input("一卡通号:")
password = input("密码:")
login(sess, username, password)
back(sess, username)
sess.close()
if __name__ == '__main__':
main()