你是否也因为拥有电信手机的福利,而获得了10T的天翼云盘空间,但又不想每天都登录签到?别担心,我为你提供了一个自动签到脚本的解决方案,让你告别烦人的手动操作。
感谢热心观众:felix发现的错误。
为了方便大家使用,特此放上脚本的下载链接:
问题的开始
想象一下,每天早上醒来,你需要打开手机,登录天翼云盘,找到签到入口,然后点击签到按钮。虽然这个过程看似简单,但如果你想要长期坚持每天签到,它可能会变得相当烦琐。而且,有时候你可能会因为忙碌或忘记而错过签到,错失了获得奖励的机会。
这就是这个自动签到脚本诞生的原因。它可以轻松地代替你完成签到任务,让你享受到天翼云盘的优惠,同时又省去了不必要的手动操作。
项目介绍
这个项目是一个简单但非常实用的Python脚本,它可以自动登录你的天翼云盘账户,找到签到入口,并点击签到按钮,完成每日签到任务。它的使用方法也非常简单,只需将脚本上传到你的服务器上,然后设置一个定时任务即可。一旦配置完成,你就可以忘记签到的烦恼,脚本会每天按时为你签到。
项目优势
这个自动签到脚本具有以下几个显著的优势:
1. 自动化操作
脚本完全自动化,不需要手动干预。你只需设置一次,就可以忘记签到的烦恼,每天都能获得奖励。
2. 节省时间
手动签到可能会花费你宝贵的时间,而脚本只需要几秒钟就能完成任务,让你有更多时间用于其他事情。
3. 避免错过签到
由于自动定时任务的存在,你再也不会因为忘记签到而错失奖励,始终能够及时签到。
4. 开放源代码
这个脚本的源代码是开放的,你可以根据自己的需求进行修改和定制,以满足特定的需求。
使用方法
要使用这个自动签到脚本,只需按照以下简单的步骤操作:
- 将脚本上传到你的服务器上。
- 在服务器上创建一个定时任务,设置脚本每天自动执行的时间。
- 启动定时任务,让脚本开始自动签到。
不需要任何复杂的配置或技术知识,即可轻松享受自动签到的便利。
代码部分
如果你也想告别繁琐的手动签到,省下更多的时间用于更重要的事情,那就赶紧尝试这个自动签到脚本吧!复制粘贴下面的代码,然后挂起来吧。
import time
import re
import json
import base64
import hashlib
import urllib.parse
import hmac
import rsa
import requests
import random
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
BI_RM = list("0123456789abcdefghijklmnopqrstuvwxyz")
B64MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
s = requests.Session()
# 在下面两行的引号内贴上账号(仅支持手机号)和密码
username = "手机号"
password = "密码"
# 用于发送通知的邮箱配置
email_config = {
"smtp_server": "修改成你的邮箱信息", # SMTP服务器地址
"smtp_port": 587, # SMTP服务器端口号
"email_address": "修改成你的邮箱信息", # 发件人邮箱地址
"email_password": "修改成你的邮箱信息", # 发件人邮箱密码
"recipient_email": "修改成你的邮箱信息", # 收件人邮箱地址
}
if not email_config["email_address"] or not email_config["email_password"]:
print("发件人邮箱地址或密码为空,无法发送邮件通知")
exit()
def int2char(a):
return BI_RM[a]
def b64tohex(a):
d = ""
e = 0
c = 0
for i in range(len(a)):
if list(a)[i] != "=":
v = B64MAP.index(list(a)[i])
if e == 0:
e = 1
d += int2char(v >> 2)
c = 3 & v
elif e == 1:
e = 2
d += int2char(c << 2 | v >> 4)
c = 15 & v
elif e == 2:
e = 3
d += int2char(c)
d += int2char(v >> 2)
c = 3 & v
else:
e = 0
d += int2char(c << 2 | v >> 4)
d += int2char(15 & v)
if e == 1:
d += int2char(c << 2)
return d
def rsa_encode(j_rsakey, string):
rsa_key = f"-----BEGIN PUBLIC KEY-----\n{j_rsakey}\n-----END PUBLIC KEY-----"
pubkey = rsa.PublicKey.load_pkcs1_openssl_pem(rsa_key.encode())
result = b64tohex((base64.b64encode(rsa.encrypt(f'{string}'.encode(), pubkey))).decode())
return result
def calculate_md5_sign(params):
return hashlib.md5('&'.join(sorted(params.split('&'))).encode('utf-8')).hexdigest()
def login(username, password):
url = ""
urlToken = "https://m.cloud.189.cn/udb/udb_login.jsp?pageId=1&pageKey=default&clientType=wap&redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html"
s = requests.Session()
r = s.get(urlToken)
pattern = r"https?://[^\s'\"]+"
match = re.search(pattern, r.text)
if match:
url = match.group()
else:
print("没有找到url")
r = s.get(url)
pattern = r"<a id=\"j-tab-login-link\"[^>]*href=\"([^\"]+)\""
match = re.search(pattern, r.text)
if match:
href = match.group(1)
else:
print("没有找到href链接")
r = s.get(href)
captchaToken = re.findall(r"captchaToken' value='(.+?)'", r.text)[0]
lt = re.findall(r'lt = "(.+?)"', r.text)[0]
returnUrl = re.findall(r"returnUrl= '(.+?)'", r.text)[0]
paramId = re.findall(r'paramId = "(.+?)"', r.text)[0]
j_rsakey = re.findall(r'j_rsaKey" value="(\S+)"', r.text, re.M)[0]
s.headers.update({"lt": lt})
username = rsa_encode(j_rsakey, username)
password = rsa_encode(j_rsakey, password)
url = "https://open.e.189.cn/api/logbox/oauth2/loginSubmit.do"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/76.0',
'Referer': 'https://open.e.189.cn/',
}
data = {
"appKey": "cloud",
"accountType": '01',
"userName": f"{{RSA}}{username}",
"password": f"{{RSA}}{password}",
"validateCode": "",
"captchaToken": captchaToken,
"returnUrl": returnUrl,
"mailSuffix": "@189.cn",
"paramId": paramId
}
r = s.post(url, data=data, headers=headers, timeout=5)
if (r.json()['result'] == 0):
print(r.json()['msg'])
else:
print(r.json()['msg'])
redirect_url = r.json()['toUrl']
r = s.get(redirect_url)
return s
def sign_in(s):
rand = str(round(time.time() * 1000))
surl = f'https://api.cloud.189.cn/mkt/userSign.action?rand={rand}&clientType=TELEANDROID&version=8.6.3&model=SM-G930K'
url = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN&activityId=ACT_SIGNIN'
url2 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN_PHOTOS&activityId=ACT_SIGNIN'
url3 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_2022_FLDFS_KJ&activityId=ACT_SIGNIN'
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6',
"Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1",
"Host": "m.cloud.189.cn",
"Accept-Encoding": "gzip, deflate",
}
response = s.get(surl, headers=headers)
netdiskBonus = response.json()['netdiskBonus']
if (response.json()['isSign'] == "false"):
print(f"未签到,签到获得{netdiskBonus}M空间")
res1 = f"未签到,签到获得{netdiskBonus}M空间"
else:
print(f"已经签到过了,签到获得{netdiskBonus}M空间")
res1 = f"已经签到过了,签到获得{netdiskBonus}M空间"
def draw_prize(url, description_prefix):
response = s.get(url, headers=headers)
if ("errorCode" in response.text):
print(response.text)
return ""
else:
description = response.json()['description']
print(f"{description_prefix}{description}")
return f"{description_prefix}{description}"
res2 = draw_prize(url, "抽奖获得")
res3 = draw_prize(url2, "抽奖获得")
res4 = draw_prize(url3, "链接3抽奖获得")
return res1, res2, res3, res4
def send_email_notification(res1, res2, res3, res4):
msg = MIMEMultipart()
msg["From"] = email_config["email_address"]
msg["To"] = email_config["recipient_email"]
msg["Subject"] = "签到通知"
body = f"签到结果:\n{res1}\n{res2}{res3}{res4}"
msg.attach(MIMEText(body, "plain"))
try:
server = smtplib.SMTP(email_config["smtp_server"], email_config["smtp_port"])
server.starttls()
server.login(email_config["email_address"], email_config["email_password"])
server.sendmail(email_config["email_address"], email_config["recipient_email"], msg.as_string())
server.quit()
print("邮件通知已发送")
except Exception as e:
print(f"邮件通知发送失败:{str(e)}")
def main():
s = login(username, password)
res1, res2, res3, res4 = sign_in(s)
send_email_notification(res1, res2, res3, res4)
def lambda_handler(event, context):
main()
def main_handler(event, context):
main()
def handler(event, context):
main()
if __name__ == "__main__":
main()
让自动化精神帮助你解放双手,享受更多的天翼云盘福利吧!
评论列表(19条)
出错,
Traceback (most recent call last):
File “/root/ty.py”, line 8, in
import rsa
ModuleNotFoundError: No module named ‘rsa’
注释掉第8行,也是出一堆错误
@asdf:No module named ‘rsa’
安装一下
pip install rsa
@asdf:我看你的脚本目录是/root/ty.py
如果用root用户运行,要用root用户pip install
@王大神:安装了模块,还是出错。
root@OpenWrt:~# python ty.py
Traceback (most recent call last):
File “/root/ty.py”, line 204, in
main()
File “/root/ty.py”, line 190, in main
s = login(username, password)
File “/root/ty.py”, line 99, in login
captchaToken = re.findall(r”captchaToken’ value='(.+?)'”, r.text)[0]
IndexError: list index out of range
@asdf:captchaTokens = re.findall(r”captchaToken’ value='(.+?)'”, r.text)
if captchaTokens:
captchaToken = captchaTokens[0]
else:
print(“未找到captchaToken字段”😉
# 可以添加适当的处理代码
@王大神:我也遇到同样错误,captchaToken、lt这些都没获取到,后续接口请求应该走不通了吧。
我把r.text答应出来是乱码。
大佬你那边是能跑的吗
@felix:我自己测试了,没什么问题,你的python版本,运行环境是linux还是windows?
@王大神:我Linux和Windows都试了,一样的报错。windows python 版本3.12,Linux python版本3.10
@王大神:是不是最近云盘的系统更新了?你现在还能运行吗?
@felix:正常运行。刚还自动签到了。
@王大神:找到原因了:这行代码pattern = r”]*href=\”([^\”]+)\”” ,匹配到的链接是一个图片,所以输出乱码。
应该换成pattern =r”]*href=\”([^\”]+)\””才能匹配到目标url
@王大神:改成这个pattern =r”]*href=\”([^\”]+)\””
@王大神:pattern =r”]*href=\”([^\”]+)\””
@王大神:pattern =r”
]
*href=\”([^\”]+)\””
这网页啥原因,写成一行会被吞掉部分字符串,我怀疑你的代码里就是这段字符串被吞了,所以我们运行的时候有问题。。。
@felix:是的,markdown格式化之后被吃掉了。
@felix:以后代码放到网盘里。
@felix:感谢指正
@王大神:pattern =r”《a id=\”j-tab-login-link\”[^》]*href=\”([^\”]+)\””
中文尖括号替换成英文的
@felix:代码高亮的问题。换了很多插件都这样显示。回头改代码了。