1.购买服务器阿里云:服务器购买地址https://t.aliyun.com/U/Bg6shY若失效,可用地址
阿里云:
服务器购买地址
https://t.aliyun.com/U/Bg6shY若失效,可用地址
https://www.aliyun.com/daily-act/ecs/activity_selection?source=5176.29345612&userCode=49hts92d腾讯云:
https://curl.qcloud.com/wJpWmSfU若失效,可用地址
https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console华为云
https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=2019052.部署教程
3.代码如下
# cron: 15 8 * * *import requestsimport re,os,sys,json,timefrom notify import senddef pr(message):msg.append(message + "\n")print(message)msg = []def logn(zhanghao,mima):url = "https://www.kejiwanjia.net/wp-json/jwt-auth/v1/token"header = {"authority": "www.kejiwanjia.net","method": "POST","path": "/wp-json/jwt-auth/v1/token","scheme": "https","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36","origin": "https://www.kejiwanjia.net","referer": "https://www.kejiwanjia.net/",}data = {"nickname": "","username": zhanghao,"password": mima,"code": "","img_code": "","invitation_code": "","token": "","smsToken": "","luoToken": "","confirmPassword": "","loginType": ""}try:response = requests.post(url=url,headers=header,data=data)response.encoding = "utf-8"info = json.loads(response.text)return info['token']except Exception as e:pr(e)def getUserInfo(authorization):#我的信息url = "https://www.kejiwanjia.net/wp-json/b2/v1/getUserInfo"header = {"authority": "www.kejiwanjia.net","method": "POST","path": "/wp-json/b2/v1/getUserInfo","scheme": "https","authorization": f"Bearer {authorization}","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36","origin": "https://www.kejiwanjia.net","referer": "https://www.kejiwanjia.net/",}try:response = requests.post(url=url,headers=header)response.encoding = "utf-8"info = json.loads(response.text)pr(f"用户名: {info['user_data']['name']}")time.sleep(3)getUserMission(authorization)time.sleep(5)userMission(authorization)except Exception as e:pr(e)def getGoldList(authorization):#积分查询url = "https://www.kejiwanjia.net/wp-json/b2/v1/getGoldList"header = {"authority": "www.kejiwanjia.net","method": "POST","path": "/wp-json/b2/v1/getGoldList","scheme": "https","authorization": f"Bearer {authorization}","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36","origin": "https://www.kejiwanjia.net","referer": "https://www.kejiwanjia.net/",}try:response = requests.post(url=url,headers=header)response.encoding = "utf-8"info = json.loads(response.text)pr(f"最近一次签到:{info['data'][0]['date']},获得积分;{info['data'][0]['no']},总积分:{info['data'][0]['total']}")except Exception as e:pr(e)def getUserMission(authorization):#更新签到url = "https://www.kejiwanjia.net/wp-json/b2/v1/getUserMission"header = {"authority": "www.kejiwanjia.net","method": "POST","path": "/wp-json/b2/v1/getUserMission","scheme": "https","authorization": f"Bearer {authorization}","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36","origin": "https://www.kejiwanjia.net","referer": "https://www.kejiwanjia.net/",}try:response = requests.post(url=url,headers=header)s1 = response.status_codeif 200 ==s1:pr("正在初始签到,请稍等。")except Exception as e:pr(e)def userMission(authorization): #签到url = "https://www.kejiwanjia.net/wp-json/b2/v1/userMission"header = {"authority": "www.kejiwanjia.net","method": "POST","path": "/wp-json/b2/v1/userMission","scheme": "https","authorization": f"Bearer {authorization}","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36","origin": "https://www.kejiwanjia.net","referer": "https://www.kejiwanjia.net/",}try:response = requests.post(url=url,headers=header)response.encoding = "utf-8"info = json.loads(response.text)if "message" in info :pr("你的authorization可能过期了,请检查。")elif "credit" in info:pr(f"恭喜您,签到获得,{info['credit']}积分")time.sleep(5)getGoldList(authorization)else:pr("请勿重复签到")time.sleep(5)getGoldList(authorization)#pr(f"最近一次签到:{info['data'][0]['date']},获得积分;{info['data'][0]['no']},总积分:{info['data'][0]['total']}")except Exception as e:pr(e)def sicxs():config_path = 'config.py'if os.path.exists(config_path):import configelse:with open(config_path, 'w') as f:pr("首次运行,已创建配置文件 config.py,请按照说明填写相关变量后再次运行脚本。")f.write('#可以在此文件中添加配置变量,例如:\nsfsy = ""\n')try:env_cookie = os.environ.get("wy_kjwj")si_cookie = getattr(config, 'wy_kjwj', '')if env_cookie and si_cookie:cookies = env_cookie + "\n" + si_cookieelif env_cookie:cookies = env_cookieelif si_cookie:cookies = si_cookieelse:pr("请设置变量 export wy_kjwj='' 或在 config.py 中设置 wy_kjwj =")sys.exit()except Exception as e:pr("请设置变量 export wy_kjwj='' 或在 config.py 中设置 wy_kjwj =")sys.exit()list_cookie = [c for c in re.split(r'\n|&', cookies) if c.strip()]total_cookies = len(list_cookie)for i, list_cookie_i in enumerate(list_cookie):try:print(f'\n----------- 账号【{i + 1}/{total_cookies}】执行 -----------')pr(f"账号【{i + 1}】开始执行:")list = list_cookie_i.split("#")authorization = logn(list[0], list[1])getUserInfo(authorization)except Exception as e:print(f"账号【{i + 1}/{total_cookies}】执行出错{e}")finally:send("科技玩家", ''.join(msg))msg.clear()print(f'\n----------- 执 行 结 束 -----------')if __name__ == '__main__':sicxs()
该脚本为科技玩家自动签到脚本
主要作用
科技玩家自动签到脚本:用账号与密码调用站点的 JWT 登录接口 获取
Bearer token,随后完成"初始化任务 → 签到 → 查询积分流水"的一次闭环,并将结果通过notify.send("科技玩家", …)推送。多账号执行:从环境变量或
config.py中读取wy_kjwj(多账号以换行或&分割;每个账号格式为账号#密码),逐一登录并签到,每个账号执行完单独通知一次。定时运行:适用于
cron,示例注释为15 8 * * *(每日 08:15)。
主要方法
pr(message):统一日志累积到全局msg,便于单账号结束后一次性推送;多账号循环中会清空重用。logn(zhanghao, mima):调用wp-json/jwt-auth/v1/token登录,返回 JWT token(authorization)。失败会抛异常或返回非预期,后续应校验。getUserInfo(authorization):用Bearer token获取用户基础信息(如昵称),确认 token 可用;随后串行触发getUserMission(刷新任务状态)与userMission(执行签到)。getUserMission(authorization):初始化/刷新每日任务,相当于为后续签到"预热";接口 200 视为就绪。userMission(authorization):真正的签到动作。若返回包含credit,表示成功并给出本次获得的积分;若提示message多为 token 失效;若"请勿重复签到",则说明当天已签。getGoldList(authorization):查询积分流水,输出最近一次签到日期、当次获得积分、当前总积分等,作为结果校验。sicxs():配置读取与多账号调度。整合环境变量与config.py,切分账号后循环执行:登录 → 用户信息/预热 → 签到 → 流水 → 通知;最后打印"执行结束"。
稳定性
失败兜底:
logn可能返回空/异常时,应在拿到 token 后显式判空并中止该账号流程;给所有请求加
timeout与有限重试(如 3 次指数退避),并在except中输出可读错误原因。防风控:多账号时建议在关键请求之间加入 随机抖动(例如 1–3 秒),避免同 IP 高频访问触发限制。
数据健壮:解析前先判断响应是否为 JSON、是否包含预期字段(
credit、data等),避免 KeyError。安全:
仅从 环境变量传入账号密码,日志中勿打印明文凭据或 token;
若脚本运行环境共享,建议把
config.py放置到权限受控目录或干脆只走环境变量。幂等性与可观测:签到成功或已签两种分支都调用
getGoldList做最终态核验是对的;可以再输出"今日统计是否变化"做二次确认。并发与串行:站点常带限流/风控,建议保持串行(当前做法合理)。如需提速,可按站点限制设置小规模并发并保证抖动。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论