404ANG 发表于 2026-7-23 20:21:21

求一个壁纸网站签到脚本

求一个壁纸网站的签到脚本https://www.3gbizhi.com/

哈哈哈007 发表于 2026-7-28 09:04:00

不太会写js的浏览器脚本 但是会写py的 放青龙用还可以#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
=============================================================
3gbizhi.com 自动签到脚本(支持多账号)
=============================================================
用法:
   1. 安装依赖:pip install requests beautifulsoup4
   2. 设置账号密码(任选一种):
      a) 环境变量方式:
            Windows: set 3gbizhi=账号1#密码1&账号2#密码2
            Mac/Linux: export 3gbizhi="账号1#密码1&账号2#密码2"
      b) 直接修改本脚本最下方的 accounts 列表。
   3. 运行脚本:python 3gbizhi_sign.py
=============================================================
"""

import requests
from bs4 import BeautifulSoup
import os
import sys


def login_and_sign(username, password):
    """
    单个账号:登录 + 签到 + 查询签到详情
    参数:username (str) 用户名
          password (str) 密码
    返回:True 成功,False 失败
    """
    # 创建一个会话,自动管理 cookie
    session = requests.Session()
    # 设置通用的请求头,伪装成浏览器
    session.headers.update({
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:153.0) Gecko/20100101 Firefox/153.0",
      "Accept": "application/json, text/javascript, */*; q=0.01",
      "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.5",
      "Origin": "https://www.3gbizhi.com",
    })

    print(f"\n>> 开始处理账号:{username}")

    # ---------- 第1步:获取登录用的 __token__ ----------
    print("    正在获取登录令牌...")
    token = None
    try:
      # 尝试从登录页面或首页提取 __token__
      for url in ["https://www.3gbizhi.com/user/login.html", "https://www.3gbizhi.com/"]:
            try:
                resp = session.get(url, timeout=10)
                resp.encoding = "utf-8"# 避免乱码
                soup = BeautifulSoup(resp.text, "html.parser")
                # 先找表单隐藏域
                token_input = soup.find("input", {"name": "__token__"})
                if token_input and token_input.get("value"):
                  token = token_input["value"]
                  break
                # 再找 meta 标签
                meta_token = soup.find("meta", {"name": "__token__"})
                if meta_token and meta_token.get("content"):
                  token = meta_token["content"]
                  break
            except Exception:
                continue
    except Exception as e:
      print(f"    [错误] 网络请求失败:{e}")
      return False

    if not token:
      print("    [错误] 无法获取登录令牌,网站可能改版或网络不通。")
      return False
    print("    [成功] 登录令牌获取成功。")

    # ---------- 第2步:发送登录请求 ----------
    print("    正在登录...")
    login_url = "https://www.3gbizhi.com/api/user/login"
    login_data = {
      "__token__": token,
      "account": username,
      "password": password,
    }
    login_headers = {
      "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
      "Referer": "https://www.3gbizhi.com/user/login.html",
      "X-Requested-With": "XMLHttpRequest",
    }
    try:
      resp = session.post(login_url, data=login_data, headers=login_headers, timeout=10)
      result = resp.json()
    except Exception as e:
      print(f"    [错误] 登录请求失败:{e}")
      return False

    if result.get("code") != 1:
      print(f"    [失败] 登录失败:{result.get('msg', '未知错误')}")
      return False

    # 保存服务器返回的用户信息和 token
    userinfo = result["data"]["userinfo"]
    user_id = userinfo["user_id"]
    auth_token = userinfo["token"]
    nickname = userinfo.get("nickname", username)

    # 将认证信息写入 cookie(关键步骤)
    session.cookies.set("uid", str(user_id), domain="www.3gbizhi.com", path="/")
    session.cookies.set("token", auth_token, domain="www.3gbizhi.com", path="/")
    print(f"    [成功] 登录成功!昵称:{nickname}")

    # ---------- 第3步:签到 ----------
    print("    正在签到...")
    sign_url = "https://www.3gbizhi.com/api/user/setUserSignin"
    sign_headers = {
      "Referer": f"https://www.3gbizhi.com/user/{username}/sign.html",
      "X-Requested-With": "XMLHttpRequest",
    }
    try:
      resp = session.post(sign_url, headers=sign_headers, timeout=10)
      sign_result = resp.json()
    except Exception as e:
      print(f"    [错误] 签到请求失败:{e}")
      return False

    if sign_result.get("code") == 1:
      print(f"    [成功] {sign_result.get('msg')}")
      data = sign_result["data"]
      print(f"      - 本次获得积分:{data.get('points')}")
      print(f"      - 当前总积分:{data.get('current_score')}")
      print(f"      - 连续签到天数:{data.get('continuous_days')} 天")
    else:
      print(f"    [提示] 签到结果:{sign_result.get('msg', '可能今天已经签过了')}")
      # 即使返回非1,也不代表完全失败(可能是重复签到),继续查询详情

    # ---------- 第4步:查询签到详情 ----------
    print("    正在查询签到详情...")
    info_url = "https://www.3gbizhi.com/api/user/getUserSignin"
    info_headers = {
      "Referer": f"https://www.3gbizhi.com/user/{username}/sign.html",
    }
    try:
      resp = session.get(info_url, headers=info_headers, timeout=10)
      info = resp.json()
      if info.get("code") == 1:
            d = info["data"]
            print(f"      - 本周已签到:{d.get('week_signin_days')} 天")
            print(f"      - 本月已签到:{d.get('month_signin_days')} 天")
            print(f"      - 明日预计积分:{d.get('next_day_points')}")
      else:
            print("    [提示] 查询详情返回异常,但签到可能已成功。")
    except Exception as e:
      print(f"    [警告] 查询签到详情失败:{e}")

    return True


def parse_accounts_from_env(env_str):
    """
    解析环境变量中的账号字符串
    格式:user1#pass1&user2#pass2
    返回:[(user, pass), ...]
    """
    accounts = []
    if not env_str:
      return accounts
    for pair in env_str.split("&"):
      pair = pair.strip()
      if "#" in pair:
            user, pwd = pair.split("#", 1)
            accounts.append((user.strip(), pwd.strip()))
    return accounts


def main():
    # 打印欢迎信息
    print("=" * 60)
    print("         3gbizhi.com 自动签到脚本 v1.0")
    print("=" * 60)
    print("正在检查账号配置...\n")

    # 优先从环境变量读取(变量名:3gbizhi)
    env_str = os.environ.get("3gbizhi", "")
    accounts = []

    if env_str:
      print("[配置] 检测到环境变量 '3gbizhi',将使用环境变量中的账号。")
      accounts = parse_accounts_from_env(env_str)
      if not accounts:
            print("[错误] 环境变量格式不正确!")
            print("       正确格式:账号1#密码1&账号2#密码2")
            print("       例如:zhangsan#123456&lisi#abcdef")
            sys.exit(1)
    else:
      print("[配置] 未检测到环境变量,将使用脚本内硬编码的账号。")
      # ==============================================
      # !!!请在这里修改成你自己的账号密码!!!
      # ==============================================
      accounts = [
            ("你的账号1", "你的密码1"),   # 替换成真实的账号密码
            ("你的账号2", "你的密码2"),   # 不需要多个账号就删掉这一行
      ]
      # 检查是否还是默认的示例值
      if len(accounts) == 1 and accounts == "你的账号1":
            print("\n[重要提醒] 你还没有修改硬编码的账号密码!")
            print("请打开本脚本,找到 accounts 列表,把里面的 '你的账号1' '你的密码1' 改成真实的账号密码。")
            print("或者使用环境变量方式设置账号(更推荐),详细说明见脚本顶部注释。")
            sys.exit(1)

    # 开始逐个处理
    success_count = 0
    total = len(accounts)
    for i, (user, pwd) in enumerate(accounts, 1):
      print(f"\n{'='*30} 账号 {i}/{total} {'='*30}")
      try:
            if login_and_sign(user, pwd):
                success_count += 1
      except Exception as e:
            print(f"[严重错误] 处理账号 {user} 时发生未捕获异常:{e}")

    # 最终总结
    print("\n" + "=" * 60)
    print(f"处理完成!成功 {success_count} 个,失败 {total - success_count} 个。")
    print("=" * 60)


if __name__ == "__main__":
    main()

jackchou19 发表于 2026-7-28 16:58:40

你可以试试用tabbit,有个脚本妙招直接用ai生成的,还挺方便

kfcsiko 发表于 6 天前

https://scriptcat.org/zh-CN/script-show-page/7352
页: [1]
查看完整版本: 求一个壁纸网站签到脚本