基于Python3+Requests的贴吧签到助手
因为总是忘记签到,所以尝试写了一个签到脚本,因为使用的是Python3,所以没法使用Urllib2,于是选择了Requests,事实证明,Requests比Urllib2好用。整体思路比较简单,就是模拟百度登陆的过程进行交互,然后获取COOKIES并保存,之后都使用COOKIES登陆,然后模拟贴吧客户端的收发包过程进行交互,但实际上遇到了非常多的问题,这里就记录下这次的调试经验
主程序比较简单,就是判断是否登陆成功,然后开始签到,其中判断登陆是否成功时,参考的程序中用的是访问此地址检测状态值
http://tieba.baidu.com/i/i/forum?&pn=1
用浏览器抓包查看是返回302自动跳转,不过就算程序里加入allow_redirects=False,返回值也是200,所以笔者改用了贴吧主页
https://tieba.baidu.com
然后检测是否有关键字“我爱逛的贴吧”
获取贴吧列表时,绝大部分程序都使用的是此地址来获取贴吧列表
http://tieba.baidu.com/f/like/mylike?&pn=
然后还需翻页,但笔者在测试时发现此网址并没有相应的列表,并且在网页中直接打开时有时也没有任何数据,所以在github上翻阅许多代码最后找到这个地址,目前不清楚每页最多能容纳多少贴吧(测试数量为120),如果出现问题可以反馈给笔者
http://tieba.baidu.com/mo/m?tn=bdFBW&tab=favorite
签到时就是获取贴吧的fid值和tbs值进行post,前两个值可以在访问网页版对应贴吧获取(实际上可以是定值,这个参数不是必需的,为了安全稳定,还是选择尽量正确、完整地post信息),根据返回值里面的error_code就可以获得签到情况,为了防止向已签到的贴吧post签到信息(尽管post了只会返回不同的error_code,但不清楚是否会有风险),在签到之前加了一个检验,就是访问网页版对应的贴吧,然后找到对应的关键字,这里用的是Python3自带的正则表达式库re,如果熟悉Beautifulsoup可以使用这个库来实现,并且连续访问速度不能过快,否则会返回错误代码(网页版签到会弹验证码,客户端没有验证码,暂时不知道会不会有其他问题,为了不被反爬虫(笔者被反爬虫过),签到不同贴吧之间加了个随机的延迟,需要大于0.5s)
模拟客户端签到时post的信息需要进行一次加密(网页版不需要),这个是直接移植的参考代码,笔者没有亲自抓包测试,所以不做讲解,笔者尝试去掉加密代码,发现无法签到
上面的是带COOKIES的访问,其中最重要的一条就是BDUSS,这个是百度登陆成功时返回的COOKIES(同时会返回sToken、pToken等COOKIES,但不是必需的),甚至仅有这一条COOKIES就可以登陆百度,所以身份认证中最重要的就是BDUSS(但不是绑定的,新的COOKIES登陆就会产生新的BDUSS),下面写下获取BDUSS的过程
登陆百度这段代码是卡了最长时间的,因为。。。众说纷纭,做了太多无用的尝试
登陆时需要先访问百度首页,然后访问登陆界面,获取这两个的COOKIES(仅访问登陆界面也是可以的),因为正常用网页登陆时是一步一步点进去的,而不可能是直接post信息,所以在没获得前两个网页的COOKIES的情况下直接post是非法的(要先获得一个COOKIES,BAIDUID),然后带着COOKIES去访问百度的api页面获取Token(没有访问前面页面的COOKIES获取到的是the fisrt two args should be string type:0,1!意味着缺少信息),获取之后带着账密和Token令牌post就可以了(这里的headers是特殊的,参见代码,用普通的headers无法登陆),然后根据返回值error判断是否有验证码(基本都有),然后下载验证码放入一个gif文件并打开,手动输入验证码然后带着验证码标签和验证码内容再post,然后根据返回值判断情况(注意千万不要输错密码,多次错误会被锁定3小时!)如果登陆成功保存COOKIES即可,下次就只需带COOKIES登陆,并且每次登陆之后都会刷新和自动保存新COOKIES,目前不清楚多久会失效,目前来看半年内不会过期,从COOKIES文件来看有效期长达数年
在模拟post的过程中,发现抓包得到的post信息相比参考代码多了很多,于是查找了相关资料,当时参考了这篇文章,写了很长一段繁琐的代码,最后发现这些参数不是必需的。。。只当是练手罢了
https://www.cnblogs.com/qiyeboy/p/5722424.html
本文记录了开发过程中遇到的一些问题以及心得体会,代码托管在在GIT上,欢迎提供宝贵意见与建议
https://github.com/Pyrokine/tieba_autosign
感谢以下GEEKS
百度贴吧自动签到 https://github.com/chaonet/baidu_tieba_auto_sign 模拟登录百度做一些事 http://blog.csdn.net/programmer_sir/article/details/38961109
更新时间:2018.07.20,GIT同步更新到V1.2版
基于Python3+Requests的贴吧签到助手的更多相关文章
- Python3 + requests + unittest接口测试
一.缘 起 笔者最近完成了基于Python3 + requests + unittest的接口测试脚本,故在此做一下记录,于己为复盘,于彼为学习和参考 二.思 路 接口测试无非三步: 首先,造数据 - ...
- python3+requests:接口自动化测试(二)
转载请注明出处:https://www.cnblogs.com/shapeL/p/9188495.html 前言:上篇文章python3+requests+unittest:接口自动化测试(一):ht ...
- 基于Python3(Autosub)以及Ffmpeg配合GoogleTranslation(谷歌)为你的影片实现双语版字幕(逐字稿)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_169 为影片加字幕其实是一件非常耗费时间的事情,尤其是对于打字慢的朋友来说.当然不光为影片加字幕,在其他领域,类似的逐字稿也是工作 ...
- Sublime Text 2 (for OS X )配置成可以运行基于python3解释器的 .py文件
Mac自带的python 其version是python 2.7 官网下的Sublime Text 2部署好了以后默认也是 为了使ST2 可以在command+B时可以运行基于python3的.py, ...
- 基于Python3的漏洞检测工具 ( Python3 插件式框架 )
目录 Python3 漏洞检测工具 -- lance screenshot requirements 关键代码 usage documents Any advice or sugggestions P ...
- python3+requests库框架设计01-自动化测试框架需要什么?
什么是自动化测试框架 关于自动化测试框架的定义有很多,在我大致理解下就是把能实现不同功能的软件组合在一起,实现特定的目的,这就是一个简单的自动化测试框架. 接口自动化测试框架核心无非是选择 一个用来编 ...
- 【python3+request】python3+requests接口自动化测试框架实例详解教程
转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...
- 基于Python3 + OpenCV3.3.1的远程监控程序
基于Python3 + OpenCV3.3.1的远程监控程序 一.环境配置 OpenCV是一个基于(开源)发行的跨平台计算机视觉库,利用OpenCV能够实现视频图像的捕获. 关于python3中Ope ...
- 基于Python3 神经网络的实现
基于Python3 神经网络的实现(下载源码) 本次学习是Denny Britz(作者)的Python2神经网络项目修改为基于Python3实现的神经网络(本篇博文代码完整).重在理解原理和实现方法, ...
随机推荐
- springboot2.1.7整合swagger2.9.2
什么是swagger? swagger是用于定义API文档的一个框架. 为什么要使用swagger? 当下项目开发时前后端是分离的,那么接口就成了前后端唯一的纽带.前端工程师如何知道哪个接口是干嘛的? ...
- git简单介绍
一种常见的版本控制工具 获取 克隆仓库 git支持以ssh或者http的方式来标识远程仓库 git clone git@github.com:username/project.git git clon ...
- golang程序因未知错误崩溃时如何记录异常
开发服务器程序时如果未经过充分测试, 服务稳定运行一段时间后会突然崩溃退出.一般是因为程序中出现了某个未捕获的异常. 这类问题属于偶现的,且需要服务器运行一段时间之后才会出现,难以定位有问题的代码段. ...
- JSP页面验证码实现
首先在JSP页面加上生成图片的链接 <img type="image" src="auth/authCode" id="codeImage&qu ...
- SpringBoot--整合Mybatis+druid
分为两部分,首先替换默认数据源为阿里德鲁伊并添加监控,其次是SpringBoot下使用Mybatis 替换数据源为德鲁伊 首先在配置文件里配置好数据库连接的基本信息,如username passwor ...
- 通过 AppSwitch 禁用 WPF 内置的触摸让 WPF 程序可以处理 Windows 触摸消息
原文:通过 AppSwitch 禁用 WPF 内置的触摸让 WPF 程序可以处理 Windows 触摸消息 WPF 框架自己实现了一套触摸机制,但同一窗口只能支持一套触摸机制,于是这会禁用系统的触摸消 ...
- [unity]GPU Instance学习
前言我们之前研究过为什么Unity的UI可以合批,是因为使用了相同的材质进行渲染,UI上不同图片渲染是通过把图片打成一张图集后,使用Image组件对顶点填充了不同的UV值实现的.那么有没有什么办法可以 ...
- 使用jQuery开发datatable分页表格插件
当系统数据量很大时,前端的分页.异步获取方式就成了较好的解决方案.一直以来,我都希望使用自己开发的 jquery 插件做系统. 现在,学习了 jquery 插件开发之后,渐渐地也自己去尝试着开发一些简 ...
- PHP写的简单数字验证码
用PHP写的随机生成的5位数字验证码 $yzm = ""; for($i=0;$i<5;$i++) { $a = rand(0,9); $yzm.= $a; } echo $ ...
- Python学习日记(十七) os模块和sys模块
os模块 1.os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 import os print(os.getcwd()) #C:\Users\Administrator\ ...