写在前面
在用selenium实现 HHU自动打卡脚本 后,发现这个方法对前置要求有点严格,需要 Chromedriver,并且速度也非常慢,所以用 Requests库重写了一个爬虫,实现健康打卡功能。
实现
只需要修改代码中标注的部分即可运行,只要服务器不卡,就能秒打卡!
获取wid的方式:
- 点击历史填报
- 弹出的网页地址栏中 http://form.hhu.edu.cn/pdc/formDesign/showFormFilled?selfFormWid=A335B048C8456F75E0538101600A6A04
&lwUserId=*******
- 标注部分为你的wid,务必修改为你自己的
import requests
import time
class my_hhu:
account = "***" # 学号
password = "***" # 信息门户密码
wid = "***" # 个人wid
home_url = "http://my.hhu.edu.cn/index.portal"
login_url = "http://ids.hhu.edu.cn/amserver/UI/Login"
daka_url = "http://form.hhu.edu.cn/pdc/form/list"
daka_list_url = "http://form.hhu.edu.cn/pdc/formDesignApi/S/gUTwwojq"
daka_save_url = "http://form.hhu.edu.cn/pdc/formDesignApi/dataFormSave?wid=" + wid + "&userId=" + account
init_form_api = "http://form.hhu.edu.cn/pdc/formDesignApi/initFormAppInfo"
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4209.2 Safari/537.36'
}
self.session = requests.Session()
def login(self):
post_data = {
"Login.Token1": self.account,
'Login.Token2': self.password,
'goto': "http://my.hhu.edu.cn/loginSuccess.portal",
'gotoOnFail': "http://my.hhu.edu.cn/loginFailure.portal",
}
loginResponse = self.session.post(self.login_url, data=post_data, headers=self.headers)
if "handleLoginSuccessed()" in loginResponse.text:
print("登录成功!")
else:
print("登录失败,请检查账号密码是否填写正确!")
def daka(self):
while True:
curr_date = time.strftime('%Y/%m/%d', time.localtime(time.time()))
self.session.get(self.daka_url)
self.session.get(self.daka_list_url)
post_data = {
'DATETIME_CYCLE': curr_date,
'XGH_336526': self.account,
### 此部分必须和健康打卡系统完全相同
'XM_1474': '***', # 姓名
'SFZJH_859173': '***', # 身份证号
'SELECT_941320': '***', # 学院
'SELECT_459666': '***', # 年级
'SELECT_814855': '***', # 专业
'SELECT_525884': '***', # 班级
'SELECT_125597': '***', # 宿舍楼
'TEXT_950231': '***', # 宿舍号
'TEXT_937296': '***', # 手机号码
### 以下全部安按照健康算,不用修改
'RADIO_853789': '否',
'RADIO_43840': '否',
'RADIO_579935': '健康',
'RADIO_138407': '否',
'RADIO_546905': '否',
'RADIO_314799': '否',
'RADIO_209256': '否',
'RADIO_836972': '否',
'RADIO_302717': '否',
'RADIO_701131': '否',
'RADIO_438985': '否',
'RADIO_467360': '是',
### 这个也要完全相同
'PICKER_956186': '***', # 住址 如:江苏省,南京市,江宁区
'TEXT_434598': "",
'TEXT_515297': "",
'TEXT_752063': "",
}
self.session.post(self.init_form_api, data={'selfFormWid': self.wid}, headers=self.headers)
dakaResponse = self.session.post(self.daka_save_url, data=post_data, headers=self.headers)
if '{"result":true}' in dakaResponse.text:
print("打卡成功!")
break
else:
time.sleep(0.5)
if __name__ == '__main__':
user = my_hhu()
user.login()
user.daka()
定时启动
有服务器的同学,将.py文件上传到一个网站的目录下,直接使用宝塔面板的计划任务运行shell脚本。
没服务器的同学,可以使用bat脚本定时运行,相关自行搜索。
Comments | NOTHING