|
@@ -0,0 +1,166 @@
|
|
|
|
|
+import requests
|
|
|
|
|
+import urllib.parse
|
|
|
|
|
+import json
|
|
|
|
|
+import random
|
|
|
|
|
+import time
|
|
|
|
|
+import datetime
|
|
|
|
|
+import sys
|
|
|
|
|
+
|
|
|
|
|
+import para
|
|
|
|
|
+import config
|
|
|
|
|
+
|
|
|
|
|
+TODAY = None
|
|
|
|
|
+TODAY_SUCCESS = False
|
|
|
|
|
+TODAY_EXEC_TIME = None
|
|
|
|
|
+
|
|
|
|
|
+d_start_time = None
|
|
|
|
|
+d_end_time = None
|
|
|
|
|
+
|
|
|
|
|
+def getHeader():
|
|
|
|
|
+ return {
|
|
|
|
|
+ "User-Agent":"Mozilla/5.0 (Linux; Android 10; MI 9 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045511 Mobile Safari/537.36 MMWEBID/1122 MicroMessenger/7.0.20.1781(0x27001439) Process/toolsmp WeChat/arm64 NetType/4G Language/zh_CN ABI/arm64"
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+def getObj(sxid, xssxglid, lat, lng, title):
|
|
|
|
|
+ obj = {}
|
|
|
|
|
+ obj['cnz022'] = sxid
|
|
|
|
|
+ obj['cnz058'] = xssxglid
|
|
|
|
|
+ obj['cne640'] = lat
|
|
|
|
|
+ obj['cne641'] = lng
|
|
|
|
|
+ obj['cne642'] = title
|
|
|
|
|
+ return json.dumps(obj,separators=(',',':'), ensure_ascii=False)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+def getTime():
|
|
|
|
|
+ return int(round(time.time()*1000))
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+def f_login(session):
|
|
|
|
|
+ p = para.get()
|
|
|
|
|
+ try:
|
|
|
|
|
+ r = session.get("https://hrsspub.sz.gov.cn/jgxxfw/jgfw/sooLogin", params = {
|
|
|
|
|
+ "para": p,
|
|
|
|
|
+ "type": 1,
|
|
|
|
|
+ "_": getTime()
|
|
|
|
|
+ }, headers=getHeader())
|
|
|
|
|
+ if r.text.find('"status":200') == -1:
|
|
|
|
|
+ if r.text.find('系统异常'):
|
|
|
|
|
+ print("[%s] %s" % (TODAY, '登录无效,请检查para'))
|
|
|
|
|
+ else:
|
|
|
|
|
+ print("[%s] %s" % (TODAY, '未知错误'))
|
|
|
|
|
+ return False
|
|
|
|
|
+ except Exception as e:
|
|
|
|
|
+ print("[%s] %s" % (TODAY, e))
|
|
|
|
|
+ return False
|
|
|
|
|
+ else:
|
|
|
|
|
+ return True
|
|
|
|
|
+
|
|
|
|
|
+def f_getKq(session):
|
|
|
|
|
+ try:
|
|
|
|
|
+ r = session.post("https://hrsspub.sz.gov.cn/jgxxfw/jgfw/ydfw/student/getKqdd", headers=getHeader())
|
|
|
|
|
+ if r.text.find('"status":200') == -1:
|
|
|
|
|
+ print("[%s] %s" % (TODAY, r.text))
|
|
|
|
|
+ return False
|
|
|
|
|
+ else:
|
|
|
|
|
+ data = json.loads(r.text)
|
|
|
|
|
+ if 'result' in data and 'xssxglid' in data['result'] and 'sxid' in data['result'] and 'data' in data['result'] and len(data['result']['data'])!= 0 and 'cnz080' in data['result']['data'][0] and 'cnz058' in data['result']['data'][0] and 'lat' in data['result']['data'][0] and 'lng' in data['result']['data'][0] and 'title' in data['result']['data'][0]:
|
|
|
|
|
+ return f_submitKq(session, getObj(data['result']['sxid'], data['result']['xssxglid'], data['result']['data'][0]['lat'], data['result']['data'][0]['lng'], data['result']['data'][0]['title']))
|
|
|
|
|
+ else:
|
|
|
|
|
+ print("[%s] %s" % (TODAY, data))
|
|
|
|
|
+ print("[%s] %s" % (TODAY, '缺少部分信息'))
|
|
|
|
|
+ return False
|
|
|
|
|
+ except Exception as e:
|
|
|
|
|
+ print("[%s] %s" % (TODAY, e))
|
|
|
|
|
+ return False
|
|
|
|
|
+
|
|
|
|
|
+def f_submitKq(session, data):
|
|
|
|
|
+ try:
|
|
|
|
|
+ r = session.get('https://hrsspub.sz.gov.cn/jgxxfw/jgfw/ydfw/student/addKqjl', params = {
|
|
|
|
|
+ "xskqjlxxDTO": data,
|
|
|
|
|
+ "_": getTime()
|
|
|
|
|
+ }, headers=getHeader())
|
|
|
|
|
+ print("[%s] %s" % (TODAY, r.text))
|
|
|
|
|
+ d = json.loads(r.text)
|
|
|
|
|
+ if 'status' in d:
|
|
|
|
|
+ if d['status'] == 200 or d['status'] == 300:
|
|
|
|
|
+ return True
|
|
|
|
|
+
|
|
|
|
|
+ except Exception as e:
|
|
|
|
|
+ print("[%s] %s" % (TODAY, e))
|
|
|
|
|
+ return False
|
|
|
|
|
+ return False
|
|
|
|
|
+
|
|
|
|
|
+def getToday():
|
|
|
|
|
+ return str(datetime.datetime.now().date())
|
|
|
|
|
+
|
|
|
|
|
+def getRandomTime():
|
|
|
|
|
+ i_start_time = int(time.mktime(d_start_time.timetuple()))
|
|
|
|
|
+ i_end_time = int(time.mktime(d_end_time.timetuple()))
|
|
|
|
|
+ return datetime.datetime.fromtimestamp(random.randint(i_start_time, i_end_time))
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+def f_start():
|
|
|
|
|
+ global TODAY_SUCCESS
|
|
|
|
|
+ session = requests.session()
|
|
|
|
|
+ success = f_login(session)
|
|
|
|
|
+ if not success:
|
|
|
|
|
+ return
|
|
|
|
|
+ TODAY_SUCCESS = f_getKq(session)
|
|
|
|
|
+ print("[%s] %s %s" % (getToday(), TODAY_SUCCESS, datetime.datetime.now()))
|
|
|
|
|
+
|
|
|
|
|
+# 自定义规则(此处设置周六周日不打卡,1月后不打卡)
|
|
|
|
|
+def check_rule():
|
|
|
|
|
+ t = datetime.datetime.now()
|
|
|
|
|
+ if t.weekday() == 5 or t.weekday() == 6: # 周六日无需打卡
|
|
|
|
|
+ return False
|
|
|
|
|
+
|
|
|
|
|
+ if t.month != 1: # 1月后假期无需打卡
|
|
|
|
|
+ return False
|
|
|
|
|
+
|
|
|
|
|
+ return True
|
|
|
|
|
+
|
|
|
|
|
+def f_loop():
|
|
|
|
|
+ global TODAY, TODAY_SUCCESS, TODAY_EXEC_TIME
|
|
|
|
|
+ while True:
|
|
|
|
|
+ if not check_rule():
|
|
|
|
|
+ time.sleep(5)
|
|
|
|
|
+ continue
|
|
|
|
|
+ now = datetime.datetime.now()
|
|
|
|
|
+ if TODAY_EXEC_TIME is None: # 首次运行
|
|
|
|
|
+ TODAY_SUCCESS = False
|
|
|
|
|
+ TODAY_EXEC_TIME = datetime.datetime.strptime(TODAY+" %d:%d:00" % (config.END_TIME[0], config.END_TIME[1]), '%Y-%m-%d %H:%M:%S')
|
|
|
|
|
+ if TODAY_EXEC_TIME < now:
|
|
|
|
|
+ print("[%s] 今日超过设置时间,将不打卡" % TODAY)
|
|
|
|
|
+ TODAY_SUCCESS = True
|
|
|
|
|
+ time.sleep(5)
|
|
|
|
|
+ continue
|
|
|
|
|
+ else:
|
|
|
|
|
+ print("[%s] 开始打卡时间:%s" % (TODAY, "now"))
|
|
|
|
|
+ f_start()
|
|
|
|
|
+ time.sleep(5)
|
|
|
|
|
+ continue
|
|
|
|
|
+
|
|
|
|
|
+ if not TODAY == getToday():
|
|
|
|
|
+ TODAY = getToday()
|
|
|
|
|
+ TODAY_SUCCESS = False
|
|
|
|
|
+ TODAY_EXEC_TIME = getRandomTime()
|
|
|
|
|
+ print()
|
|
|
|
|
+ print("[%s] 开始打卡时间:%s" % (TODAY, TODAY_EXEC_TIME))
|
|
|
|
|
+
|
|
|
|
|
+ if now >= TODAY_EXEC_TIME and not TODAY_SUCCESS:
|
|
|
|
|
+ f_start()
|
|
|
|
|
+ time.sleep(5)
|
|
|
|
|
+ continue
|
|
|
|
|
+
|
|
|
|
|
+ time.sleep(5)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+if __name__ == '__main__':
|
|
|
|
|
+ TODAY = getToday()
|
|
|
|
|
+ d_start_time = datetime.datetime.strptime(TODAY+" %d:%d:00" % (config.START_TIME[0], config.START_TIME[1]), '%Y-%m-%d %H:%M:%S')
|
|
|
|
|
+ d_end_time = datetime.datetime.strptime(TODAY+" %d:%d:59" % (config.END_TIME[0], config.END_TIME[1]), '%Y-%m-%d %H:%M:%S')
|
|
|
|
|
+ if not d_start_time <= d_end_time:
|
|
|
|
|
+ print("[%s] %s" % (TODAY, 'config.py 时间区间错误'))
|
|
|
|
|
+ sys.exit()
|
|
|
|
|
+ f_loop()
|
|
|
|
|
+
|