1.购买服务器阿里云:服务器购买地址https://t.aliyun.com/U/Bg6shY若失效,可用地址
阿里云:
服务器购买地址
https://t.aliyun.com/U/Bg6shY若失效,可用地址
https://www.aliyun.com/daily-act/ecs/activity_selection?source=5176.29345612&userCode=49hts92d腾讯云:
https://curl.qcloud.com/wJpWmSfU若失效,可用地址
https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console华为云
https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=2019052.部署教程
3.代码如下
import aiotieba as tbimport asyncioimport timeimport osimport sysBDUSS = os.getenv("BDUSS")if not BDUSS:print("未设置环境变量 BDUSS , 程序退出")sys.exit()BDUSS_SPLIT=BDUSS.split("#")user_count=1print(f"用户数量: {len(BDUSS_SPLIT)}")async def main(BDUSS):async with tb.Client(BDUSS=BDUSS) as client:user = await client.get_self_info()print(f"用户名: {user.user_name}")print(f"id:{user.user_id}")print(f"uid: {user.tieba_uid}")print(f"吧龄: {user.age} 年")print(f"昵称: {user.nick_name_new}")print(f"portrait: {user.portrait}")print("\n")print("获取关注贴吧列表并签到...")print("\n")followed_forums_pages=1followed_forums_count=0sign_in_success_count=0sign_in_already_count=0sign_in_failed_count=0while True:followed_forums=await client.get_follow_forums(user.user_id,pn=followed_forums_pages)for x in followed_forums.objs:print(f"{x.fname} ({x.fid})",end=" ")sign_in_result=await client.sign_forum(x.fname)if not sign_in_result.err:sign_in_success_count+=1print(f"签到成功")elif sign_in_result.err.args[0]==160002:sign_in_already_count+=1print(f"已签到")else:sign_in_failed_count+=1print(f"签到失败,错误:{sign_in_result.err}")print("")followed_forums_count+=1time.sleep(5)followed_forums_pages+=1if not followed_forums.has_more:breakprint(f"总关注贴吧数: {followed_forums_count} 个")print(f"已签到: {sign_in_already_count} 个")print(f"签到成功: {sign_in_success_count} 个")print(f"签到失败: {sign_in_failed_count} 个")if followed_forums_count > 0:print(f"签到率: {(sign_in_success_count+sign_in_already_count)*100/followed_forums_count}%")else:print("签到率: 无(未关注任何贴吧)")for i in BDUSS_SPLIT:print(f"\n\n\n使用第 {user_count} 个 BDUSS 进行签到...")print(f"获取第 {user_count} 个用户信息...")asyncio.run(main(i))if user_count<len(BDUSS_SPLIT) and user_count>1:print(f"第 {user_count} 个用户签到完成,等待 60 秒...")time.sleep(60)print("\n\n\n")user_count+=1print("所有用户签到完成")
这是一个 百度贴吧批量账号一键签到脚本,基于 aiotieba 异步库实现:
从环境变量读取
BDUSS(支持用#分隔多个账号)对每个 BDUSS:
获取当前账号信息并打印(用户名、uid、吧龄等)
分页拉取"关注的贴吧列表"
逐个贴吧执行签到
统计:总关注数 / 签到成功 / 已签到 / 失败 / 签到率
多账号之间可按逻辑延时(避免太频繁)
主要方法
1) 环境变量与多账号拆分
BDUSS = os.getenv("BDUSS"):从环境变量拿登录凭证BDUSS.split("#"):用#支持多账号(一个 BDUSS 代表一个贴吧账号)没有
BDUSS就直接退出,避免后面请求全部失败。
2) async def main(BDUSS)
这是 单个账号的完整签到流程,核心工作都在这里。
(1) async with tb.Client(BDUSS=BDUSS) as client
创建贴吧客户端会话,携带 BDUSS
async with会在结束时自动关闭会话(释放连接)。
(2) user = await client.get_self_info()
获取当前 BDUSS 对应账号的个人信息
用于确认 BDUSS 是否有效,以及打印账号信息(user_name、user_id、tieba_uid、吧龄等)。
(3) 分页获取关注贴吧:client.get_follow_forums(user.user_id, pn=...)
followed_forums_pages:当前页码(从 1 开始)返回对象里:
objs:本页的贴吧列表has_more:是否还有下一页(用来停止 while True)
(4) 对每个贴吧执行签到:await client.sign_forum(x.fname)
逐吧签到,并根据返回结果统计:
not sign_in_result.err:认为签到成功err.args[0] == 160002:认为"已签到"(这是贴吧常见的业务码)否则:签到失败,打印错误信息
注意:这里用
time.sleep(5)是同步阻塞睡眠,虽然在 async 函数里能跑,但会阻塞事件循环(更推荐改成await asyncio.sleep(5))。
(5) 输出统计信息
followed_forums_count:关注贴吧总数sign_in_success_count / sign_in_already_count / sign_in_failed_count签到率 =
(成功 + 已签到) / 总数 * 100%
3) 外层循环:对每个 BDUSS 逐个执行
asyncio.run(main(i)):每个账号单独跑一次事件循环完成签到账号之间有延迟逻辑(不过你这里的条件
user_count<len(...) and user_count>1会导致第 1 个账号不会等、第 2 个开始才可能等;而且user_count>1可能不是你想要的)。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论