求一个壁纸网站签到脚本
求一个壁纸网站的签到脚本https://www.3gbizhi.com/ 不太会写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() 你可以试试用tabbit,有个脚本妙招直接用ai生成的,还挺方便 https://scriptcat.org/zh-CN/script-show-page/7352
页:
[1]