疫情自动打卡&班级成员打卡情况异常检查

it2025-05-03  15

自动打卡实现步骤

打开打卡界面,用fiddler抓取数据包 可以找到根据url中的信息找到获取每日打卡任务的包 返回里面的state是问卷的填写情况,如果完成的打卡,返回的值为1,未完成则为0,测试方法为下断点修改state的返回值为0,则页面上显示的填写状态为:未填写。

可以根据这条请求返回值中的state判断打卡是否完成,那么只需要写一个循环,一直判断state 的返回值,如果state为0则是未打卡,那么就要向服务器发送打卡的数据包来完成打卡。

接下去是抓取提交打卡的数据包,首先正确填写所有信息,点击提交后再fiddler中找到对应的数据包

参数中主要id和student 均为学生学号,r_id为打卡任务编号,这个可以从上面抓到的数据包中的返回值中获得。

两个包的提交参数中都是一个session这是微信登录打卡小程序的授权信息,如果随便修改或者一直用同一个值,则返回内容会变为“登录失效,请重新登录”

如果不提交session则能返回提交成功的信息。。。。 这表明后端并没有对session做一个严格的判断,只是单纯用一个学号来判断提交者的身份。

下面贴上代码,涉及学校信息部分进行打码。

import requests while True: student_id='你的学号' url="https://v-xxtb.手动打码.edu.cn/api/Ncov2019/get_record" data={ 'id':student_id, 'user_type':'1', 'environment_type':'101', 'module_id':'63' } cookies={ 'Hm_lvt_0d261a1cc090e61ad0a6fc0eb2f4fada':'1603109091', 'Hm_lpvt_0d261a1cc090e61ad0a6fc0eb2f4fada':'1603123986', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1301.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat' } daka_data={ 'id':student_id, 'user_type':'1', 'environment_type':'101', 'r_id':'259',#这里id需要修改,或者写个获取第一个数据包里的r_id 'student_id':student_id, 'state':'1', 'is_body_ok':'1', 'is_gl':'0', 'is_tl':'0', 'is_jc':'0', 'is_2_man':'0', 'is_family':'0', 'user_location':'1', 'location_province':'XX省', 'location_city':'XX市', 'location_country':'XX区', 'morning_state':'1', 'morning_temperature':'', 'afternoon_state':'1', 'afternoon_temperature':'', 'is_jkm':'1', 'roundmodule_id':'63' } html=requests.post(url=url,data=data) print(html.text) if html.text.find("\"state\":0")!=-1: print("未打卡") url="https://v-xxtb.手动打码.edu.cn/api/Ncov2019/update_record_student" html=requests.post(url=url,data=daka_data,headers=cookies) print(html.text) if html.text.find("\"message\":\"ok\"")!=-1: print("打卡成功!")

班级成员打卡情况异常检查

班委每日检查班级成员打卡情况十分麻烦,做的又是重复的工作,考虑写个打卡情况检查减轻班委负担。

根据上面抓到的第一个数据包进行判断是否打卡以外,

还要对打卡选项中的每一项进行一一检查。那么就需要再抓取一个获取学生填写内容的数据包。 请求url为:https://v-xxtb.学校缩写.edu.cn/api/Ncov2019/get_my_record 提交参数主要还是一个学号,返回的数据中发现从{“Id” 开始到 “is_jkm”:1}是一个标准的json格式

那么就可以提取出中间JSON格式的数据,然后用python的json库进行格式化,然后进行逐一判断。

由于班级人数过多,不可能将班级成员学号手动输入,这里我采用从excel表格中读取

excel中 第一列为学号,第二列为姓名

如果检查到有未打开或打卡信息填写错误的同学就列出一个 excel表格,若输出excel 为空则班级成员打卡情况都没有错误。

代码如下:

import requests import xlrd import xlwt import json import re import os outfile="C:\\Users\\56272\\Desktop\\output.xls" #xlwt库 不支持写出xlsx try: data=xlrd.open_workbook("C:\\Users\\56272\\Desktop\\test.xlsx") except: print("打开文件失败,请检查文件路径是否正确") print("打开excel表格成功") if os.path.exists(outfile): os.remove(outfile) output=xlwt.Workbook() sheet=output.add_sheet("output") col1=sheet.col(0) col2=sheet.col(1) col3=sheet.col(2) col1.width=256*16 col2.width=256*16 col3.width=256*32 count=-1 table=data.sheet_by_index(0) print(table.nrows) for i in range(table.nrows): student_id=str(int(table.cell(i,0).value)) student_name=str(table.cell(i,1).value) print(student_id + " " + student_name) data={ 'id':student_id, 'user_type':'1', 'environment_type':'101', 'module_id':'63' } headers={ 'Hm_lvt_0d261a1cc090e61ad0a6fc0eb2f4fada':'1603109091', 'Hm_lpvt_0d261a1cc090e61ad0a6fc0eb2f4fada':'1603123986', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1301.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat' } daka_data={ 'id':student_id, 'user_type':'1', 'environment_type':'101', 'r_id':'258', 'student_id':student_id, 'state':'1', 'is_body_ok':'1', 'is_gl':'0', 'is_tl':'0', 'is_jc':'0', 'is_2_man':'0', 'is_family':'0', 'user_location':'1', 'location_province':'XX省', 'location_city':'XX市', 'location_country':'XX区', 'morning_state':'1', 'morning_temperature':'', 'afternoon_state':'1', 'afternoon_temperature':'', 'is_jkm':'1', 'roundmodule_id':'63' } url="https://v-xxtb.学校缩写.edu.cn/api/Ncov2019/get_record" html=requests.post(url=url,data=data) uid=re.findall("{\"id\":(.*?),\"name\"",html.text) if html.text.find("\"state\":0")!=-1: print("未打卡") count+=1 sheet.write(count,0,student_id) sheet.write(count,1,student_name) sheet.write(count,2,"未打卡") continue print("已经打卡") url="https://v-xxtb.学校缩写.edu.cn/api/Ncov2019/get_my_record" get_data={ 'id':student_id, 'user_type':'1', 'environment_type':'101', 'r_id': uid, 'student_id':student_id, 'round':'', 'module_id':'63', } html=requests.post(url,data=get_data) json_head=html.text.find("{\"id\"") json_tail=html.text.find(",\"re") json_text=html.text[json_head:json_tail] m_json=json.loads(json_text) flag=True if m_json['is_body_ok']!=1: flag=False if m_json['is_gl']!=0: flag=False if m_json['is_tl']!=0: flag=False if m_json['is_jc']!=0: flag=False if m_json['is_2_man']!=0: flag=False if m_json['is_family']!=0: flag=False if m_json['user_location']!=1: flag=False if m_json['morning_state']!=1: flag=False if m_json['afternoon_state']!=1: flag=False if m_json['is_jkm']!=1: flag=False if flag==False: print(m_json) count+=1 sheet.write(count,0,student_id) sheet.write(count,1,student_name) sheet.write(count,2,"打卡情况填写异常") output.save(outfile)

就这吧,无聊写写,懒得搞多线程,速度有点慢,崩撤卖溜~~~

最新回复(0)