HHU 健康上报脚本

Posted on 2021-01-28  33 Views


写在前面

在用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脚本定时运行,相关自行搜索。

已返校版本

有人评论了,更新一下,把下面标注释部分改成和健康上报系统一样即可,和上面在家版本一样

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()


隐约雷鸣 阴霾天空 但盼风雨来 能留你在此