赞
踩
参考图文解释Glados自动签到免费获取天数(github action版)
之前用了一阵sever酱,然后前两天说cookie过期了,后来改了也没用,于是想自己写一份cookie不过期的。我尝试了半天,一直报一个json格式的错。(在电脑是可行的,在action上就报错)最后原博客回答:我看了下目前用github action的方式会触发cloudflare的五秒盾,阻止了脚本的签到行为。估计github上用这种方式打卡的人太多了就把这个ip给封了可能。就简单记一下学习过程。(不过其他的行为都是可以的)
最后想起来自己还租了个服务器,最后就在服务器上下了个pycharm(当然只下个解释器就行了),开着一直跑程序就行了。一天两次,懒得动脑筋,就time.sleep了。
具体看
官方文档
主要依靠 在钉钉上拉一个群(三人及以上),不过三人群之后可以踢掉一个成为两人群,里面有个智能群助手上加入一个自定义机器人。
注意这个加签,我是勾上加签,关键词和ip地址没加,然后会给你一个webhook网址,对这个网址进行post请求即可完成推送。
下面代码的secret 和 webhook 我是改过的。
加上签之后网址会变复杂。
加签之后webhook
mobile 是要发送的人的手机号 /也可以改成要发送人的昵称 代码的 atUserIds
text 是文本信息
import time import hmac import hashlib import base64 import urllib.parse def dingding(mobile,text): timestamp = str(round(time.time() * 1000)) #加签 secret = 'SECe875a893333f66767cd8d09c3bd122e01ca9214b38f7130b2d1dd7d9f' secret_enc = secret.encode('utf-8') string_to_sign = '{}\n{}'.format(timestamp, secret) string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) #Webhook Webhook = "https://oapi.dingtalk.com/robot/send?access_token=5efbd2e95361045ae7ed6dce1030234c573021eeefe148aac9f68d5" #加上签之后网址后面要加上 一段签名计算代买后的sign以及时间,不加签的应该不需要后面跟的。 url = Webhook + "×tamp={}&sign={}".format(timestamp, sign) headers = { 'Content-Type': 'application/json' } json ={ "at": { "atMobiles":[ mobile ], "atUserIds":[ "" ], "isAtAll": "false" }, "text": { "content": text }, "msgtype":"text" } requests.post(url=url , headers= headers,json=json)
最后效果是这样。
参考python玩钉钉机器人
先从qq邮箱的页面获取smtp
下面的的key也已改过。
subject为发送主题
email为收件人邮箱 格式必须为“xxxxxxxxx@qq.com”
text 为文本内容 字符串
获取smtp之后 EMAIL_ADDRESS= 换成你的邮箱地址,就是你作为发件人
def qqemail(subject,email,text): #无需安装第三方库 key='bsjpqxig' #换成你的QQ邮箱SMTP的授权码(QQ邮箱设置里) 设置-> 账户-> SMTP服务 EMAIL_ADDRESS='885317429@qq.com' #换成你的邮箱地址 EMAIL_PASSWORD=key import smtplib smtp=smtplib.SMTP('smtp.qq.com',25) import ssl context=ssl.create_default_context() sender=EMAIL_ADDRESS #发件邮箱 receiver=email#"255576170@qq.com"#EMAIL_ADDRESS #收件邮箱 from email.message import EmailMessage subject=subject body=text msg=EmailMessage() msg['subject']=subject #邮件主题 msg['From']=sender msg['To']=receiver msg.set_content(body) #邮件内容 with smtplib.SMTP_SSL("smtp.qq.com",465,context=context) as smtp: smtp.login(EMAIL_ADDRESS,EMAIL_PASSWORD) smtp.send_message(msg)
手机上关注qq邮箱公众号,每天发推送就会有提醒。效果如下。
参考
官方文档
其实很简单,具体分为两个部分,一个是.yml文件,一个是自己写的程序(可以不是python)
官方文档说yaml文件必须创建在.github/workflows下
创建的时候这里打出/
即可完成创建。
了解一下yaml的语法
我们最关心的是定时的时间,
例子:
# 每月的最后1天
0 0 L * * *
说明:
Linux
* * * * *
- - - - -
| | | | |
| | | | +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | +---------- month (1 - 12) OR jan,feb,mar,apr ...
| | +--------------- day of month (1 - 31)
| +-------------------- hour (0 - 23)
+------------------------- minute (0 - 59)
- cron: 0 16 * * *
这个意思就是定时每天的16点 但因为这个是国际协调时间UTC
我们比它晚8个小时,所以对我们来说就是定时每天24点的时候
test.yml
代码中都有注解,意思就是每修改一次[master]里的分支一次 或者每定时一次 运行一次写好的代码g1.py
我们要装的python包就写在根目录创建的requirements.txt文件下即可。如果知识qq邮箱推送,可以不装包都行。
它的默认分支应该叫main,在setting里的branch下改个名就好,或者把yml文件的master改成main就行。
示例:
#工作名字 name: glados-checkin # on: workflow_dispatch: push: # 当对分支master进行push操作的时候,这个工作流就被触发了 branches: [ master ] pull_request: #只运行特定分支master branches: [ master ] schedule: # 定时任务,在每天的24点 18点推送签到信息到邮箱 - cron: 0 16 * * * # 定时器更改时间 # https://tool.lu/crontab/ # https://datetime360.com/cn/utc-cst-china-time/ #UTC时间 国际协调时间+8=北京时间 # https://docs.github.com/cn/actions/using-workflows/workflow-syntax-for-github-actions#onschedule 官方参考 #watch: # types: started jobs: #将工作流程中运行的所有作业组合在一起 checkin: #定义名为 checkin 的作业。 子键将定义作业的属性 runs-on: ubuntu-latest #将作业配置为在最新版本的 Ubuntu Linux 运行器上运行 #if: github.event.repository.owner.id == github.event.sender.id # https://p3terx.com/archives/github-actions-manual-trigger.html steps: - uses: actions/checkout@v2 #uses 关键字指定此步骤将运行 actions/checkout 操作的 v3。 这是一个将存储 #库签出到运行器上的操作,允许您对代码(如生成和测试工具)运行脚本或其他操 #作。 每当工作流程将针对存储库的代码运行时,都应使用签出操作。 - name: Set up Python 3.9 uses: actions/setup-python@v2 with: python-version: 3.9.1 - name: requirements run: | python -m pip install --upgrade pip pip3 install -r requirements.txt # if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Checkin run: | python3 ./g1.py env: #设置secrets的环境变量 COOKIE1: ${{ secrets.COOKIE1 }} COOKIE2: ${{ secrets.COOKIE2 }} #SMTP: ${{ secrets.SMTP }} MAIL1: ${{ secrets.MAIL1 }} MAIL2: ${{ secrets.MAIL2 }}
如果不想让别人知道自己的cookie 或者smtp一些比较隐私的东西,可以最后加上环境变量
env:
#设置secrets的环境变量
COOKIE1: ${{ secrets.COOKIE1 }}
COOKIE2: ${{ secrets.COOKIE2 }}
#SMTP: ${{ secrets.SMTP }}
MAIL1: ${{ secrets.MAIL1 }}
MAIL2: ${{ secrets.MAIL2 }}
然后在setting里的secrets添加即可,参考,这里的名称必须为大写
在python 中调用的时候,这样调用就行了
cookie1 = os.environ["COOKIE1"]#因为$前面是大写所以也是大写
还有一个说法说是smtp的授权码是加密的,所以必须要放在Secrets里,但我没放还是发出去了,应该不影响,只是防隐私(之前一直出错,就把cookie啥的加进去试试)。
如果只是个人用,我是直接把仓库换成私有的了,在setting下,把仓库性质改成private,就不用加这个secrets这么麻烦了。
钉钉机器人的限制是每分钟最多发20条消息,超过了就会系统就会禁你机器人10分钟。
qq邮箱的限制是每天最多发500条邮箱。
github的限制是每人最多20个免费的工作流程。(相当于也是20个轻量服务器)
如果只是上上github这种网页,不用glados上外网,用网易云加速器的学术资源加速也能加快不少。
我租的服务器是腾讯云上面的,本来期待能github 上action 能免费帮忙签到的,ip竟然被封了,不过其他网页的ip应该没封。下面是爬虫签到glados的代码,在windows上能用。
def start(cookie,who): # 创建一个session,作用会自动保存cookie session = requests.session() #点签到之后的页 url= "https://glados.rocks/api/user/checkin" url2= "https://glados.rocks/api/user/status" referer = 'https://glados.rocks/console/checkin' #checkin = requests.post(url,headers={'cookie': cookie ,'referer': referer }) #state = requests.get(url2,headers={'cookie': cookie ,'referer': referer}) origin = "https://glados.rocks" useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36" #请求负载 payload={ # 'token': 'glados_network' 'token': 'glados.network' } #referer 当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器 籍此可以获得一些信息用于处理。 #json.dumps请求序列化 checkin = session.post(url,headers={'cookie': cookie ,'referer': referer,'origin':origin,'user-agent':useragent,'content-type':'application/json;charset=UTF-8'},data=json.dumps(payload)) state = session.get(url2,headers={'cookie': cookie ,'referer': referer,'origin':origin,'user-agent':useragent}) # print(res) print(checkin.text ) while(1): try: if 'message' in checkin.text: mess = checkin.json()['message'] time = state.json()['data']['leftDays'] time = time.split('.')[0] print(time) text = mess +',you have '+time+' days left' if "@qq.com" in who: qqemail("GLaDOS签到", who, text) else:#因为两个who 不一样 dingding(who, text) break except Exception as e: print(e)
不过,最后还是知道了定时说晚安的方式,还能逗逗女友。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。