小北自动打卡
最近学校要求小北打卡,每天早上起床都要打卡真的让人很不舒服,于是从网上找了教程弄了一个小北自动打卡程序。
在Student("小北账号", "密码").daka()
输入自己的小北账号和密码运行即可打卡成功(如果没有成功可能是打卡人太多,过段时间在运行几次即可),有条件也可以部署到服务器里设置定时任务每天自动打卡。
import base64
import datetime
import requests
session = requests.Session()
class Student:
def __init__(self, username, password):
self.username = username
self.password = password
self.session = requests.Session()
# self.redisClient = redis.StrictRedis(host='#', port=16379, db=0)
self.IsPost = False
self.baseUrl = 'https://xiaobei.yinghuaonline.com/xiaobei-api/'
self.headers = {}
self.loginInfo = self.login()
def req(self, url, date=None, IsPost=False, headers=None):
self.session.trust_env = False
if date is None:
date = {}
if headers is None:
headers = self.headers
url = f'{self.baseUrl}{url}'
if IsPost:
res = self.session.post(url, json=date, headers=headers).json()
else:
res = self.session.get(url, params=date, headers=headers).json()
if res.get('code') != 200:
print('错误编码:' + str(res.get('code')) + '\t' + "错误消息:" + res.get("msg"))
return
else:
return res
def login(self):
imgInfo = self.req("captchaImage")
uuid = imgInfo['uuid']
code = imgInfo['showCode']
self.password = base64.b64encode(self.password.encode()).decode()
loginInfo = self.req(url='login', date={
"username": self.username,
"password": self.password,
"code": code,
"uuid": uuid,
"appUuid": ""
}, IsPost=True)
self.headers = {'Authorization': 'Bearer ' + loginInfo['token'],
"user-agent": "iPhone10,3(iOS/14.4) Uninview(Uninview/1.0.0) Weex/0.26.0 1125x2436"}
return loginInfo
def getUserInfo(self):
if not self.headers:
print("用户没登录成功")
return
UserInfo = self.req(url="getInfo")
if UserInfo:
return UserInfo
else:
print("用户信息为空")
def daka(self):
if not self.headers:
print("用户没登录成功")
return
userInfo = self.getUserInfo()
print(userInfo)
nickName = userInfo['user']['nickName']
phone = userInfo['user']['phonenumber']
# 获取当前月份的打卡记录
nowdate = str(datetime.date.today())
date = {"beginCreateTime": "' + nowdate + '", "endCreateTime": "' + nowdate + '"}
dakaInfo = self.req(
url='student/health/list?params={"beginCreateTime":"' + nowdate + '","endCreateTime":"' + nowdate + '"}')
if dakaInfo['total']:
print(nickName + '今天已经打卡')
return
# 获取学生打卡信息
healthInfo = self.req(url='student/healthLocation')
# 开始填表
res = self.req(url='student/health', IsPost=True, date={
# 体温自测
"temperature": "36.5",
# 当前位置
"coordinates": "中国湖南省长沙市望城区",
# 当前经纬度
"location": "112.911277,28.356724",
# 今日份身体状况 1无异常情况2 有发烧发热症状
"healthState": "1",
# 是否去过中高风险地区 1 是 2否
"dangerousRegion": "2",
# 备注
"dangerousRegionRemark": "",
# 近七日接触情况
"contactSituation": "2",
# 近七日外出情况 1 无外出 2有外出
"goOut": "1",
# 外出备注
"goOutRemark": "",
# 其他不适症状
"remark": "",
# 同住家人身体情况
"familySituation": "1"})
print(res)
print(nickName + '打卡完成')
# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
# 登录
Student("小北账号", "密码").daka()