西电健康卡自动填写

更详细信息请访问本人个人网站:www.xuanworld.top

一、简单介绍

本程序使用python开发,利用python规定好时间,到达设定时间后将自动将信息post到西电服务器上。

本程序建议放到服务器上运行。源代码共有两个主要文件,functions.py和main.py,还存在另一个information.json,information.json为个人的信息配置。

二、使用方法

首先在网页端打开健康卡,然后按F12进入开发者模式,准备抓包。

healthcard_1

按照正常的流程进行填写并提交,抓到提交的信息,提交的是一个叫做save的包,点击预览可以了解到包的内容,大致为以下情况:

然后在function文件中将其改为你的个人文件,就是根据你抓到的信息改

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
{"szgjcs": "",
"szcs": "",
"szgj": "",
"zgfxdq": "0",
"mjry": "0",
"csmjry": "0",
"tw": "2",
"sfcxtz": "0",
"sfjcbh": "0",
"sfcxzysx": "0",
"qksm": "",
"sfyyjc": "0",
"jcjgqr": "0",
"remark": "",
"address": "这是你的地址",
"geo_api_info": "这里面是你的gps信息",
"area": "这是你的省市县",
"province": "这是你的省",
"city": "这是你的市",
"sfzx": "0",
"sfjcwhry": "0",
"sfjchbry": "0",
"sfcyglq": "0",
"gllx": "",
"glksrq": "",
"jcbhlx": "",
"jcbhrq": "",
"bztcyy": "",
"sftjhb": "0",
"sftjwh": "0",
"sfjcjwry": "0",
"jcjg": "",
"date": "这是日期,我的代码为自动更改日期,这里不用管",
"uid": "这是你的uid",
"created": "这是一个编号",
"id": "这是你的个人id",
"gwszdd": "",
"sfyqjzgc": "",
"jcqzrq": "",
"sfjcqz": "",
"jrsfqzys": "",
"jrsfqzfy": "",
"szsqsfybl": "0",
"sfsqhzjkk": "",
"sqhzjkkys": "",
"sfygtjzzfj": "",
"gtjzzfjsj": "",
"ismoved": "0"}

在function文件中将其改为你的个人信息,就是你的西电账号和密码

1
2
3
4
{
"id_number" : "你的学号",
"password" : "你的密码"
}

将其部署到服务器上,利用nohup后台运行,命令如下

1
nohup python3 -u main.py > test.log 2>&1 &

三、源代码

main.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import datetime
import json
import functions

config = json.load(open('information.json', 'r', encoding="utf-8"))
functions.get_cookie_from_web(config['id_number'], config['password'])
print("健康卡开始进行填报")
functions.upload()
judge = 3
while True:
now = datetime.datetime.now()
if now.strftime("%H") == "06" and judge > 0:
config = json.load(open('information.json', 'r', encoding="utf-8"))
functions.get_cookie_from_web(config['id_number'], config['password'])
print("健康卡开始进行填报")
r = functions.upload()
if r:
judge = 0
else:
judge = judge - 1
if now.strftime("%H") == "07" and judge != 3:
judge = 3

functions.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
import datetime
import requests
import pickle

upload_url = "https://xxcapp.xidian.edu.cn/ncov/wap/default/save"
default_headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"User-Agent": "Mozilla/5.0 (Windows NT 11.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55",
"X-Requested-With": "XMLHttpRequest",
"Origin": "https://xxcapp.xidian.edu.cn",
"Referer": "https://xxcapp.xidian.edu.cn/ncov/wap/default/index"
}
upload_information = {
"szgjcs": "",
"szcs": "",
"szgj": "",
"zgfxdq": "0",
"mjry": "0",
"csmjry": "0",
"tw": "2",
"sfcxtz": "0",
"sfjcbh": "0",
"sfcxzysx": "0",
"qksm": "",
"sfyyjc": "0",
"jcjgqr": "0",
"remark": "",
"address": "这是你的地址",
"geo_api_info": "这里面是你的gps信息",
"area": "这是你的省市县",
"province": "这是你的省",
"city": "这是你的市",
"sfzx": "0",
"sfjcwhry": "0",
"sfjchbry": "0",
"sfcyglq": "0",
"gllx": "",
"glksrq": "",
"jcbhlx": "",
"jcbhrq": "",
"bztcyy": "",
"sftjhb": "0",
"sftjwh": "0",
"sfjcjwry": "0",
"jcjg": "",
"date": "这是日期,我的代码为自动更改日期,这里不用管",
"uid": "这是你的uid",
"created": "这是一个编号",
"id": "这是你的个人id",
"gwszdd": "",
"sfyqjzgc": "",
"jcqzrq": "",
"sfjcqz": "",
"jrsfqzys": "",
"jrsfqzfy": "",
"szsqsfybl": "0",
"sfsqhzjkk": "",
"sqhzjkkys": "",
"sfygtjzzfj": "",
"gtjzzfjsj": "",
"ismoved": "0"
}


def get_cookie_from_web(student_id, password):
cookie_file_path = 'cookie.inf'
print("程序网络检验开始")
try:
requests.get("https://xxcapp.xidian.edu.cn/site/ncov/xidiandailyup", timeout=5)
except:
print("程序错误:无法连接网络")
return False
print("程序网络检验:成功")

print("程序cookie检验")
login_check_headers = {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
"X-Requested-With": "XMLHttpRequest"
}
login_check_url = "https://xxcapp.xidian.edu.cn/uc/wap/login/check"
r = requests.post(login_check_url, data={"username": student_id, "password": password}, headers=login_check_headers)
if r.status_code == 200:
if r.json()['e'] == 0:
f = open(cookie_file_path, 'wb')
pickle.dump(r.cookies, f)
print("程序cookie检验:成功")
return True
else:
print(r.json()['m'])
print("程序错误:post成功,得到错误响应,请检查密码与学号")
return False
else:
print("程序错误:post失败,无法得到有效响应")


def get_cookie_from_local():
f = open("cookie.inf", 'rb')
return pickle.load(f)


def upload():
now = datetime.datetime.now()
upload_information['date'] = now.strftime("%Y%m%d")

r = requests.post(upload_url, cookies=get_cookie_from_local(), headers=default_headers, data=upload_information)
print("上传开始")
print(datetime.datetime.now())
print(r.text)
if r.json()['e'] == 0:
print("上报成功")
print("上传结束")
return True
else:
print("上传失败")
print("失败原因",r.json()['m'])
print("上传结束")
return False

information.json

1
2
3
4
{
"id_number" : "20009200592",
"password" : "shx69171"
}