目录
职教云自动签到脚本【云函数】
第一步:任意浏览器搜索 【腾讯云函数】 然后注册认证(云函数一个月免费的资源使用量40万GBs;调用次数100 万次)
第二步:新建空白空白函数 设置语言为Python3.6 选择空白模版 如下图所示
第三步:将ndex.py更改为zjy.py,执行方法改为zjy.auto_signin 如下图所示
第四步:将python的内容复制到zjy.py,并更改用户名和密码(改成需要自动签到的用户名和密码即可)
第五步:选择高级配置,配置内容如下 内存64MB,超时2s,设置环境变量TZ=亚洲/上海
第六步:修改触发方式,我这里设置的是周天到周六(也就是每天运行)每天的7-18点每隔10s触发一次。(可以参照官方文档修改)
【注意:如果按我写的这个触发方式一个月的免费额度应该只够一个账号使用;想要同时挂两个函数的可以再申请一个账号,或者更改触发方式】
第一步:任意浏览器搜索 【腾讯云函数】 然后注册认证(云函数一个月免费的资源使用量40万GBs;调用次数100 万次)
第二步:新建空白空白函数 设置语言为Python3.6 选择空白模版 如下图所示
函数名称和地域可以随便命名和选择
第三步:将ndex.py更改为zjy.py,执行方法改为zjy.auto_signin 如下图所示
(提交方式可以选择在线编辑,我会把代码复制在下面)
第四步:将python的内容复制到zjy.py,并更改用户名和密码(改成需要自动签到的用户名和密码即可)
如果运行不了 就请移步查看现在的职教云软件的版本 在 equipmentAppVersion="2.8.43" 将 2.8.43 改成最新的版本就好
# -*- coding: utf8 -*-
import requests,json,time,smtplib,hashlib
from email.mime.text import MIMEText
from email.header import Header
def auto_signin(event, context):
userName,userPwd="账号","密码"
mailConfig={
"enabled": False,"smtp_server": "SMTP地址","smtp_port": "SMTP端口","from_addr": "发件人邮箱","from_pwd": "发件人密码","to_addr": "收件人邮箱"
}
serverChan={
"enabled": True,"SCKEY": "在这填写server酱的SCKEY"} #示例#"enabled": True,"SCKEY": "********" }
url_api="https://zjyapp.icve.com.cn/newMobileAPI/"
equipmentModel="Xiaomi Redmi K30 Pro"
equipmentApiVersion=10
equipmentAppVersion="2.8.43"
emit = str(int(time.time())) + "000"
basicData={"equipmentAppVersion": equipmentAppVersion,"equipmentApiVersion":equipmentApiVersion,"equipmentModel":equipmentModel}
headers = {
"Content-Type": "application/x-www-form-urlencoded","Host": "zjyapp.icve.com.cn","Connection": "Keep-Alive","Accept-Encoding": "gzip","User-Agent": "okhttp/4.5.0","emit":emit,"device":getDevice(equipmentModel,str(equipmentApiVersion),equipmentAppVersion,emit)
}
userData = {"clientId": "f47d9901259e48a982eb9af711410aba", "sourceType": "2", "userPwd": userPwd, "userName": userName,
"appVersion": equipmentAppVersion}
userData.update(basicData)
session = requests.Session()
login=session.post(url_api + "MobileLogin/newSignIn", data=userData,headers=headers)
loginInfo=json.loads(login.text)
if loginInfo["code"]!=1:
return (loginInfo["msg"])
stuId = loginInfo["userId"]
faceDate = (time.strftime("%Y-%m-%d", time.localtime()))
newToken=loginInfo["newToken"]
todayClassData = {"stuId": stuId, "faceDate": faceDate,"newToken": newToken}
todayClassData.update(basicData)
todayClass=session.post(url_api + "faceteach/getStuFaceTeachList", data=todayClassData, headers=headers)
todayClassInfo=json.loads(todayClass.text)["dataList"]
result=""
for i in range(len(todayClassInfo)):
inClassData = {
"activityId": todayClassInfo[i]["Id"], "stuId": stuId, "classState": todayClassInfo[i]["state"], "openClassId": todayClassInfo[i]["openClassId"],
"newToken": newToken
}
inClassData.update(basicData)
inClass=session.post(url_api + "faceteach/newGetStuFaceActivityList", data=inClassData, headers=headers)
inClassInfo=json.loads(inClass.text)["dataList"]
for n in range(len(inClassInfo)):
if inClassInfo[n]["DataType"] == "签到" and inClassInfo[n]["State"] != 3:
attendData = {
"activityId": todayClassInfo[i]["Id"], "openClassId": todayClassInfo[i]["openClassId"], "stuId": stuId, "typeId": inClassInfo[n]["Id"], "type": "1",
"newToken": newToken
}
attendData.update(basicData)
attend=session.post(url_api + "faceteach/isJoinActivities", data=attendData,headers=headers)
attendInfo=json.loads(attend.text)
if attendInfo["isAttend"] != 1:
signInData = {
"signId": inClassInfo[n]["Id"], "stuId": stuId, "openClassId": todayClassInfo[i]["openClassId"],"sourceType": "2", "checkInCode": inClassInfo[n]["Gesture"],"activityId": todayClassInfo[i]["Id"],
"newToken": newToken
}
signInData.update(basicData)
signIn=session.post(url_api + "faceteach/saveStuSign", data=signInData,headers=headers)
signInInfo=json.loads(signIn.text)
signInTime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
result=result+(todayClassInfo[i]["courseName"] + " " + signInTime + " " + signInInfo["msg"])+"\r\n"
if result == "":
result = "当前不存在未签到"
else:
if mailConfig["enabled"]:
sendMail(mailConfig["smtp_server"],mailConfig["smtp_port"],mailConfig["from_addr"],mailConfig["from_pwd"],mailConfig["to_addr"],result)
if serverChan["enabled"]:
sendWechat(serverChan["SCKEY"],result)
return result.replace("\r\n", " ")
def getMd5(str):
md5=hashlib.md5()
md5.update(str.encode("utf-8"))
return md5.hexdigest()
def getDevice(equipmentModel,equipmentApiVersion,equipmentAppVersion,emit):
tmp=getMd5(equipmentModel)+equipmentApiVersion
tmp=getMd5(tmp)+equipmentAppVersion
tmp=getMd5(tmp)+emit
return getMd5(tmp)
def sendWechat(SCKEY,content):
resultData={"text": "职教云签到结果", "desp": content}
content.replace("\r\n", "\n\n")
requests.post("https://sc.ftqq.com/" + SCKEY + ".send",data=resultData)
def sendMail(smtp_server,smtp_port,from_addr,from_pwd,to_addr,content):
stmp=smtplib.SMTP_SSL(smtp_server,smtp_port)
stmp.login(from_addr,from_pwd)
message = MIMEText(content, "plain", "utf-8")
message["From"] = Header("小牛", "utf-8")
message["From"].append("<" + from_addr + ">", 'ascii')
message["To"] = Header("用户", "utf-8")
message["To"].append("<" + to_addr + ">", 'ascii')
subject = "签到结果"
message["Subject"] = Header(subject, 'utf-8')
try:
stmp.sendmail(from_addr, to_addr, message.as_string())
except Exception as e:
print ('邮件发送失败--' + str(e))
第五步:选择高级配置,配置内容如下 内存64MB,超时2s,设置环境变量TZ=亚洲/上海
第六步:修改触发方式,我这里设置的是周天到周六(也就是每天运行)每天的7-18点每隔10s触发一次。(可以参照官方文档修改)
【注意:如果按我写的这个触发方式一个月的免费额度应该只够一个账号使用;想要同时挂两个函数的可以再申请一个账号,或者更改触发方式】
其他cron命令
周一,五上午的8点10-25之间每隔2秒触发一次 【其他案例可以查看官方文档】
*/2 10-25 8 * * MON,FRI *
最后一步,点击完成就可以了
如果要查看运行是否可以成功,只需要点击【函数服务】找到自己创建的云函数 点击【并发管理】进入后选择【函数管理】输入正确的账户密码之后 部署 测试就可以啦!
本教程参照其他博主创作而来,仅供学习交流使用!