已经利用sesson前期登入,并且获得当天的其他信息,但是依旧打卡失败{"code":500,"message":"服务出错(500)"}
以下内容仅作为学习用途,私人信息已经删去,需要信息检验的可以联系
res.requests.headers = {
'User-Agent': 'xxxxxxxxxx', # 表头是手机抓包抓到的
'Accept-Encoding': 'gzip, deflate, br',
'Accept': '*/*', 'Connection': 'keep-alive',
'Host': 'student.wozaixiaoyuan.com',
'content-type': 'application/json',
'Cookie': 'JWSESSION=xxxxxxxxxxxxxxxxxxxxxx', # 这个健康打卡,日检日报成功
'Content-Length': '267'
}
传入的数据是
self.sign_data = {
"id": "xxxxxxx", # 爬取到当天的最新值
"signId": "xxxxxxx", # 爬取到当天的最新值
# 剩下的数据是上次抓包抓到的
"latitude": "xxx",
"longitude": "xxx",
"country": "中国",
"province": "xxx",
"city": "xxx",
"district": "xxxx",
"township": "xxx"
}
程序如下是
import requests
import json
import time
class auto_web:
def __init__(self, username, password):
# 保留登录信息
self.session = requests.session()
self.cookies = None
# 登入界面的post信息
self.login_url = 'https://gw.wozaixiaoyuan.com/basicinfo/mobile/login/username'
self.login_data = {
'username': username,
'password': password
}
self.login_headers = {
'Host': 'gw.wozaixiaoyuan.com',
'Connection': 'keep-alive',
'Content-Length': '2',
'Accept': 'application/json, text/plain, */*',
'User-Agent': 'xxxxxxxxxxx',
'Content-Type': 'application/json;charset=UTF-8',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-us,en'
}
# 签到的post信息
self.sign_url = 'https://student.wozaixiaoyuan.com/sign/doSign.json'
self.sign_headers = {
'Host': 'student.wozaixiaoyuan.com',
'Connection': 'keep-alive',
'User-Agent': 'xxxxxxxxxxx',
'content-type': 'application/json',
'Accept-Encoding': 'gzip, deflate, br',
}
self.sign_data = {
"id": "",
"signId": "",
"latitude": "xxxxxxxxxxx",
"longitude": "xxxxxxxxxxx",
"country": "中国",
"province": "xxxxxxxxxxx",
"city": "xxxxxxxxxxx",
"district": "xxxxxxxxxxx",
"township": "xxxxxxxxxxx"
}
# 获得getSignMessage的信息
self.getSignMessage_url = 'https://student.wozaixiaoyuan.com/sign/getSignMessage.json'
self.getSignMessage_headers = {
'Host': 'student.wozaixiaoyuan.com',
'Connection': 'keep-alive',
'User-Agent': 'xxxxxxxxxxx',
'content-type': 'application/x-www-form-urlencoded', # 注意,这个不是application/json
'Accept-Encoding': 'gzip, deflate, br'
}
self.getSignMessage_data = {
"page": "1",
"size": "5"
}
# 获得
def login(self): # 登入账号
self.login_url = self.login_url + "?username=" + str(self.login_data['username']) + "&password=" + str(
self.login_data['password']) # 通过 url 的 '?' 方法写入参数
res = self.session.post(url=self.login_url, headers=self.login_headers, data='{}')
try:
if json.loads(res.text)['code'] == 0:
self.session.cookies.set('JWSESSION', res.headers['JWSESSION']) # 更新JWSESSION值
# print(res.cookies)
print('登录成功')
# self.updata_headers(res)
else:
print(json.loads(res.text)['message'])
except:
print('登录错误')
def get_sign_inf(self):
print('************')
SignMessage = self.session.post(url=self.getSignMessage_url, headers=self.getSignMessage_headers, data=self.getSignMessage_data)
SignMessage_date = json.loads(SignMessage.text)['data'][0]['end'].split(' ')[0]
# 填充当天签到的信息
if time.strftime("%Y-%m-%d") == SignMessage_date:
print(SignMessage.request.headers)
id = json.loads(SignMessage.text)['data'][0]['id']
logId = json.loads(SignMessage.text)['data'][0]['logId']
self.sign_data['id'] = logId
self.sign_data['signId'] = id
def sign(self): # 签到
try:
res = self.session.post(url=self.sign_url, headers=self.sign_headers, data=self.sign_data)
if json.loads(res.text)['code'] == 0:
print('签到成功')
else:
print(res.text)
print(res.request.headers)
print('签到失败:{}'.format(json.loads(res.text)['message']))
except:
print('签到错误')
def run(self):
self.login()
self.get_sign_inf()
self.sign()
if __name__ == '__main__':
obj = auto_web('xxxxxxxxxxx', 'xxxxxxxxxxx')
obj.run()
抓到的打卡成功表单如下