一切源于懒
参照社区大佬 殇璃雪 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以上版本