Python贴吧签到脚本介绍
相较于本地版本,此脚本新添了延时功能以防签到过快,并将代码放置在main函数中以提供入口(不再显示执行错误)
更新说明
4.18 可设置验证码错误的最大尝试次数;server酱推送更加详细;补充了云函数收费的说明。
4.30 历史版本
5.16 随机休眠几秒
6.14 开始研究模拟客户端而非网页签到(遇到难以解决的“目录出错”问题,可能要咕很久)
Python脚本源码
# -*- coding: utf8 -*- from requests import Session from time import sleep def main(*args): # 数据 like_url = 'https://tieba.baidu.com/mo/q/newmoindex?' sign_url = 'http://tieba.baidu.com/sign/add' tbs = '4fb45fea4498360d1547435295' head = { 'Accept': 'text/html, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Connection': 'keep-alive', 'Cookie': 'BDUSS=你的BDUSS;STOKEN=你的STOKEN', 'Host': 'tieba.baidu.com', 'Referer': 'http://tieba.baidu.com/i/i/forum', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/71.0.3578.98 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest'} s = Session() # 获取关注的贴吧 bars = [] dic = s.get(like_url, headers=head).json()['data']['like_forum'] for bar_info in dic: bars.append(bar_info['forum_name']) # 签到 already_signed_code = 1101 success_code = 0 need_verify_code = 2150040 already_signed = 0 succees = 0 failed_bar = [] n = 0 retry_count = 0 max_retry = 5 # 因需要验证码而重试的最大次数 while n < len(bars): sleep(0.5) bar = bars[n] data = { 'ie': 'utf-8', 'kw': bar, 'tbs': tbs } try: r = s.post(sign_url, data=data, headers=head) except Exception as e: print(f'未能签到{bar}, 由于{e}。') failed_bar.append(bar) continue dic = r.json() msg = dic['no'] if msg == already_signed_code: already_signed += 1; r = '已经签到过了!' elif msg == need_verify_code and retry_count <max_retry: n -= 1; retry_count += 1; r = f'需要验证码,即将重试!({retry_count}/{max_retry})' elif msg == need_verify_code: r = '验证码错误,跳过!'; retry_count = 0 elif msg == success_code: r = f"签到成功!你是第{dic['data']['uinfo']['user_sign_rank']}个签到的吧友,共签到{dic['data']['uinfo']['total_sign_num']}天。" else: r = '未知错误!' + dic['error'] print(f"{bar}:{r}") succees += 1 n += 1 l = len(bars) failed = "n失败列表:"+'n'.join(failed_bar) if len(failed_bar) else '' message = f'''共{l}个吧,其中{succees}个吧签到成功,{len(failed_bar)}个吧签到失败,{already_signed}个吧已经签到。失败列表:{failed}''' print(message) s.get(f"https://sc.ftqq.com/你的码.send?text={message}")# [未测试]Server酱推送,不需要则删除此行 retry_count = 0 max_retry = 5 # 因需要验证码而重试的最大次数 while n < len(bars): sleep(0.5) bar = bars[n] data = { 'ie': 'utf-8', 'kw': bar, 'tbs': tbs } try: r = s.post(sign_url, data=data, headers=head) except Exception as e: print(f'未能签到{bar}, 由于{e}。') failed_bar.append(bar) continue dic = r.json() msg = dic['no'] if msg == already_signed_code: already_signed += 1; r = '已经签到过了!' elif msg == need_verify_code and retry_count <max_retry: n -= 1; retry_count += 1; r = f'需要验证码,即将重试!({retry_count}/{max_retry})' elif msg == need_verify_code: r = '验证码错误,跳过!'; retry_count = 0 elif msg == success_code: r = f"签到成功!你是第{dic['data']['uinfo']['user_sign_rank']}个签到的吧友,共签到{dic['data']['uinfo']['total_sign_num']}天。" else: r = '未知错误!' + dic['error'] print(f"{bar}:{r}") succees += 1 n += 1 l = len(bars) failed = "n失败列表:"+'n'.join(failed_bar) if len(failed_bar) else '' message = f'''共{l}个吧,其中{succees}个吧签到成功,{len(failed_bar)}个吧签到失败,{already_signed}个吧已经签到。失败列表:{failed}''' print(message) s.get(f"https://sc.ftqq.com/你的SCKEY.send?text={message}")# [未测试]Server酱推送,不需要则删除此行
云函数设置方法
有了脚本就要挂到白嫖云服务器上来实现自动签到
Step1. 注册账号,过程略。网址:https://console.cloud.tencent.com/
Step2. 进入云函数控制台的函数服务:https://console.cloud.tencent.com/scf/index?rid=1
Step3. 单击“新建”
Step4.
Step5.
Step6.
Step7. 测试一下函数运行情况。如若成功则应该能看到“测试成功”,输出与图示相似;失败则检查Cookie是否过期、填写错误以及网络状况。
Step8. 自动执行
Step9.如若关注贴吧个数过多,请自行修改超时时间(大约为0.7s*关注个数)
常见问题
1、 出现module 'index' has no attribute 'main_handler'
解决方法:仔细查看教程Step5----是不是漏了一步?
2、出现Task timed out after 3 seconds
解决方法:参照教程Step10.
3、云函数收费吗?
云函数不收费,但是有流量限制。详情参见:https://cloud.tencent.com/document/product/583/17299
4、常见错误:KeyError: 'like_forum'
cookie大致格式为:BDUSS=XXXXX; TOKEN=XXXXXX
本文转载自:精准像素:11px.cn ,感谢作者分享实用知识