之前在CSDN发了一篇易校园的打卡教程,后面易校园进行了改版,原来的脚本失效了,但是学校又天天催打卡,于是就有了这篇。

本来也是在CSDN上发的,但是因为某些原因审核不通过,也是因此我才产生了搭建个人博客的想法。

2022.11.16

脚本仍然有用,使用几个月下来,唯一的不爽是session隔一段时间就会更换导致打卡失败,每次都得重新抓包替换上去,有些麻烦。

等有时间再看看获取session的接口可不可以找到,然后集成到代码里,就可以实现全自动化的打卡了!

准备

软件版本(请自行百度下载)

  • HttpCanary:v9.9.9.9安卓版
    可以用burpsuite,findler等其他的Windows抓包软件代替,自行搜索如何用电脑抓手机的包。

  • 易校园:v4.1.17(下最新版就好)
    上篇教程的时候,最新版抓包不行,这次又可以了

http Canary配置

一般一打开就会提示安装证书,跟着app的引导,安装就好了,要是没有弹出,可以参考我之前的博客
python实现易校园自动打卡教程(已经被CSDN删了)

步骤

1、完场上述准备工作

2、进入易校园打卡界面,等待定位完成,划到底部【先不要提交】

这样做是为了快速找到提交的包

3、此时打开HttpCanary,点击右下角的小飞机,开始抓包

4、回到易校园,点击提交

5、回到HttpCanary,再次点击右下角小飞机,停止抓包

6、从下往上找出【POST https://h5.xiaofubao.com/marketing/health/doDetail】

注意别找错了,一定是doDetail

7、找到之后点进去,点击请求包
img

嫌手动复制粘贴麻烦的话,推荐使用正则表达式把请求包转换成python字典的格式

代码如下,修改填入你自己的参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import requests
import yagmail
requests.packages.urllib3.disable_warnings()


def sendEmail(email_to, email_title, email_content):
# 邮件用户
mail_user = '【你的QQ邮箱】'
# 授权码
mail_key = '【授权码】' # 不会搞的自行百度qq邮箱授权码
# smtp服务器
mail_host = 'smtp.qq.com'
try:
mail_server = yagmail.SMTP(
user=mail_user, password=mail_key, host=mail_host)
mail_server.send(email_to, email_title,
email_content, attachments=None)
mail_server.close()
return True
except Exception as e:
print(e)
return False

# 上面【raw】里的内容
h = {
'Host': 'h5.xiaofubao.com',
'Connection': 'keep-alive',
'Content-Length': '2051',
'Accept': 'application/json, text/plain, */*',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': '【填你的】',
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'Origin': 'https://h5.xiaofubao.com',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': '【填你的】',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'Cookie': '【填你的】'
}

# 上面【预览】里面的内容
d = {
'id': '【填你的】',
'schoolCode': '【填你的】',
'schoolName': '【填你的】',
'identityType': '【填你的】',
'userId': '【填你的】',
'mobilePhone': '【填你的】',
'name': '【填你的】',
'jobNo': '【填你的】',
'departmentCode': '【填你的】',
'department': '【填你的】',
'specialitiesCode': '【填你的】',
'specialities': '【填你的】',
'classCode': '【填你的】',
'className': '【填你的】',
'provinceCode': '【填你的】',
'province': '【填你的】',
'cityCode': '【填你的】',
'city': '【填你的】',
'inSchool': '【填你的】',
'contactArea': '【填你的】',
'isPatient': '【填你的】',
'contactPatient': '【填你的】',
'linkPhone': '【填你的】',
'parentsPhone': '【填你的】',
'locationInfo': '【填你的】',
'longitudeAndLatitude': '【填你的】',
'isSuspected': '【填你的】',
'healthStatusNew': '【填你的】',
'holidayInSchool': '【填你的】',
'identitySecondType': '【填你的】',
'districtCode': '【填你的】',
'district': '【填你的】',
'isFamiliyPatient': '【填你的】',
'isCommunityPatient': '【填你的】',
'isTodayBack': '【填你的】',
'patientHospital': '',
'isolatedPlace': '',
'country': '',
'vaccineStatus': '【填你的】',
'noVaccineReason': '',
'vaccineOneTime': '【填你的】',
'vaccineTwoTime': '【填你的】',
'vaccineThreeTime': '【填你的】',
'deviceId': '【填你的】',
'lastNucleicAcidDate': '',
'roommateHealthStatus': '【填你的】',
'address': '【填你的】',
'backWay': '',
'backWayName': '',
'backAddress': '',
'inGovQuarantine': '',
'inSchoolQuarantine': '',
'inHomeQuarantine': '',
'nucleicAcidFlag': '',
'isInCompany': '',
'backRemark': '',
'backProvinceCode': '',
'backProvince': '',
'backCityCode': '',
'backCity': '',
'backDistrictCode': '',
'backDistrict': '',
'loginUserId': '【填你的】',
'ymId': '【填你的】',
'sessionId': '【填你的】',
'loginUserName': '【填你的】',
'loginSchoolCode': '【填你的】',
'loginSchoolName': '【填你的】',
'platform': 'YUNMA_APP'
}


response = requests.post(
"https://h5.xiaofubao.com/marketing/health/doDetail", headers=h, data=d, verify=False)

if response.json()['success'] == True:
sendEmail("【填你的邮箱,用于接收打卡是否成功的消息】", "打卡成功", "嘿嘿嘿,恭喜你,打卡成功啦~")
print("打卡成功!")
else:
sendEmail("【填你的邮箱,用于接收打卡是否成功的消息】", "打卡失败", "哎,别沮丧啊!打卡失败了呢!")
print("打卡失败!")

8、调试代码没问题之后,把代码挂到云服务器上(没有云服务器,可以用腾讯云函数),设置定时任务即可