如何使用:
- 手动安装 requests 和 dotenv 库
- 在脚本路径下创建名为
.env的文件 - 在贴吧 web 端抓取你的 BDUSS 并保持到 .env 文件里,格式如下(记得带分号):
BDUSS='V-TICJXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;'
- 用 crontab 或者其他定时任务管理器运行脚本即可
额外说明:百度的 Cookie 有效期很长,而且贴吧的签到风控很弱,我在 1o 小鸡上跑了2年一切正常
下面是脚本内容:
import requests
import time
import random
import hashlib
import os
import dotenv
from functools import wraps
dotenv.load_dotenv()
def retry(max_retries=3, delay=2):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
for attempt in range(max_retries):
try:
return func(*args, **kwargs)
except requests.RequestException as e:
if attempt == max_retries - 1:
print(f"[-] {kwargs.get('forum_name', '未知贴吧')} 网络请求失败: {e}")
return False
wait_time = delay + random.uniform(0, 1)
print(f"[-] 网络错误 ({e}),{wait_time:.1f}秒后重试 ({attempt + 1}/{max_retries})...")
time.sleep(wait_time)
return False
return wrapper
return decorator
class TiebaSigner:
def __init__(self, bduss):
self.session = requests.Session()
self.session.cookies.update({'BDUSS': bduss})
self.headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
'Referer': 'https://tieba.baidu.com/',
'Connection': 'keep-alive'
}
self.tbs = None
def _get_sign(self, data):
SIGN_KEY = "tiebaclient!!!"
s = "".join([f"{k}={data[k]}" for k in sorted(data.keys())])
return hashlib.md5((s + SIGN_KEY).encode('utf-8')).hexdigest().upper()
def init_tbs(self):
try:
url = "http://tieba.baidu.com/dc/common/tbs"
res = self.session.get(url, headers=self.headers, timeout=10).json()
if res.get('is_login') == 1:
self.tbs = res['tbs']
return True
else:
print("[-] 登录失败: BDUSS 可能已失效")
return False
except Exception as e:
print(f"[-] 初始化 TBS 失败: {e}")
return False
def get_forums(self):
print("[*] 正在获取关注列表...")
try:
url = 'https://tieba.baidu.com/mo/q/newmoindex'
res = self.session.get(url, headers=self.headers, timeout=10).json()
if res.get('error') != 'success':
print(f"[-] 获取列表失败: {res.get('error')}")
return []
all_forums = res['data']['like_forum']
todo_forums = [f['forum_name'] for f in all_forums if f['is_sign'] == 0]
print(f"[+] 关注总数: {len(all_forums)} | 待签到: {len(todo_forums)}")
return todo_forums
except Exception as e:
print(f"[-] 获取列表异常: {e}")
return []
@retry(max_retries=3, delay=3)
def sign_one(self, forum_name):
api_url = "https://c.tieba.baidu.com/c/c/forum/sign"
data = {
'kw': forum_name,
'tbs': self.tbs
}
data['sign'] = self._get_sign(data)
app_headers = {
'User-Agent': 'bdtb for Android 12.51.1.0',
'Content-Type': 'application/x-www-form-urlencoded',
'Host': 'c.tieba.baidu.com'
}
res = self.session.post(api_url, data=data, headers=app_headers, timeout=10).json()
if res.get('error_code') == '0':
user_info = res.get('user_info', {})
exp = user_info.get('sign_bonus_point')
print(f"[√] {forum_name:<10} 签到成功 (经验 +{exp})")
return True
else:
err_msg = res.get('error_msg', '未知错误')
print(f"[x] {forum_name:<10} 签到失败: {err_msg}")
return False
def run(self):
if not self.init_tbs():
return
tasks = self.get_forums()
if not tasks:
print("[=] 所有贴吧已签到。")
return
print("-" * 40)
success_count = 0
for i, forum in enumerate(tasks):
if self.sign_one(forum_name=forum):
success_count += 1
if i < len(tasks) - 1:
time.sleep(random.uniform(2, 4))
print("-" * 40)
print(f"[完成] 成功签到: {success_count}/{len(tasks)}")
if __name__ == '__main__':
bduss = os.environ.get("BDUSS")
if not bduss:
print("请设置 BDUSS 环境变量。")
else:
signer = TiebaSigner(bduss)
signer.run()
我就部署了一个Dcoker版本的
但现在没怎么刷贴吧了
华为云云函数23年跑到现在,cookie一直可用
根本不用这么麻烦,pip install tieba-sign,之后python -m tieba "RsNlNwbUpKdGtj....aFZxcHJMQVZzM3BE"就行
https://pypi.org/project/tieba-sign/
早不玩贴吧“了,来一个ns的
来个NS的吧。
用贴吧的都是神人了
想到我12年时候搞的自动签到,现在还有人玩贴吧
好久没有玩贴吧了,不过当时手机上有个软件,可以登录贴吧账号、一键自动签到,签到可以在后台运行,就是速度有点慢
今天20年贴吧号被永封,不玩啦