增加异常检测

master
ChenXuzheng 2022-05-10 15:37:41 +00:00
parent 141043febf
commit 01719e04d3
1 changed files with 164 additions and 148 deletions

312
main.py
View File

@ -1,3 +1,5 @@
from logging import error
from traceback import print_tb
import requests import requests
import re import re
import json import json
@ -211,161 +213,175 @@ class HealthCheckInHelper(ZJULogin):
return return
except: except:
print('验证码识别失败') print('验证码识别失败')
raise Exception("验证码识别失败")
except: except:
print('打卡网页获取失败') print('发生异常')
finally: raise Exception("发生异常")
new_info_tmp = json.loads(re.findall(r'def = ({[^\n]+})', html)[0])
new_id = new_info_tmp['id'] new_info_tmp = json.loads(re.findall(r'def = ({[^\n]+})', html)[0])
new_uid = new_info_tmp['uid'] new_id = new_info_tmp['id']
# 拼凑geo信息 new_uid = new_info_tmp['uid']
lng, lat = address_component.get( # 拼凑geo信息
"streetNumber").get("location").split(",") lng, lat = address_component.get(
geo_api_info_dict = {"type": "complete", "info": "SUCCESS", "status": 1, "streetNumber").get("location").split(",")
"position": {"Q": lat, "R": lng, "lng": lng, "lat": lat}, geo_api_info_dict = {"type": "complete", "info": "SUCCESS", "status": 1,
"message": "Get geolocation success.Convert Success.Get address success.", "location_type": "ip", "position": {"Q": lat, "R": lng, "lng": lng, "lat": lat},
"accuracy": "null", "isConverted": "true", "addressComponent": address_component, "message": "Get geolocation success.Convert Success.Get address success.", "location_type": "ip",
"formattedAddress": formatted_address, "roads": [], "crosses": [], "pois": []} "accuracy": "null", "isConverted": "true", "addressComponent": address_component,
#print('打卡地点:', formatted_address) "formattedAddress": formatted_address, "roads": [], "crosses": [], "pois": []}
# 拿到校验值 #print('打卡地点:', formatted_address)
verify_data = re.findall( # 拿到校验值
r'"([a-z0-9]*?)": "([0-9]*?)","([a-z0-9]*?)":"([a-z0-9]*?)"', html)[0] verify_data = re.findall(
verify_code = { r'"([a-z0-9]*?)": "([0-9]*?)","([a-z0-9]*?)":"([a-z0-9]*?)"', html)[0]
verify_data[0]: verify_data[1], verify_code = {
verify_data[2]: verify_data[3], verify_data[0]: verify_data[1],
} verify_data[2]: verify_data[3],
data = { }
'sfymqjczrj': '0', data = {
'zjdfgj': '', 'sfymqjczrj': '0',
'sfyrjjh': '0', 'zjdfgj': '',
'cfgj': '', 'sfyrjjh': '0',
'tjgj': '', 'cfgj': '',
'nrjrq': '0', 'tjgj': '',
'rjka': '', 'nrjrq': '0',
'jnmddsheng': '', 'rjka': '',
'jnmddshi': '', 'jnmddsheng': '',
'jnmddqu': '', 'jnmddshi': '',
'jnmddxiangxi': '', 'jnmddqu': '',
'rjjtfs': '', 'jnmddxiangxi': '',
'rjjtfs1': '', 'rjjtfs': '',
'rjjtgjbc': '', 'rjjtfs1': '',
'jnjtfs': '', 'rjjtgjbc': '',
'jnjtfs1': '', 'jnjtfs': '',
'jnjtgjbc': '', 'jnjtfs1': '',
# 是否确认信息属实 'jnjtgjbc': '',
'sfqrxxss': '1', # 是否确认信息属实
'sfqtyyqjwdg': '0', 'sfqrxxss': '1',
'sffrqjwdg': '0', 'sfqtyyqjwdg': '0',
'sfhsjc': '', 'sffrqjwdg': '0',
'zgfx14rfh': '0', 'sfhsjc': '',
'zgfx14rfhdd': '', 'zgfx14rfh': '0',
'sfyxjzxgym': '1', 'zgfx14rfhdd': '',
# 是否不宜接种人群 'sfyxjzxgym': '1',
'sfbyjzrq': '5', # 是否不宜接种人群
'jzxgymqk': '6', # 这里是第三针相关参数1是已接种第一针4是已接种第二针已满6个月5是已接种第二针未满6个月6是已接种第三针3是未接种记得自己改 'sfbyjzrq': '5',
'tw': '0', 'jzxgymqk': '6', # 这里是第三针相关参数1是已接种第一针4是已接种第二针已满6个月5是已接种第二针未满6个月6是已接种第三针3是未接种记得自己改
'sfcxtz': '0', 'tw': '0',
'sfjcbh': '0', 'sfcxtz': '0',
'sfcxzysx': '0', 'sfjcbh': '0',
'jcjg': '', 'sfcxzysx': '0',
'qksm': '', 'jcjg': '',
'sfyyjc': '0', 'qksm': '',
'jcjgqr': '0', 'sfyyjc': '0',
'remark': '', 'jcjgqr': '0',
'address': formatted_address, 'remark': '',
# {"type":"complete","position":{"Q":30.30975640191,"R":120.085647515191,"lng":120.085648,"lat":30.309756},"location_type":"html5","message":"Get geolocation success.Convert Success.Get address success.","accuracy":40,"isConverted":true,"status":1,"addressComponent":{"citycode":"0571","adcode":"330106","businessAreas":[],"neighborhoodType":"","neighborhood":"","building":"","buildingType":"","street":"龙宇街","streetNumber":"17-18号","country":"中国","province":"浙江省","city":"杭州市","district":"西湖区","towncode":"330106109000","township":"三墩镇"},"formattedAddress":"浙江省杭州市西湖区三墩镇翠柏浙江大学(紫金港校区)","roads":[],"crosses":[],"pois":[],"info":"SUCCESS"} 'address': formatted_address,
'geo_api_info': geo_api_info_dict, # {"type":"complete","position":{"Q":30.30975640191,"R":120.085647515191,"lng":120.085648,"lat":30.309756},"location_type":"html5","message":"Get geolocation success.Convert Success.Get address success.","accuracy":40,"isConverted":true,"status":1,"addressComponent":{"citycode":"0571","adcode":"330106","businessAreas":[],"neighborhoodType":"","neighborhood":"","building":"","buildingType":"","street":"龙宇街","streetNumber":"17-18号","country":"中国","province":"浙江省","city":"杭州市","district":"西湖区","towncode":"330106109000","township":"三墩镇"},"formattedAddress":"浙江省杭州市西湖区三墩镇翠柏浙江大学(紫金港校区)","roads":[],"crosses":[],"pois":[],"info":"SUCCESS"}
# 浙江省 杭州市 西湖区 'geo_api_info': geo_api_info_dict,
# '\u6D59\u6C5F\u7701 \u676D\u5DDE\u5E02 \u897F\u6E56\u533A' # 浙江省 杭州市 西湖区
'area': "{} {} {}".format(address_component.get("province"), address_component.get("city"), # '\u6D59\u6C5F\u7701 \u676D\u5DDE\u5E02 \u897F\u6E56\u533A'
address_component.get("district")), 'area': "{} {} {}".format(address_component.get("province"), address_component.get("city"),
# 浙江省 address_component.get("district")),
# '\u6D59\u6C5F\u7701' # 浙江省
'province': address_component.get("province"), # '\u6D59\u6C5F\u7701'
# 杭州市 'province': address_component.get("province"),
# '\u676D\u5DDE\u5E02' # 杭州市
'city': address_component.get("city"), # '\u676D\u5DDE\u5E02'
# 是否在校:在校将'sfzx'改为1 'city': address_component.get("city"),
'sfzx': '1', # 是否在校:在校将'sfzx'改为1
'sfjcwhry': '0', 'sfzx': '1',
'sfjchbry': '0', 'sfjcwhry': '0',
'sfcyglq': '0', 'sfjchbry': '0',
'gllx': '', 'sfcyglq': '0',
'glksrq': '', 'gllx': '',
'jcbhlx': '', 'glksrq': '',
'jcbhrq': '', 'jcbhlx': '',
'bztcyy': '4', 'jcbhrq': '',
'sftjhb': '0', 'bztcyy': '4',
'sftjwh': '0', 'sftjhb': '0',
'fjsj': '0', 'sftjwh': '0',
'sfjcqz': '', 'fjsj': '0',
'jcqzrq': '', 'sfjcqz': '',
'jrsfqzys': '', 'jcqzrq': '',
'jrsfqzfy': '', 'jrsfqzys': '',
'sfyqjzgc': '', 'jrsfqzfy': '',
# 是否申领杭州健康码 'sfyqjzgc': '',
'sfsqhzjkk': '1', # 是否申领杭州健康码
# 杭州健康吗颜色1:绿色 2:红色 3:黄色 'sfsqhzjkk': '1',
'sqhzjkkys': '1', # 杭州健康吗颜色1:绿色 2:红色 3:黄色
'gwszgzcs': '', 'sqhzjkkys': '1',
'szgj': '', 'gwszgzcs': '',
'fxyy': '', 'szgj': '',
'jcjg': '', 'fxyy': '',
# uid每个用户不一致 'jcjg': '',
'uid': new_uid, # uid每个用户不一致
# id每个用户不一致 'uid': new_uid,
'id': new_id, # id每个用户不一致
# 日期 'id': new_id,
'date': get_date(), # 日期
'created': round(time.time()), 'date': get_date(),
'szsqsfybl': '0', 'created': round(time.time()),
'sfygtjzzfj': '0', 'szsqsfybl': '0',
'gtjzzfjsj': '', 'sfygtjzzfj': '0',
'gwszdd': '', 'gtjzzfjsj': '',
'szgjcs': '', 'gwszdd': '',
'ismoved': '0', # 位置变化为1不变为0 'szgjcs': '',
'zgfx14rfhsj': '', 'ismoved': '0', # 位置变化为1不变为0
'jrdqjcqk': '', 'zgfx14rfhsj': '',
'jcwhryfs': '', 'jrdqjcqk': '',
'jchbryfs': '', 'jcwhryfs': '',
'xjzd': '', 'jchbryfs': '',
'sfsfbh': '0', 'xjzd': '',
'jhfjrq': '', 'sfsfbh': '0',
'jhfjjtgj': '', 'jhfjrq': '',
'jhfjhbcc': '', 'jhfjjtgj': '',
'jhfjsftjwh': '0', 'jhfjhbcc': '',
'jhfjsftjhb': '0', 'jhfjsftjwh': '0',
'szsqsfybl': '0', 'jhfjsftjhb': '0',
'gwszgz': '', 'szsqsfybl': '0',
'campus': '紫金港校区', # 紫金港校区 玉泉校区 西溪校区 华家池校区 之江校区 海宁校区 舟山校区 宁波校区 工程师学院 杭州国际科创中心 其他 'gwszgz': '',
# 👇-----2022.5.7日修改-----👇 'campus': '紫金港校区', # 紫金港校区 玉泉校区 西溪校区 华家池校区 之江校区 海宁校区 舟山校区 宁波校区 工程师学院 杭州国际科创中心 其他
'verifyCode': code, # 👇-----2022.5.7日修改-----👇
# 👆-----2022.5.7日修改-----👆 'verifyCode': code,
} # 👆-----2022.5.7日修改-----👆
data.update(verify_code) }
response = self.sess.post('https://healthreport.zju.edu.cn/ncov/wap/default/save', data=data, data.update(verify_code)
headers=self.headers) response = self.sess.post('https://healthreport.zju.edu.cn/ncov/wap/default/save', data=data,
return response.json() headers=self.headers)
return response.json()
def run(self): def run(self):
print("正在为{}健康打卡".format(self.username)) print("正在为{}健康打卡".format(self.username))
if self.delay_run: if self.delay_run:
# 确保定时脚本执行时间不太一致 # 确保定时脚本执行时间不太一致
time.sleep(random.randint(10, 100)) time.sleep(random.randint(10, 100))
try: try_count=0
self.login() while True:
# 拿取eai-sess的cookies信息 if try_count>10:
self.sess.get(self.REDIRECT_URL) print("已经尝试你妈的10次了还不对你退群吧")
# location = get_ip_location() return
# print(location) try:
location = {'info': 'LOCATE_SUCCESS', self.login()
'status': 1, 'lng': self.lng, 'lat': self.lat} # 拿取eai-sess的cookies信息
geo_info = self.get_geo_info(location) self.sess.get(self.REDIRECT_URL)
# print(geo_info) # location = get_ip_location()
res = self.take_in(geo_info) # print(location)
print(res) location = {'info': 'LOCATE_SUCCESS',
except requests.exceptions.ConnectionError: 'status': 1, 'lng': self.lng, 'lat': self.lat}
# reraise as KubeException, but log stacktrace. geo_info = self.get_geo_info(location)
print("打卡失败,请检查github服务器网络状态") # print(geo_info)
res = self.take_in(geo_info)
print(res)
return
except requests.exceptions.ConnectionError:
# reraise as KubeException, but log stacktrace.
print("打卡失败,请检查服务器网络状态")
except Exception as e:
print(e)
print("遇到错误,尝试重试")
print("重试中...",try_count)
try_count+=1
if __name__ == '__main__': if __name__ == '__main__':