用Python写一个健康打卡脚本
Citing Lv2

因为南京疫情的复发,学校要求开学之前一直每日打卡,过程就是每天反复填写一个类似调查问卷的网页提交,每次的内容几乎一模一样,天天重复一样的工作属实很蠢,准备用python写一个脚本,自动登录提交,再放到GitHub Action上每日自动执行,这样以来就再也不用管了。

登陆部分

提交申请之前要先登陆学校的账号,于是先打卡登陆界面,用Chrome自带的调试工具抓取一下登陆信息。

在Form Data里找到提交的参数

username是学号,password是密码,主要是这两个,下面的四个直接照搬即可。

username: xxxxx
password: xxxxx
execution: 5d0b6fd7…. (此处省略,太长了)
_eventId: submit
loginType: 1
submit: 登 录

设置一下参数:

1
2
3
4
5
6
7
8
    "username": userid,
"password": password,
"execution": "a9399fcxWkE=",(此处省略,太长了)
"_eventId": "submit",
"loginType": "1",
"submit": "登 录"
}

找到要post的url,用requests.post,并且把上面的postData作为数据参数提交。

1
2
post_url = 'https://ids.njucm.edu.cn/login?service=https://pdc.njucm.edu.cn/pdc/formDesignApi/S/iKKUJvEV'
post = requests.post(post_url, data=postData)

提交部分

提交之后怎么确认是不是登陆成功进到表格页面呢,在表格页面下面有个提交按钮,在返回的post.txt查找一下。

if post.text.find('提交'):
    print("登陆确认")

事先提交一次表单,和刚才抓取登陆表单一样,抓取一下提交表单。

将参数设置一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
params = {
'DATETIME_CYCLE': '',
'DLM_455532': '',
'XM_699791': '',
'RADIO_816586': '境内',
'PICKER_894219': '',
'TEXT_362765': '',
'RADIO_773105': '健康',
'RADIO_252419': '否',
'SELECT_502461': '',
'SELECT_96317': '36.7℃及以下',
'RADIO_223980': '否',
'SELECT_117762': '',
'SELECT_631415': '36.8℃',
'RADIO_944199': '否',
'TEXT_625091': '',
'RADIO_655596': '否',
'TEXTAREA_901197': '无',
'CHECKBOX_712638': '同意并承诺'
}

将提交表单里每个人不同的地方替换下

1
2
3
4
5
params['XM_699791'] = name
params['DLM_455532'] = userid
params['PICKER_894219'] = location
now_time = datetime.datetime.now().strftime('%Y/%m/%d')
params['DATETIME_CYCLE'] = now_time

设置一下post的url

    url = 'https://pdc.njucm.edu.cn/pdc/formDesignApi/dataFormSave?wid=A25FF315167F5528E0533200140AA058&userId=' + userid

带上参数,post过去,如果返回200通常就算成功了。

    res = requests.post(url, data=params)
    if res.status_code == 200:
        print('提交成功')

完整代码在https://github.com/CitingNutria/NJUCM-daily-health-checker

 Comments