github actions实现GLaDOS自动签到

2,025 阅读3分钟

前言

之前一直用的vpn是一元机场,但是最近几天非常的不稳定,想找一个临时用的,想起了老朋友GLaDOS,但是之前注册过的账号没法用了,要求我必须充值才行,又重新注册了一个,注册后发现貌似签到可以领时间(但是看评论说现在不太行了,每次签到只有一定的概率获得时间)。但是不管了,自己死马当活马医,同时了解到github actions可以实现GLaDOS的自动签到,因此来耍一耍。

方法一

GitHub Actions 实现 GLaDOS 自动签到 - 知乎

第一个链接是知乎教程,很详细,但是上次代码更新是俩年前了。具体代码是用JavaScript实现。消息推送使用的是push plus,这个push plus的作用是在执行github actions之后把执行结果推送到微信,达到一个微信提醒的效果(但现在push plus注册需要实名认证,这个认证要花一块钱)。

剩下的就是按照教程来,不需要再做什么改动了。

方法二

Devilstore/Gladoscheckin: Glados自动签到

第二个链接是代码最近一直在更新的。具体业务代码用python实现。他这个用的消息推送是push deer,我用了,挺麻烦还不好用,不如push plus好用,稍加改动就可以换成push plus,代码如下:

import requests
import json
import os

# from pypushdeer import PushDeer # 使用push plus,不用pushdeer
import requests
 
def send_wechat(token, title, msg):
    token = token
    title = title
    content = msg
    template = 'html'
    url = f"https://www.pushplus.plus/send?token={token}&title={title}&content={content}&template={template}"
    print(url)
    r = requests.get(url=url)
    print(r.text)

# -------------------------------------------------------------------------------------------
# github workflows
# -------------------------------------------------------------------------------------------
if __name__ == '__main__':
    # pushdeer key 申请地址 https://www.pushdeer.com/product.html
    sckey = os.environ.get("SENDKEY", "")

    # 推送内容
    title = ""
    success, fail, repeats = 0, 0, 0        # 成功账号数量 失败账号数量 重复签到账号数量
    context = ""

    # glados账号cookie 直接使用数组 如果使用环境变量需要字符串分割一下
    cookies = os.environ.get("COOKIES", []).split("&")
    if cookies[0] != "":

        check_in_url = "https://glados.space/api/user/checkin"        # 签到地址
        status_url = "https://glados.space/api/user/status"          # 查看账户状态

        referer = 'https://glados.space/console/checkin'
        origin = "https://glados.space"
        useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
        payload = {
            'token': 'glados.one'
        }
        
        for cookie in cookies:
            checkin = requests.post(check_in_url, headers={'cookie': cookie, 'referer': referer, 'origin': origin,
                                    'user-agent': useragent, 'content-type': 'application/json;charset=UTF-8'}, data=json.dumps(payload))
            state = requests.get(status_url, headers={
                                'cookie': cookie, 'referer': referer, 'origin': origin, 'user-agent': useragent})

            message_status = ""
            points = 0
            message_days = ""
            
            
            if checkin.status_code == 200:
                # 解析返回的json数据
                result = checkin.json()     
                # 获取签到结果
                check_result = result.get('message')
                points = result.get('points')

                # 获取账号当前状态
                result = state.json()
                # 获取剩余时间
                leftdays = int(float(result['data']['leftDays']))
                # 获取账号email
                email = result['data']['email']
                
                print(check_result)
                if "Checkin! Got" in check_result:
                    success += 1
                    message_status = "签到成功,会员点数 + " + str(points)
                elif "Checkin Repeats!" in check_result:
                    repeats += 1
                    message_status = "重复签到,明天再来"
                else:
                    fail += 1
                    message_status = "签到失败,请检查..."

                if leftdays is not None:
                    message_days = f"{leftdays} 天"
                else:
                    message_days = "error"
            else:
                email = ""
                message_status = "签到请求URL失败, 请检查..."
                message_days = "error"

            context += "账号: " + email + ", P: " + str(points) +", 剩余: " + message_days + " | "

        # 推送内容 
        # title = f'Glados, 成功{success},失败{fail},重复{repeats}'
        title = message_status
        print("Send Content:" + "\n", context)
        
    else:
        # 推送内容 
        title = f'# 未找到 cookies!'

    print("sckey:", sckey)
    print("cookies:", cookies)
    
    # 推送消息
    # 未设置 sckey 则不进行推送
    if not sckey:
        print("Not push")
    else:
        send_wechat(sckey, title, context)
        # pushdeer = PushDeer(pushkey=sckey) 
        # pushdeer.send_text(title, desp=context)

微信推送结果展示

image-20250211192808987.png

注意

github actions触发时间修改

image-20250211192848134.png

Cron 表达式有五个字段,分别表示分钟、小时、日、月、星期。而且采用的是UTC时间, utc时间+8小时=北京时间,上图展示的是utc时间4点和10点触发,换成北京时间就是12点和下午六点。

github actions的开启和关闭

fork他们项目时发现,有时github action是被关闭的,如下图所示:

image-20250211193446808.png 可能需要你手动开启,点击Enable workflow