一切源于懒
参照社区大佬 殇璃雪 hwayla 498382583 的帖子自己乱写了一个。
社区三个大佬的教程都是手动cookie,我比较懒,就想啥也不干,像登录那样输入账密登录就完了
能用
但是
没测试完,月末不知道能不能领取,看天意吧
测试完了,可以领取
脚本能做到哪些?
1.登录并获取 Cookie:使用提供的用户名和密码登录网站,并获取登录后的 Cookie 以进行后续的请求
2.签到:发送签到请求,用户每天都能进行签到。
3.领取累计签到奖励:在月末时,发送请求以领取额外的签到奖励。
4.领取每日登录和签到奖励:领取每日登录奖励和每日签到奖励。
5.检查签到状态:定期(10小时)检查是否已经签到,如果未签到,则重新执行签到流程。
6.Cookie 检查与更新:定期(12小时)检查 Cookie 是否过期,如果过期,则重新登录并获取新的 Cookie。
脚本启动时会立即执行一次签到检查。
进入无限循环,持续执行定时任务。
环境依赖
编程语言:python
依赖库:requests、schedule
代码
import requests
from datetime import datetime, timedelta
import schedule
import time
import sys
import json
# 禁用输出缓冲
sys.stdout.reconfigure(line_buffering=True)
# 全局变量和配置
login_url = "https://sns.oddba.cn/wp-content/themes/LightSNS/module/action/login.php"
login_data = {
'username': 'XXX', # XXX内输入账号
'password': 'XXX' # XXX内输入密码
}
sign_url = "https://sns.oddba.cn/wp-content/themes/LightSNS/module/action/sign.php"
sign_data = {'sign': '1', 'ticket': '', 'randstr': ''}
signtreasure_url = "https://sns.oddba.cn/wp-content/themes/LightSNS/module/action/sign-treasure.php"
signtreasure_data = [{'number': '0'}, {'number': '1'}, {'number': '2'}, {'number': '3'}]
task_url = "https://sns.oddba.cn/wp-content/themes/LightSNS/module/action/task.php"
daily_login_data = {'task_id': 'dlrw1', 'type': 'day'}
daily_sign_data = {'task_id': 'mrqd1', 'type': 'day'}
# 请求标头
headers = {
'accept': 'application/json, text/javascript, */*; q=0.01',
'accept-encoding': 'gzip, deflate, br, zstd',
'accept-language': 'zh-CN,zh;q=0.9,en-MY;q=0.8,en;q=0.7',
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'origin': 'https://sns.oddba.cn',
'referer': 'https://sns.oddba.cn/',
'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
'x-requested-with': 'XMLHttpRequest'
}
# 初始化cookie变量
cookies = None
def get_current_time():
"""获取当前本地时间"""
return datetime.now()
def process_json_response(response):
"""处理 JSON 响应,移除 BOM"""
content = response.content
if content.startswith(b'\xef\xbb\xbf'):
content = content[3:]
if content:
return json.loads(content.decode('utf-8'))
else:
print(f"{get_current_time()}:警告: 响应内容为空")
return None
def login_and_get_cookies():
"""登录并获取cookie"""
try:
session = requests.Session()
response = session.post(login_url, data=login_data, headers=headers)
json_response = process_json_response(response)
if response.status_code == 200 and json_response and json_response.get("code") == 1:
print(f"{get_current_time()}:登录成功并获取了cookie")
return session.cookies.get_dict()
else:
print(f"{get_current_time()}:登录失败,返回的响应:", json_response)
return None
except Exception as e:
print(f"{get_current_time()}:登录异常:", e)
return None
def send_post_request(headers=headers, cookies=None):
"""发送签到请求"""
try:
response = requests.post(sign_url, data=sign_data, headers=headers, cookies=cookies)
json_response = process_json_response(response)
if json_response and json_response.get("code") == 1:
print(f"{get_current_time()}:签到成功")
else:
print(f"{get_current_time()}:签到失败: {json_response.get('msg', '未知错误')}")
except Exception as e:
print(f"{get_current_time()}:发送签到请求异常:", e)
def additional_post_request(headers=headers, cookies=None):
"""发送签到奖励请求"""
for extra in signtreasure_data:
try:
response = requests.post(url2, data=extra, headers=headers, cookies=cookies)
json_response = process_json_response(response)
if json_response and json_response.get("code") == 1:
print(f"{get_current_time()}:领取成功")
else:
print(f"{get_current_time()}:领取失败: {json_response.get('msg', '未知错误')}")
except Exception as e:
print(f"{get_current_time()}:发送签到奖励请求异常:", e)
def jinsom_task_finish(task_id, task_type, headers=headers, cookies=None):
"""领取每日登录和每日签到奖励"""
try:
response = requests.post(task_url, data={'task_id': task_id, 'type': task_type}, headers=headers, cookies=cookies)
json_response = process_json_response(response)
if json_response and json_response.get("code") == 1:
print(f"{get_current_time()}:任务 {task_id} 领取成功")
else:
print(f"{get_current_time()}:任务 {task_id} 领取失败: {json_response.get('msg', '未知错误')}")
except Exception as e:
print(f"{get_current_time()}:领取任务 {task_id} 请求异常:", e)
def claim_daily_rewards(headers=headers, cookies=None):
"""领取每日登录和签到奖励"""
time.sleep(120) # 延时120秒
jinsom_task_finish('dlrw1', 'day', headers=headers, cookies=cookies)
time.sleep(1) # 延时1秒
jinsom_task_finish('mrqd1', 'day', headers=headers, cookies=cookies)
def check_if_signed(headers=headers, cookies=None):
"""检查是否已签到"""
try:
response = requests.get(sign_url, headers=headers, cookies=cookies)
json_response = process_json_response(response)
if response.status_code == 403 or "登录" in json_response:
print(f"{get_current_time()}:Cookie已过期或未签到,重新登录并签到...")
return False
if json_response and json_response.get("code") == 1:
print(f"{get_current_time()}:已签到")
return True
else:
print(f"{get_current_time()}:未签到")
return False
except Exception as e:
print(f"{get_current_time()}:检查签到状态异常:", e)
return False
def process_post_request():
"""处理签到请求"""
print(f"{get_current_time()}:开始处理请求...")
global cookies
if cookies is None:
cookies = login_and_get_cookies()
if cookies:
if not check_if_signed(headers=headers, cookies=cookies):
send_post_request(headers=headers, cookies=cookies)
if is_last_day_of_month():
additional_post_request(headers=headers, cookies=cookies)
claim_daily_rewards(headers=headers, cookies=cookies)
print(f"{get_current_time()}:请求处理完成")
def is_last_day_of_month(year=None, month=None):
"""判断是否是月末"""
now = get_current_time()
year = year or now.year
month = month or now.month
next_month_first_day = (datetime(year, month % 12 + 1, 1) if month < 12 else datetime(year + 1, 1, 1))
return now.date() == (next_month_first_day - timedelta(days=1)).date()
def check_and_update_cookies():
"""检测并更新cookie"""
global cookies
print(f"{get_current_time()}:开始检测cookie是否过期...")
response = requests.get(sign_url, headers=headers, cookies=cookies)
json_response = process_json_response(response)
if response.status_code == 403 or "登录" in json_response:
print(f"{get_current_time()}:Cookie已过期,重新登录获取新cookie...")
cookies = login_and_get_cookies()
else:
print(f"{get_current_time()}:Cookie有效")
def hourly_check():
print(f"{get_current_time()}:检测签到状态...")
global cookies
if cookies is None:
cookies = login_and_get_cookies()
if cookies:
if not check_if_signed(headers=headers, cookies=cookies):
send_post_request(headers=headers, cookies=cookies)
claim_daily_rewards(headers=headers, cookies=cookies)
print(f"{get_current_time()}:签到状态检测完成")
# 定时任务
schedule.every().day.at("00:00").do(process_post_request) #每天0点进行签到
schedule.every(12).hours.do(check_and_update_cookies) #每12小时检测cookie状态
schedule.every(10).hours.do(hourly_check) #每10小时检测签到状态
# 脚本启动时手动调用一次签到检查
print(f"{get_current_time()}:脚本启动中...")
process_post_request()
# 无限循环,执行定时任务
while True:
schedule.run_pending()
time.sleep(1)
写的不好不要喷谢谢,因为我完全没学过






啊?
虽然看不懂,但是很牛
代码执行环境需要有python3以上版本