程序员

职教云自动签到【云函数】

作者:admin 2021-10-26 我要评论

职教云自动签到【云函数】 目录 职教云自动签到脚本【云函数】 第一步任意浏览器搜索 【腾讯云函数】 然后注册认证云函数一个月免费的资源使用量40万GBs调用次数...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

职教云自动签到【云函数】

目录

职教云自动签到脚本【云函数】

第一步:任意浏览器搜索 【腾讯云函数】 然后注册认证(云函数一个月免费的资源使用量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 * 

最后一步,点击完成就可以了

?

如果要查看运行是否可以成功,只需要点击【函数服务】找到自己创建的云函数 点击【并发管理】进入后选择【函数管理】输入正确的账户密码之后 部署 测试就可以啦!

本教程参照其他博主创作而来,仅供学习交流使用!

;原文链接:https://blog.csdn.net/Ocean_52/article/details/116176628

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 职教云自动签到【云函数】

    职教云自动签到【云函数】

  • 还记得你小时候沉迷的小游戏吗?现在用

    还记得你小时候沉迷的小游戏吗?现在用

  • 手把手教你爬取清纯小姐姐私房照,小孩

    手把手教你爬取清纯小姐姐私房照,小孩

  • 用和学妹聊天的时间学Python高级进阶技

    用和学妹聊天的时间学Python高级进阶技

腾讯云代理商
海外云服务器