自动填报学生健康日报
myetyet

背景

众所周知,每天填报学生健康日报真的是一件很麻烦的事,万一某天忘记填报了还会被班委和辅导员催。
其实这个程序在《Excelで自動に体温を申告し方》之前就已经写好了,现于myetyet ブログ开源。

源码

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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
import json
import random
import requests
import sys
import time
from bs4 import BeautifulSoup

sess = requests.session()
login_url = "http://ids.nuist.edu.cn/amserver/UI/Login"
login_data = {
"IDToken1": sys.argv[1],
"IDToken2": sys.argv[2],
"goto": "",
"encoded": "false",
"gx_charset": "UTF-8"
}
sess.post(login_url, data=login_data)
jkrb1_url = "http://e-office2.nuist.edu.cn/infoplus/form/XNYQSB/start"
jkrb1_res = sess.get(jkrb1_url)
soup = BeautifulSoup(jkrb1_res.text, "html.parser")
jkrb2_url = "http://e-office2.nuist.edu.cn/infoplus/interface/start"
csrfToken = soup.find("meta", {"itemscope": "csrfToken"}).get("content")
jkrb2_data = {
"idc": soup.find("input", id="idc").get("value"),
"release": soup.find("input", id="release").get("value"),
"csrfToken": csrfToken,
"formData": '{"_VAR_URL":"http://e-office2.nuist.edu.cn/infoplus/form/XNYQSB/start","_VAR_URL_Attr":"{}"}'
}
jkrb2_res = sess.post(jkrb2_url, data=jkrb2_data)
jkrb3_url = jkrb2_res.json()["entities"][0]
print(jkrb3_url)
stepId = jkrb3_url.split("form/")[1].split("/")[0]
jkrb4_url = "http://e-office2.nuist.edu.cn/infoplus/interface/render"
jkrb4_data = {
"stepId": stepId,
"instanceId": "",
"admin": "false",
"rand": str(random.random() * 1000.0),
"width": "955",
"lang": "zh",
"csrfToken": csrfToken
}
jkrb4_headers = {
"Referer": "http://e-office2.nuist.edu.cn/infoplus/form/{}/render".format(stepId)
}
jkrb4_res = sess.post(jkrb4_url, data=jkrb4_data, headers=jkrb4_headers)
jkrb4_json = jkrb4_res.json()["entities"][0]["data"]
jkrb5_url = "http://e-office2.nuist.edu.cn/infoplus/interface/doAction"
jkrb5_data_formData = {
"_VAR_EXECUTE_INDEP_ORGANIZE_Name": jkrb4_json["_VAR_EXECUTE_INDEP_ORGANIZE_Name"],
"_VAR_ACTION_INDEP_ORGANIZES_Codes": jkrb4_json["_VAR_ACTION_INDEP_ORGANIZES_Codes"],
"_VAR_ACTION_REALNAME": jkrb4_json["_VAR_ACTION_REALNAME"],
"_VAR_ACTION_ORGANIZE": jkrb4_json["_VAR_ACTION_ORGANIZE"],
"_VAR_EXECUTE_ORGANIZE": jkrb4_json["_VAR_EXECUTE_ORGANIZE"],
"_VAR_ACTION_INDEP_ORGANIZE": jkrb4_json["_VAR_ACTION_INDEP_ORGANIZE"],
"_VAR_ACTION_INDEP_ORGANIZE_Name": jkrb4_json["_VAR_ACTION_INDEP_ORGANIZE_Name"],
"_VAR_ACTION_ORGANIZE_Name": jkrb4_json["_VAR_ACTION_ORGANIZE_Name"],
"_VAR_EXECUTE_ORGANIZES_Names": jkrb4_json["_VAR_EXECUTE_ORGANIZES_Names"],
"_VAR_OWNER_ORGANIZES_Codes": jkrb4_json["_VAR_OWNER_ORGANIZES_Codes"],
"_VAR_ADDR": jkrb4_json["_VAR_ADDR"],
"_VAR_OWNER_ORGANIZES_Names": jkrb4_json["_VAR_OWNER_ORGANIZES_Names"],
"_VAR_URL": jkrb4_json["_VAR_URL"],
"_VAR_EXECUTE_ORGANIZE_Name": jkrb4_json["_VAR_EXECUTE_ORGANIZE_Name"],
"_VAR_RELEASE": jkrb4_json["_VAR_RELEASE"],
"_VAR_NOW_MONTH": jkrb4_json["_VAR_NOW_MONTH"],
"_VAR_ACTION_USERCODES": jkrb4_json["_VAR_ACTION_USERCODES"],
"_VAR_ACTION_EMAIL": jkrb4_json["_VAR_ACTION_EMAIL"],
"_VAR_ACTION_ACCOUNT": jkrb4_json["_VAR_ACTION_ACCOUNT"],
"_VAR_ACTION_INDEP_ORGANIZES_Names": jkrb4_json["_VAR_ACTION_INDEP_ORGANIZES_Names"],
"_VAR_OWNER_ACCOUNT": jkrb4_json["_VAR_OWNER_ACCOUNT"],
"_VAR_ACTION_ORGANIZES_Names": jkrb4_json["_VAR_ACTION_ORGANIZES_Names"],
"_VAR_STEP_CODE": jkrb4_json["_VAR_STEP_CODE"],
"_VAR_OWNER_USERCODES": jkrb4_json["_VAR_OWNER_USERCODES"],
"_VAR_EXECUTE_ORGANIZES_Codes": jkrb4_json["_VAR_EXECUTE_ORGANIZES_Codes"],
"_VAR_NOW_DAY": jkrb4_json["_VAR_NOW_DAY"],
"_VAR_OWNER_EMAIL": jkrb4_json["_VAR_OWNER_EMAIL"],
"_VAR_OWNER_REALNAME": jkrb4_json["_VAR_OWNER_REALNAME"],
"_VAR_NOW": jkrb4_json["_VAR_NOW"],
"_VAR_URL_Attr": jkrb4_json["_VAR_URL_Attr"],
"_VAR_ENTRY_NUMBER": jkrb4_json["_VAR_ENTRY_NUMBER"],
"_VAR_EXECUTE_INDEP_ORGANIZES_Names": jkrb4_json["_VAR_EXECUTE_INDEP_ORGANIZES_Names"],
"_VAR_STEP_NUMBER": jkrb4_json["_VAR_STEP_NUMBER"],
"_VAR_POSITIONS": jkrb4_json["_VAR_POSITIONS"],
"_VAR_EXECUTE_INDEP_ORGANIZES_Codes": jkrb4_json["_VAR_EXECUTE_INDEP_ORGANIZES_Codes"],
"_VAR_EXECUTE_POSITIONS": jkrb4_json["_VAR_EXECUTE_POSITIONS"],
"_VAR_ACTION_ORGANIZES_Codes": jkrb4_json["_VAR_ACTION_ORGANIZES_Codes"],
"_VAR_EXECUTE_INDEP_ORGANIZE": jkrb4_json["_VAR_EXECUTE_INDEP_ORGANIZE"],
"_VAR_NOW_YEAR": jkrb4_json["_VAR_NOW_YEAR"],
"groupMQJCRList": [0],
"fieldFLid": jkrb4_json["fieldFLid"],
"fieldSQSJ": jkrb4_json["fieldSQSJ"],
"fieldJBXXxm": jkrb4_json["fieldJBXXxm"],
"fieldJBXXxm_Name": jkrb4_json["fieldJBXXxm_Name"],
"fieldJBXXgh": jkrb4_json["fieldJBXXgh"],
"fieldJBXXxb": jkrb4_json["fieldJBXXxb"],
"fieldJBXXxb_Name": jkrb4_json["fieldJBXXxb_Name"],
"fieldJBXXlxfs": jkrb4_json["fieldJBXXlxfs"],
"fieldJBXXdw": jkrb4_json["fieldJBXXdw"],
"fieldJBXXdw_Name": jkrb4_json["fieldJBXXdw_Name"],
"fieldJBXXnj": jkrb4_json["fieldJBXXnj"],
"fieldJBXXsfzh": jkrb4_json["fieldJBXXsfzh"],
"fieldJBXXJG": jkrb4_json["fieldJBXXJG"],
"fieldJBXXcsny": "",
"fieldJBXXfdyxm": jkrb4_json["fieldJBXXfdyxm"],
"fieldJBXXfdyxm_Name": jkrb4_json["fieldJBXXfdyxm_Name"],
"fieldJBXXfdygh": jkrb4_json["fieldJBXXfdygh"],
"fieldJBXXjgs": jkrb4_json["fieldJBXXjgs"],
"fieldJBXXjgs_Name": jkrb4_json["fieldJBXXjgs_Name"],
"fieldJBXXjgshi": jkrb4_json["fieldJBXXjgshi"],
"fieldJBXXjgshi_Name": jkrb4_json["fieldJBXXjgshi_Name"],
"fieldJBXXjgshi_Attr": '{"_parent":"{' + jkrb4_json["fieldJBXXjgs"] + '}"}',
"fieldJBXXjgq": jkrb4_json["fieldJBXXjgq"],
"fieldJBXXjgq_Name": jkrb4_json["fieldJBXXjgq_Name"],
"fieldJBXXjgq_Attr": '{"_parent":"{' + jkrb4_json["fieldJBXXjgshi"] + '}"}',
"fieldJBXXjgsjtdz": jkrb4_json["fieldJBXXjgsjtdz"],
"fieldJBXXjjlxr": jkrb4_json["fieldJBXXjjlxr"],
"fieldJBXXjjlxrdh": jkrb4_json["fieldJBXXjjlxrdh"],
"fieldSTQKsfstbs": jkrb4_json["fieldSTQKsfstbs"],
"fieldSTQKks": jkrb4_json["fieldSTQKks"],
"fieldSTQKgm": jkrb4_json["fieldSTQKgm"],
"fieldSTQKfs": jkrb4_json["fieldSTQKfs"],
"fieldSTQKfl": jkrb4_json["fieldSTQKfl"],
"fieldSTQKhxkn": jkrb4_json["fieldSTQKhxkn"],
"fieldSTQKfx": jkrb4_json["fieldSTQKfx"],
"fieldSTQKqt": jkrb4_json["fieldSTQKqt"],
"fieldSTQKqtms": jkrb4_json["fieldSTQKqtms"],
"fieldSTQKfrtw": str(random.randint(366, 370) / 10),
"fieldSTQKqtqksm": jkrb4_json["fieldSTQKqtqksm"],
"fieldSTQKdqstzk": jkrb4_json["fieldSTQKdqstzk"],
"fieldSTQKglsjrq": "",
"fieldSTQKglsjsf": "",
"fieldSTQKfrsjrq": "",
"fieldSTQKfrsjsf": "",
"fieldCXXXcxzt": jkrb4_json["fieldCXXXcxzt"],
"fieldCXXXjtzz": jkrb4_json["fieldCXXXjtzz"],
"fieldCXXXjtzz_Name": jkrb4_json["fieldCXXXjtzz_Name"],
"fieldCXXXjtzzs": jkrb4_json["fieldCXXXjtzzs"],
"fieldCXXXjtzzs_Name": jkrb4_json["fieldCXXXjtzzs_Name"],
"fieldCXXXjtzzs_Attr": '{"_parent":"{' + jkrb4_json["fieldCXXXjtzz"] + '}"}',
"fieldCXXXjtzzq": jkrb4_json["fieldCXXXjtzzq"],
"fieldCXXXjtzzq_Name": jkrb4_json["fieldCXXXjtzzq_Name"],
"fieldCXXXjtzzq_Attr": '{"_parent":"{' + jkrb4_json["fieldCXXXjtzzs"] + '}"}',
"fieldCXXXjtjtzz": jkrb4_json["fieldCXXXjtjtzz"],
"fieldCXXXfxxq": jkrb4_json["fieldCXXXfxxq"],
"fieldCXXXfxxq_Name": jkrb4_json["fieldCXXXfxxq_Name"],
"fieldCXXXssh": jkrb4_json["fieldCXXXssh"],
"fieldCXXXdqszd": jkrb4_json["fieldCXXXdqszd"],
"fieldCXXXcqwdq": jkrb4_json["fieldCXXXcqwdq"],
"fieldCXXXfxcfsj": "",
"fieldCXXXjtfsfj": jkrb4_json["fieldCXXXjtfsfj"],
"fieldCXXXjtfshc": jkrb4_json["fieldCXXXjtfshc"],
"fieldCXXXjtfsdb": jkrb4_json["fieldCXXXjtfsdb"],
"fieldCXXXjtfspc": jkrb4_json["fieldCXXXjtfspc"],
"fieldCXXXjtfslc": jkrb4_json["fieldCXXXjtfslc"],
"fieldCXXXjtfsqt": jkrb4_json["fieldCXXXjtfsqt"],
"fieldCXXXjtfsqtms": jkrb4_json["fieldCXXXjtfsqtms"],
"fieldCXXXjtgjbc": jkrb4_json["fieldCXXXjtgjbc"],
"fieldYQJLjrsfczbl": jkrb4_json["fieldYQJLjrsfczbl"],
"fieldYQJLjrsfczbldqzt": jkrb4_json["fieldYQJLjrsfczbldqzt"],
"fieldYQJLsfjcqtbl": jkrb4_json["fieldYQJLsfjcqtbl"],
"fieldCXXXsftjwh": jkrb4_json["fieldCXXXsftjwh"],
"fieldCXXXsftjhb": jkrb4_json["fieldCXXXsftjhb"],
"fieldCXXXsftjhbs": jkrb4_json["fieldCXXXsftjhbs"],
"fieldCXXXsftjhbs_Name": jkrb4_json["fieldCXXXsftjhbs_Name"],
"fieldCXXXsftjhbs_Attr": '{"_parent":"420000"}',
"fieldCXXXsftjhbq": jkrb4_json["fieldCXXXsftjhbq"],
"fieldCXXXsftjhbq_Name": jkrb4_json["fieldCXXXsftjhbq_Name"],
"fieldCXXXsftjhbq_Attr": '{"_parent":""}',
"fieldCXXXsftjhbjtdz": jkrb4_json["fieldCXXXsftjhbjtdz"],
"fieldYC": jkrb4_json["fieldYC"],
"fieldMQJCRxh": [1],
"fieldMQJCRxm": [""],
"fieldMQJCRlxfs": [""],
"fieldMQJCRcjdd": [""],
"fieldCNS": True,
"_VAR_ENTRY_NAME": u"\u5b66\u751f\u5065\u5eb7\u72b6\u51b5\u7533\u62a5", # 学生健康状况申报
"_VAR_ENTRY_TAGS": u"\u5b66\u5de5\u90e8" # 学工部
}
jkrb5_data = {
"actionId": "1",
"formData": json.dumps(jkrb5_data_formData),
"remark": "",
"rand": str(random.random() * 1000.0),
"nextUsers": "{}",
"stepId": str(stepId),
"timestamp": str(int(time.time())),
"boundFields": "fieldCXXXjtgjbc,fieldMQJCRxh,fieldCXXXsftjhb,fieldSTQKqt,fieldSTQKglsjrq,\
fieldYQJLjrsfczbldqzt,fieldCXXXjtfsqtms,fieldCXXXjtfsfj,fieldJBXXjjlxrdh,fieldJBXXxm,\
fieldJBXXjgsjtdz,fieldSTQKfrtw,fieldMQJCRxm,fieldCXXXsftjhbq,fieldSTQKqtms,\
fieldCXXXjtfslc,fieldJBXXlxfs,fieldJBXXxb,fieldCXXXjtfspc,fieldYQJLsfjcqtbl,\
fieldCXXXssh,fieldJBXXgh,fieldCNS,fieldYC,fieldSTQKfl,\
fieldCXXXsftjwh,fieldCXXXfxxq,fieldSTQKdqstzk,fieldSTQKhxkn,fieldSTQKqtqksm,\
fieldFLid,fieldYQJLjrsfczbl,fieldJBXXjjlxr,fieldCXXXfxcfsj,fieldMQJCRcjdd,\
fieldSQSJ,fieldSTQKfrsjrq,fieldSTQKks,fieldJBXXcsny,fieldSTQKgm,\
fieldJBXXnj,fieldCXXXjtzzq,fieldJBXXJG,fieldCXXXdqszd,fieldCXXXjtzzs,\
fieldSTQKfx,fieldSTQKfs,fieldCXXXjtfsdb,fieldCXXXcxzt,fieldCXXXjtfshc,\
fieldCXXXjtjtzz,fieldCXXXsftjhbs,fieldJBXXsfzh,fieldSTQKsfstbs,fieldCXXXcqwdq,\
fieldJBXXfdygh,fieldJBXXjgshi,fieldJBXXfdyxm,fieldCXXXjtzz,fieldJBXXjgq,\
fieldCXXXjtfsqt,fieldJBXXjgs,fieldSTQKfrsjsf,fieldSTQKglsjsf,fieldJBXXdw,\
fieldCXXXsftjhbjtdz,fieldMQJCRlxfs",
"csrfToken": csrfToken,
"lang": "zh"
}
jkrb5_res = sess.post(jkrb5_url, jkrb5_data)
print(jkrb5_res.json())

使用方法

  1. 利用命令pip install bs4安装bs4包,若已安装可跳过。
  2. 复制上述源码保存至任意位置,命名为jkrb.py
  3. 切换至源码所在文件夹,在命令行中输入python jkrb.py 学号 信息门户密码
  4. 若成功运行,则会输出以下类似的内容:
    1
    2
    http://e-office2.nuist.edu.cn/infoplus/form/*****/render
    {"errno": 0, "ecode": "SUCCEED", "entities": [{"stepId": 2, "name": "提交", "code": "autoStep1", "status": 0, "type": "Auto", "flowStepId": 0, "executorSelection": 0, "timestamp": 0, "posts": [], "users": [], "parallel": false, "hasInstantNotification": false, "hasCarbonCopy": false, "entryId": *****, "entryStatus": 0, "entryRelease": false}]}

注意

  1. 源码第127行对应填报的体温,默认为36.636.736.836.937.0中随机选择一个。
  • 本文标题:自动填报学生健康日报
  • 本文作者:myetyet
  • 创建时间:2020-04-30 13:35:21
  • 本文链接:https://myetyet.github.io/posts/d1ee8702/
  • 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
 评论