--永恒的烦恼

小北学生自动打卡

自从开学以来学校要求学生每天都小北打卡体温上报,忘记打卡辅导员亲自过来找你喝茶,放假依然不放过。而打卡只能第二天的七点开始才能打卡,一觉醒来都中午了没有第一时间打卡又找我聊天,就想一个自动打卡的脚本,去giehub找了一波果然有人已经写出来了,感谢大佬的脚本:lovebai。仅是搬运别的脚本和个人使用教程。
一、本地运行:Git方式
这是原作者的方式,脚本地址有教程,但个人觉得比较麻烦,也不合适小白,最下面那个教程是我修改作者的源代码。
二、本地运行:直接定时运行
首先将脚本下载到本地,如果是windows电脑,那么可以用系统自带的任务管理器定时运行,具体怎么使用自己百度吧。linux的话就装个宝塔,里面有定时。注意这里会有坑,不知道为什么会有时候windows的定时任务有时候会不运行,server2012版本跟win10都遇到过,这里也不推荐使用这种方式。
三、docker青龙面板方式运行
这里如果安装了docker过的人就比较了解,需要安装青龙镜像,直接下载上传到青龙面板或者直接新建脚本复制原作者脚本。具体怎么安装请查看教程
以下是我自己的:



注意记得安装模块,其中有几个模块是不用的,青龙也安装不了的(难度挺大)。安装好直接定时运行就可以了。

如果你是啥也不会的小白,那么请按照以下教程

代码是修改lovebai的。

以下是在windows环境下的使用过程:
1.下载 python3.8:官网下载地址(有点慢)

https://www.python.org/ftp/python/3.8.1/python-3.8.1-amd64.exe

2.安装python:由于我自己本身已经安装,这里就不截图了,直接点击下一步就可以了。记得安装的时候勾选上添加环境变量。
3.测试安装是否成功:win键 + R键 ,输入cmd,点击确定。在cmd环境下输入:python -V 显示版本号则证明安装成功,如果报错有可能是没有将python添加到系统环境变量中,请自行百度搜索 python添加到系统环境变量

4.安装python requests库:

python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

我的已经安装完成,所以才提示这个。
5.新建文本文件,打开文件并将以下代码复制进去,修改代码或者到 我的GitHub 上直接下载使用:

import base64
import random
import requests
import time
import datetime

# 定义运行时间,24小时制
timeing = '7'   # 设置每天早上7点开始运行,每运行成功一次会延迟几秒运行,理论上:单个账号运行300次便延迟一分钟
# 定义运行过程中网络延迟导致打卡的时间从七点慢慢到八点的时间
timesub = 0  # 默认是减零,可以看运行日志下次运行的时间决定,账号越多后面减的也应该越多,这是由于程序在运行过程中请求打卡网络的延迟问题造成

# 设置账号 密码
array = [
    ["你的账号", "你的密码"],
    ["你的第二个账号", "第二个账号的密码"],
]

# 东区宿舍 经纬度
LOCATION = "109.632015,23.239991"
# 位置,可选通过接口获取
COORD = "中国-湖北省-武汉市-江夏区"

# API地址
BASE_URL = "https://xiaobei.yinghuaonline.com/xiaobei-api/"
captcha_url = BASE_URL + 'captchaImage'
# 登录
login_url = BASE_URL + 'login'
# 打卡
health_url = BASE_URL + 'student/health'
# header 请求头
HEADERS = {
    "user-agent": "iPhone10,3(iOS/14.4) Uninview(Uninview/1.0.0) Weex/0.26.0 1125x2436",
    "accept": "*/*",
    "accept-language": "zh-cn",
    "accept-encoding": "gzip, deflate, br"
}

def get_health_param(coord):
    # 体温随机为35.8~36.7
    temperature = str(random.randint(358, 367) / 10)
    # 107.807008,26.245838
    rand = random.randint(1111, 9999)
    # 经度
    location_x = LOCATION.split(',')[0].split(
        '.')[0] + '.' + LOCATION.split(',')[0].split('.')[1][0:2] + str(rand)
    # 纬度
    location_y = LOCATION.split(',')[1].split(
        '.')[0] + '.' + LOCATION.split(',')[1].split('.')[1][0:2] + str(rand)
    location = location_x + ',' + location_y
    return {
        "temperature": temperature,
        "coordinates": coord,
        "location": location,
        "healthState": "1",
        "dangerousRegion": "2",
        "dangerousRegionRemark": "",
        "contactSituation": "2",
        "goOut": "1",
        "goOutRemark": "",
        "remark": "无",
        "familySituation": "1"
    }

def xiaobei_update(username, password):
    print("\n"+username+"开始操作")
    flag = False

    # 获取验证信息
    try:
        print("开始获取验证信息")
        response = requests.get(url=captcha_url, headers=HEADERS)

        uuid = response.json()['uuid']
        showCode = response.json()['showCode']
        print("验证信息获取成功")
    except:
        print("验证信息获失败")
        return False

    # 使用验证信息登录
    try:
        print("正在登录小北平台")
        response = requests.post(url=login_url, headers=HEADERS, json={
            "username": username,
            "password": str(base64.b64encode(password.encode()).decode()),
            "code": showCode,
            "uuid": uuid
        })
        # print(response)
        print("平台响应:"+response.json()['msg'])
    except:
        print("登录失败")
        return False

    # 检测Http状态
    if response.json()['code'] != 200:
        print("登陆失败:"+response.json()['msg'])
    else:
        try:
            print(username+"登陆成功,开始打卡")

            HEADERS['authorization'] = response.json()['token']
            response = requests.post(
                url=health_url, headers=HEADERS, json=get_health_param(COORD))
            # print(response)
        except:
            print(username+"打卡失败")
        HEADERS['authorization'] = ''

    # 解析结果
    try:
        if "已经打卡" in response.text:
            print(username+"?今天已经打过卡啦!")
            flag = True
        elif response.json()['code'] == 200:
            print(username+"?恭喜您打卡成功啦!")
            flag = True
        else:
            print(username+"打卡失败,平台响应:" + response.json())
    except:
        return False
    return flag

if __name__ == "__main__":
    count, failed = 0, 0
    failed_username = ""
    while True:
        nowtime = datetime.datetime.now().strftime('%H')
        print(f'您设置时间的运行时间为 {timeing}点 运行')
        if nowtime == timeing or timeing == str(int(nowtime)-1):
            while True:
                # 循环打卡列表
                for i in array:
                    if xiaobei_update(i[0], i[1]) == False:
                        failed = failed+1
                        failed_username = failed_username+str(i[0])+",\n"
                    count = count+1
                    time.sleep(1)

                if failed == 0:
                    title = "\n?恭喜您打卡成功啦!一共是"+str(count)+"人"
                else:
                    title = "\n?共操作"+str(count)+"人,失败"+str(failed)+"人"
                    message = "失败账号:\n"+failed_username
                print(title)
                count, failed = 0, 0
                print('程序将在 ' + (datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S") + ' 继续运行\n\n')
                time.sleep(60*60*24-timesub)   # 24小时的秒数减去运行过程网络延迟的时间
        else:
            print('当前不在运行时间段,程序将不会运行,一个小时后将再次运行')
        time.sleep(3600)

其中,只需要账号密码修改为你的账号密码,比如我的:

如果你还有其他账号可以按以下图的格式,每添加一个账号就需要 [”,”], 的形式添加:

如果你只有一个账号,把第二个删除了就可以了,如图:

其他可以根据注释来修改,默认是每天早上的7点多跟8点多运行。

5.将txt文件的后缀名修改py

注意,如果你的txt文件不显示后缀,需要在文件扩产名显示,如图:

6.运行python程序
在cmd环境下,输入: python 然后直接将刚才修改的文件拖进cmd里面,它会显示路径的,回车便执行,一直运行便可,到时间它会运行的。

注意:文件名后缀名是注意:文件名后缀名是 .py,不是.py.txt

赞(4) 打赏
转载请带上源站链接:玖伴一鹏 » 小北学生自动打卡

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏