作为一名吧友,日常水贴赚经验是必不可少的,同样每天签到水经验也是基操了,为了能快速签到,度娘也是贴心地提供了一键签到的功能,每天上去点一下即可。虽然这个功能很贴心,但是还是要人为操作一下,如果哪天断签了,经验又要重新开始算,所以我打算写一 Python 签到脚本,然后放服务器中每天定时执行一下,实现全自动化签到。
一、分析
贴吧签到有两种方法实现,一是一个吧一个吧地签到,费时费力,二是一键签到,这个不错。一键签到有个限制,每天的0点到1点不能使用的,只能在其他时间段使用,如果想在这个时间段签到,只能一个一个来。当然最简单的操作就是把定时任务设置在1点钟后。
所以,先实现一键签到的功能,后续再实现逐一签到的功能,步骤如下:
- 提取接口
- 分析接口的请求头,请求参数及响应数据
- 编码
- 设置定时任务
二、提取接口
打开浏览器,访问 tieba.baidu.com ,登录贴吧
按F12打开开发者工具,选择网络标签,先清空一下,排除干扰项
在页面中找到一键签到的按钮,如图

点击一键签到,弹出如下窗口

点击开始签到,注意观察开发者工具网络标签的变化,啪~ 啪~几下就出现了下面几个请求

后面几个是请求图片文件的,明显不是我们想要的,只有第一个请求,响应类型是json,请求的路径也很明显了,onekeySignin1,所以这个就是目标请求接口了,下面开始分析这个接口的请求数据
三、分析接口
接口
https://tieba.baidu.com/tbmall/onekeySignin1
请求报文
通过开发者工具得到请求报文如下:
POST /tbmall/onekeySignin1 HTTP/1.1
Host: tieba.baidu.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 39
Origin: https://tieba.baidu.com
DNT: 1
Connection: keep-alive
Referer: https://tieba.baidu.com/
Cookie: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Pragma: no-cache
Cache-Control: no-cache
这个请求也没有什么特别的,只要保证几个关键请求头信息即可,如Cookie,User-Agent, Referer这几个常用的反爬的字段
请求参数
请求参数如下:
ie: "utf-8"
tbs: "ba1c01bc6543721c1xxxxxxxxxx"
这里两个参数,第一个是编码,第二个不知道是啥,这是个关键点。
对于这种不明参数,一般都是两种情况,第一是页面或者JS文件中的隐藏数据,第二种就是通过JS动态生成的加密数据,通常都是先去页面中找,如果能找到那就好办了,如果找不到再去分析JS。
先从页面中找,在开发者工具中点击查看器(Elements),按 Ctrl + F 输入参数名称 tbs 按回车,出来两个结果,第一个是一个空值,按回车选择下一个,发现新大陆,这个参数跟上面的有点像,不,不能说有一点像,简直就是一模一样,这样我们就拿到了tbs这个参数

响应结果
响应正确结果如下:
{
"no": 0,
"error": "",
"data": {
// 响应数据
// ......
}
}<

本文介绍如何编写Python脚本实现百度贴吧的一键签到功能,并将其部署到服务器上定时执行。
最低0.47元/天 解锁文章
1122

被折叠的 条评论
为什么被折叠?



