1
+ import sys
2
+ import requests
3
+ import re
4
+
5
+
6
+ class FuckDaily ():
7
+
8
+ def __init__ (self ):
9
+ self .username = '2203000000' # 账号
10
+ self .password = '000000' # 密码
11
+
12
+ self .severInform = '无' # sever酱通知密钥
13
+ # -------------------------------------------------------------------------------------------------------------
14
+ self .headers = {
15
+ 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0' ,
16
+ }
17
+ self .loginUrl = 'http://authserver.jit.edu.cn/authserver/login?service=http://ehallapp.jit.edu.cn/qljfwapp/sys/lwJitHealthInfoDailyClock/index.do?amp_sec_version_=1'
18
+ self .params = {
19
+ 'pageNumber' : '1'
20
+ }
21
+ self .state = ''
22
+
23
+ def login (self ):
24
+ session = requests .Session ()
25
+ response = requests .get (self .loginUrl , headers = self .headers )
26
+ # get请求,获取响应网页数据
27
+ htmls = response .content .decode ()
28
+ # 将字典转换为字符类型,用于正则表达式提取
29
+ it = re .findall ('name="lt" value="(.*?)"/>' , htmls )[0 ]
30
+ execution = re .findall ('name="execution" value="(.*?)"/>' , htmls )[0 ]
31
+ # 从get请求获取的响应网页数据,正则表达式提取lt和execution数据
32
+
33
+ cookies = requests .utils .dict_from_cookiejar (response .cookies )
34
+ # 将cookie转换为字典
35
+ route = cookies ['route' ]
36
+ JSESSIONID = cookies ['JSESSIONID' ]
37
+ # 从字典中获取route键值和JSESSIONID键值
38
+
39
+ data = {
40
+
41
+ "username" : self .username ,
42
+ "password" : self .password ,
43
+ "lt" : it ,
44
+ "dllt" : "userNamePasswordLogin" ,
45
+ "execution" : execution ,
46
+ "_eventId" : "submit" ,
47
+ "rmShown" : "1"
48
+
49
+ } # 构建post表单数据/用户数据
50
+
51
+ session .headers = {
52
+ 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' ,
53
+ 'Accept-Language' : 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2' ,
54
+ 'Content-Type' : 'application/x-www-form-urlencoded' ,
55
+ 'Connection' : 'keep-alive' ,
56
+ 'Cookie' : 'route={0}; JSESSIONID={1}' .format (route , JSESSIONID ),
57
+ 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0' ,
58
+ } # 构建会话请求头部
59
+
60
+ response = session .post (self .loginUrl , data = data , allow_redirects = False )
61
+ # 发送请求头部和用户数据并禁止session重定向用来获取MOD_AUTH_CAS值
62
+
63
+ session .headers = {
64
+ 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0' ,
65
+ } # 重构会话请求头部
66
+
67
+ casUrl = response .headers .get ('Location' )
68
+ # 获取重定向url
69
+ ehallapp = session .get (casUrl )
70
+ # 更新cookie值
71
+
72
+ cookies = session .cookies
73
+ # 最终cookies
74
+ cookies = requests .utils .dict_from_cookiejar (cookies )
75
+
76
+ cookies = {
77
+ '_WEU' : cookies .get ('_WEU' ),
78
+ 'EMAP_LANG' : 'zh' ,
79
+ 'route' : cookies .get ('route' ),
80
+ 'MOD_AUTH_CAS' : cookies .get ('MOD_AUTH_CAS' ),
81
+ 'JSESSIONID' : cookies .get ('JSESSIONID' ),
82
+ }
83
+ return cookies
84
+
85
+ def time (self , cookies ):
86
+ timeUrl = 'http://ehallapp.jit.edu.cn/qljfwapp/sys/lwpub/api/getServerTime.do'
87
+ severTime = requests .get (timeUrl , headers = self .headers , cookies = cookies )
88
+ # 获取当前服务器时间
89
+ timejson = severTime .json ()
90
+ time = timejson .get ('date' )
91
+ DateTime = re .sub (r'/' , "-" , time )
92
+
93
+ return DateTime
94
+
95
+ def getInfo (self , cookies ):
96
+ # 获取前一天填写的表单所有信息
97
+ infoUrl = 'http://ehallapp.jit.edu.cn/qljfwapp/sys/lwJitHealthInfoDailyClock/modules/healthClock/getMyDailyReportDatas.do'
98
+
99
+ info = requests .post (infoUrl , headers = self .headers , cookies = cookies )
100
+ infoJson = info .json ()
101
+ row = infoJson ['datas' ]['getMyDailyReportDatas' ]['rows' ]
102
+ stuInfo = row [0 ]
103
+ return stuInfo
104
+
105
+ def widInfo (self , cookies ):
106
+ widUrl = 'http://ehallapp.jit.edu.cn/qljfwapp/sys/lwJitHealthInfoDailyClock/modules/healthClock/getMyTodayReportWid.do'
107
+ widhtml = requests .post (widUrl , cookies = cookies , headers = self .headers , data = self .params )
108
+ widText = widhtml .text
109
+ widDict = {}
110
+ widObj = re .search (r'"WID":"' , widText , re .M | re .I )
111
+ if widObj :
112
+ wid = re .findall ('"WID":"(.*?)","TODAY_' , widText )[0 ]
113
+ CZRQ = re .findall ('CZRQ":"(.*?)","BY10' , widText )[0 ]
114
+ widDict = {
115
+ 'wid' : wid ,
116
+ 'CZRQ' : CZRQ ,
117
+ }
118
+
119
+ return widDict
120
+
121
+ def signIn (self , cookies , severTime , severDay , widDict , stuDict ):
122
+ reSaveUrl = 'http://ehallapp.jit.edu.cn/qljfwapp/sys/lwJitHealthInfoDailyClock/modules/healthClock/T_HEALTH_DAILY_INFO_SAVE.do'
123
+ data = {
124
+ "WID" : widDict .get ('wid' ),
125
+ "BY2" : "" ,
126
+ "BY7_DISPLAY" : "否" ,
127
+ "BY7" : "0" ,
128
+ "BY8_DISPLAY" : "" ,
129
+ "BY8" : "" ,
130
+ "CREATED_AT" : severTime ,
131
+ "CZR" : "" ,
132
+ "CZZXM" : "" ,
133
+ "CZRQ" : widDict .get ('CZRQ' ),
134
+ "USER_ID" : self .username ,
135
+ "USER_NAME" : stuDict .get ('USER_NAME' ),
136
+ "DEPT_CODE_DISPLAY" : stuDict .get ('DEPT_CODE_DISPLAY' ),
137
+ "DEPT_CODE" : stuDict .get ('DEPT_CODE' ),
138
+ "DEPT_NAME" : stuDict .get ('DEPT_NAME' ),
139
+ "PHONE_NUMBER" : stuDict .get ('PHONE_NUMBER' ),
140
+ "FILL_TIME" : severTime ,
141
+ "CLOCK_SITUATION" : stuDict .get ('CLOCK_SITUATION' ),
142
+ "BY3_DISPLAY" : stuDict .get ('BY3_DISPLAY' ),
143
+ "BY3" : stuDict .get ('BY3' ),
144
+ "BY4_DISPLAY" : stuDict .get ('BY4_DISPLAY' ),
145
+ "BY4" : stuDict .get ('BY4' ),
146
+ "BY11_DISPLAY" : stuDict .get ('BY11_DISPLAY' ),
147
+ "BY11" : stuDict .get ('BY11' ),
148
+
149
+ "TODAY_SITUATION_DISPLAY" : stuDict .get ('TODAY_SITUATION_DISPLAY' ),
150
+ "TODAY_SITUATION" : stuDict .get ('TODAY_SITUATION' ),
151
+ "TODAY_CONDITION_DISPLAY" : stuDict .get ('TODAY_CONDITION_DISPLAY' ),
152
+ "TODAY_CONDITION" : stuDict .get ('TODAY_CONDITION' ),
153
+ "CONTACT_HISTORY_DISPLAY" : stuDict .get ('CONTACT_HISTORY_DISPLAY' ),
154
+ "CONTACT_HISTORY" : stuDict .get ('CONTACT_HISTORY' ),
155
+ "TODAY_NAT_CONDITION_DISPLAY" : stuDict .get ('TODAY_NAT_CONDITION_DISPLAY' ),
156
+ "TODAY_NAT_CONDITION" : stuDict .get ('TODAY_NAT_CONDITION' ),
157
+ "TODAY_VACCINE_CONDITION_DISPLAY" : stuDict .get ('TODAY_VACCINE_CONDITION_DISPLAY' ),
158
+ "TODAY_VACCINE_CONDITION" : stuDict .get ('TODAY_VACCINE_CONDITION' ),
159
+ "TODAY_HEALTH_CODE_DISPLAY" : stuDict .get ('TODAY_HEALTH_CODE_DISPLAY' ),
160
+ "TODAY_HEALTH_CODE" : stuDict .get ('TODAY_HEALTH_CODE' ),
161
+ "BY1_DISPLAY" : stuDict .get ('BY1_DISPLAY' ),
162
+ "BY1" : stuDict .get ('BY1' ),
163
+ "BY19_DISPLAY" : stuDict .get ('BY19_DISPLAY' ),
164
+ "BY19" : stuDict .get ('BY19' ),
165
+ "BY5" : "" ,
166
+ "BY6" : "" ,
167
+ "BY20" : "" ,
168
+ "TODAY_BODY_CONDITION_DISPLAY" : "" ,
169
+ "TODAY_BODY_CONDITION" : "" ,
170
+ "TODAY_TEMPERATURE" : "" ,
171
+ "TODAY_ISOLATE_CONDITION_DISPLAY" : "" ,
172
+ "TODAY_ISOLATE_CONDITION" : "" ,
173
+ "TODAY_TARRY_CONDITION_DISPLAY" : "" ,
174
+ "TODAY_TARRY_CONDITION" : "" ,
175
+ "BY17_DISPLAY" : "" ,
176
+ "BY17" : "" ,
177
+ "NEED_CHECKIN_DATE" : severDay ,
178
+ "CHECKED_DISPLAY" : "" ,
179
+ "CHECKED" : "" ,
180
+ "BY18_DISPLAY" : "" ,
181
+ "BY18" : "" ,
182
+ "BY9_DISPLAY" : "" ,
183
+ "BY9" : "" ,
184
+ "BY10_DISPLAY" : "" ,
185
+ "BY10" : "" ,
186
+ "BY16_DISPLAY" : "" ,
187
+ "BY16" : "" ,
188
+ "BY12_DISPLAY" : "" ,
189
+ "BY12" : "" ,
190
+ "BY13_DISPLAY" : "" ,
191
+ "BY13" : "" ,
192
+ "BY14_DISPLAY" : "" ,
193
+ "BY14" : "" ,
194
+ "BY15_DISPLAY" : "" ,
195
+ "BY15" : ""
196
+ }
197
+ signIn = requests .post (reSaveUrl , data = data , headers = self .headers , cookies = cookies )
198
+ signJson = signIn .json ()
199
+ print (signJson )
200
+
201
+ def severChan (self , severDay ):
202
+ # sever酱微信通知
203
+ url = 'https://sctapi.ftqq.com/{}.send' .format (self .severInform )
204
+ info = severDay + ' 健康打卡~'
205
+ form = {
206
+ 'title' : info
207
+ }
208
+ response = requests .post (url , data = form )
209
+
210
+ def run (self ):
211
+ cookies = FuckDaily .login (self )
212
+ severTime = FuckDaily .time (self , cookies )
213
+ severDay = re .findall ('(.*?) ' , severTime )[0 ]
214
+ widDict = FuckDaily .widInfo (self , cookies )
215
+ stuInfo = FuckDaily .getInfo (self , cookies )
216
+ FuckDaily .signIn (self , cookies , severTime , severDay , widDict , stuInfo )
217
+
218
+ FuckDaily .severChan (self , severDay )
219
+
220
+
221
+ if __name__ == '__main__' :
222
+ app = FuckDaily ()
223
+ app .run ()
0 commit comments