想在贴吧装萌(大)新(佬)?可惜牌子等级不够高?每天打卡签到太麻烦?快来试试这个自动签到吧(〜 ̄△ ̄)〜

一、准备

照例先来准备一下我们需要用到的东西

1:腾讯云函数账号:地址

(自行注册就好,每月40万GB/s的使用时间以及高达100万次的调用次数,正常人铁定用不完╮( ̄▽ ̄)╭)

2:代码:

# -*- coding: utf8 -*-
import requests
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=;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)
    info = message 
    sckey = 'SCU***'
    requests.get('https://sc.ftqq.com/'+ sckey +'.send?text=贴吧签到信息&desp='+str(message))

def main_handler(event, context):
  return main()

if __name__ == '__main__':
  main()

3:一双手,脚也行( ̄▽ ̄)

二、创建函数

1:打开腾讯云函数找到左侧的函数服务——选择新建

2:选择自定义创建

①函数名称:自行填写,

②地域:选择一个离你最近的城市,避免出现异地登录导致执行不成功

③运行环境:选择python3.6

④提交方法:选择在线编辑

⑤执行方法:填index.main_handler

⑥然后把下面自带的helloword删掉,换成我们的百度贴吧签到代码

⑦打开下面的高级配置,然后把内存改为64mb*,执行超时时间改为60秒**

*一般只需要16M的内存,64是可选里面最小的了。

**时间看你自己关注了多少个贴吧,我关注了50个贴吧运行需要35秒,可以自行酌情增减时长,避免运行到一半被强行中断导致运行不成功

⑧高级配置——固定出口IP 这个功能建议勾上,防止签到不成功*反正也不多收费__(:3」∠)__*

都搞定后就按完成

三、获取Cookies

①打开百度贴吧的网页:链接

②按F12打开开发者工具——Application——按Ctrl+R刷新页面

③等全部加载完后我们跳转到Application找到Cookies选择下面的https://tieba.baidu.com*(虽然在Network里面找Cookies也可以,但是太乱了)**无视右上角的errors和warnings( ̄▽ ̄)

④然后我们在上面搜索BDUSS和STOKEN这两个cookies,(STOKEN可能会出现两个,我们选择tieba.baidu.com的那个)

⑤把两个值完整的粘贴到代码中(大约在16行),切记不可删掉代码中预留的”=”“;”和 ‘ 号

四、设置推送

*如果不需要可以跳过*

本脚本采用server酱进行推送服务,免费注册地址:链接(貌似5月份就要关闭通道了,更新代码啥的等以后再说吧)

把你的SCKEY填写到代码中(大约在72行)

五、测试

都搞完后我们点击页面下方的“测试按钮”,他会提示你先部署,我们选“是”

一切正常的话,等运行结束你的微信就能收到推送啦

我们点击页面左边的日志查询,里面能看到本次运行花费了多长时间和内存,你可以根据这个数值调整你这个函数的内存和执行超时时间,避免浪费免费额度,虽然也用不完(〜 ̄△ ̄)〜

六、设置定时运行

在页面左边选择触发管理,选择创建触发器

定时任务名称自行修改

触发周期选择自定义触发周期

填入你的Cron表达式点提交就搞定啦

你这时要问了:Cron表达式不会填怎么办?

答:现学呀( ̄▽ ̄)

Cron 表达式有七个必需字段,用空格分隔

第一位第二位第三位第四位第五位第六位第七位
分钟小时星期

其中,每个字段都有相应的取值范围:

字段通配符
0 – 59的整数, – * /
分钟0 – 59的整数, – * /
小时0 – 23的整数, – * /
1 – 31的整数(需要考虑月的天数), – * /
1 – 12的整数或 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC, – * /
星期0 – 6的整数或 SUN,MON,TUE,WED,THU,FRI,SAT。其中0指星期日,1指星期一,以此类推, – * /
1970 – 2099的整数, – * /

通配符

通配符含义
,(逗号)代表取用逗号隔开的字符的并集。例如:在“小时”字段中 1,2,3 表示1点、2点和3点
-(破折号)包含指定范围的所有值。例如:在“日”字段中,1 – 15包含指定月份的1号到15号
* (星号)表示所有值。在“小时”字段中,* 表示每个小时
/ (正斜杠)指定增量。在“分钟”字段中,输入1/10以指定从第一分钟开始的每隔十分钟重复。例如,第11分钟、第21分钟和第31分钟,以此类推

这时你又要问了:我看不懂怎么办

看我举得例子你就懂了:

例如我想每天凌晨0点45分运行一次脚本,那表达式是这样的:0 45 0 * * * *

我想每天下午5点30分运行一次脚本,那表达式是这样的:0 30 17 * * * *

进阶版:

  • */5 * * * * * * 表示每5秒触发一次
  • 0 0 2 1 * * * 表示在每月的1日的凌晨2点触发
  • 0 15 10 * * MON-FRI * 表示在周一到周五每天上午10:15触发
  • 0 0 10,14,16 * * * * 表示在每天上午10点,下午2点,4点触发
  • 0 */30 9-17 * * * * 表示在每天上午9点到下午5点每半小时触发
  • 0 0 12 * * WED * 表示在每个星期三中午12点触发

七、结束

提交完之后就可以关闭网页啦,等着收推送吧ε=ε=(ノ≧∇≦)ノ

我们所度过的每个平凡的日常,也许就是连续发生的奇迹。

《日常》

你也可能喜欢

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注