• 注册
  • 新人报道 新人报道 关注:276 内容:3326

    自用自动签到python脚本

  • 查看作者
  • 打赏作者
  • 3
  • 新人报道
  • 渐入佳境
    2021
    该内容使用了刷新卡,原发布时间:2个月前

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

    写的不好不要喷谢谢,因为我完全没学过 [s-37] 

    圆转纯熟

    啊?


  • TTTTTTTT [s-5] 啊?
    拉黑 1个月前 电脑端回复
  • 回复
    初来乍到

    虽然看不懂,但是很牛

    回复

    请登录之后再进行评论

    登录
    新人报道
  • 今日 0
  • 内容 3326
  • 关注 276
  • 聊天
    关注 3

    【招募】GRIFFIN TKF项目开工 期待你的加入 || 你是否想加入格里芬书写自己与人形的故事

  • 签到
  • 任务
  • 发布
  • 模式切换
  • 偏好设置
  • 帖子间隔 侧栏位置: