别着急,坐和放宽
这个Python脚本旨在通过网络请求与API进行交互,实现获取用户令牌(Token)、查询未考勤数量、获取考勤码与完成考勤等功能。它主要针对的是上课了的数字考勤系统,通过模拟网络请求来实现与系统的交互。
fetch_token(uid)
uid
- 用户的ID。requests.post
向URL发送POST请求。get_uncall_number(token)
token
- 用于身份验证的Token。create_call_number(token, call_id)
token
- 用于验证的Token。call_id
- 考勤ID。validate_call_number(token, call_stu_id, num)
token
- Token值。call_stu_id
- 学生考勤ID。num
- 考勤码。main()
uid.txt
文件读取用户ID。if __name__ == "__main__": main()
注意:此脚本涉及网络请求和数据处理,应在遵守相关法律法规和网络安全准则的前提下使用。
import requests
def fetch_token(uid):
"""
发送POST请求以获取token值。
参数:
uid: 用户的ID。
返回:
如果状态码为200,则返回token值,否则返回None。
"""
url = "http://*****.cn/api/Main/Quick"
headers = {
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"DNT": "1",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Origin": "http://******",
"Referer": f"http://***************?uid={uid}",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
}
data = {"uid": uid}
response = requests.post(url, headers=headers, data=data)
try:
response_json = response.json()
if response_json.get("state") == 200:
return response_json.get("token")
except ValueError:
print("响应内容无法解析为JSON。")
return None
def get_uncall_number(token):
"""
使用token发送GET请求以获取未呼叫数量。
参数:
token: 用于验证的token值。
返回:
响应的文本内容。
"""
url = "http://********.cn/api/Call/GetUnCallNumber"
headers = {
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"DNT": "1",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0",
"Auth": token,
"Origin": "http://******",
"Referer": "http://********/wei/pages/attendance/call_sign.html?1711430518796",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
}
response = requests.post(url, headers=headers)
response_json = response.json()
# 处理响应
if response_json.get("state") == "ok" and "msg" in response_json:
print("无待签到的数字考勤")
elif response_json.get("state") == "ok" and "callStuId" in response_json:
call_id = response_json["call"]["CallId"]
call_stu_id = response_json["callStuId"] # 获取callStuId
course_name = response_json["call"]["CourseName"] # 获取课程名称
print("课程名称:", course_name) # 打印课程名称
num = create_call_number(token, call_id) # 获取考勤码
if num:
validate_call_number(token, call_stu_id, num) # 验证考勤码
def create_call_number(token, call_id):
"""
使用token和call_id发送POST请求以获取考勤码。
参数:
token: 用于验证的token值。
call_id: 考勤ID。
返回:
考勤码。
"""
url = "http://******/api/Call/CreateCallNumber"
headers = {
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"DNT": "1",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Auth": token,
"Origin": "http://******",
"Referer": "http://******/wei/pages/attendance/call_num.html?callid=" + call_id,
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
}
data = {
"Flag": "0",
"CallId": call_id
}
response = requests.post(url, headers=headers, data=data)
try:
response_json = response.json()
if response_json.get("state") == "ok" and "data" in response_json:
num = response_json["data"]
print("考勤码:", num)
return num
else:
print("获取考勤码失败")
except ValueError:
print("响应内容无法解析为JSON。")
return None
def validate_call_number(token, call_stu_id, num):
"""
使用token, callStuId和考勤码num发送POST请求以验证考勤码。
参数:
token: 用于验证的token值。
call_stu_id: 学生考勤ID。
num: 考勤码。
"""
url = "http://******/api/Call/VaildCallNumber"
headers = {
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"DNT": "1",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Auth": token,
"Origin": "http://******",
"Referer": "http://******/wei/pages/attendance/call_sign.html?1711431873822",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
}
data = {
"callStuId": call_stu_id,
"num": num
}
response = requests.post(url, headers=headers, data=data)
try:
response_json = response.json()
print("验证考勤码响应:", response_json)
except ValueError:
print("响应内容无法解析为JSON。")
def main():
with open('uid.txt', 'r') as file:
uids = file.readlines()
for uid_str in uids:
uid = uid_str.strip() # 移除尾部换行符
token = fetch_token(uid)
if token:
print(f"UID {uid} 获取Token成功:", token)
# 使用获取到的token继续执行逻辑
get_uncall_number(token) # 请确保此函数和它调用的其他函数能正确处理token
else:
print(f"UID {uid} 无法获取token或状态码不为200。")
# 调用主函数
if __name__ == "__main__":
main()