Python实现App自动签到领取积分功能


Posted in Python onSeptember 29, 2018

要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化。但是发现食行没有页面,只有 APP,这不是一个好消息,这意味着需要抓包处理了。

Python实现App自动签到领取积分功能

Python实现App自动签到领取积分功能

下面的操作就好办了,在电脑端的浏览器打开网址,按下 F12,开始起飞~

登录分析

点击签到后,会跳转到用户登录页面: https://wechatx.34580.com/mart/#/sign/in,输入登录信息后,点击登录,同时关注开发调试栏的网络交互信息 。

Python实现App自动签到领取积分功能

可以发现,登录的请求地址是: https://wechatx.34580.com/sz/Sign/SignInV2,并且会在请求时带着登录信息 :

{
 "SourceType": "9",
 "Phone": "18800000000",
 "PassWord": "98a53578bd74e150",
 "ZhuGeDeviceMd5": "164edd53b71674-02922cef4808a-47e1039-e1000-164edd53b7222e",
 "DeviceId": ""
}

现在,还无法确定哪些字段是必填的,哪些是可以不传的。

有一个问题是,密码是经过加密的,我在页面输入的 000000 ,这里变成了 98a53578bd74e150。这里我找了半天是如何加密的,也没有找到,若是有大神有办法,还请留言告知!

不过还好,加密方式是固定的,也就是 000000 一直对应的是 98a53578bd74e150,我们只要记下这个加密后的密码,在登录时,传入后台即可。

登录成功后,请求会响应一些 token 数据:

{
 "Error": 0,
 "Message": "返回正确",
 "Data": {
 "CustomerGuid": "d8cd7c84-xxxx-4369-xxxx-b1e86c027407",
 "Phone": "18800000000",
 "AccessToken": "73c7b5fxxxxxxx"
 }
}

只要 Error 字段为 0,就代表登录成功!

签到分析

登录成功后,页面会自动跳转到首页,我们可以看到签到图标,点击它,进入签到页面:

Python实现App自动签到领取积分功能

发现进来还是一个签到按钮,套娃啊!再点它!

终于签到成功!

发现签到的请求: https://wechatx.34580.com/sz/SignUp/CustomerSignUp

Python实现App自动签到领取积分功能

签到请求中有两个重要的参数,accesstoken 和 customerguid,这两个参数就是登陆后返回的。

签到请求响应:

{
 "Error": 0,
 "Message": "返回正确",
 "Data": {
 "GetPoints": 5,
 "SumGetPoints": 840
 }
}

返回说这次签到获得了 5 个积分,其实连续签到 4 天后,每天就可以获得 20 积分了!

实现

通过上面的分析,我们的签到流程也很清晰了,首先就是登陆获取 accesstoken 和 customerguid,然后再去签到就可以了!

import requests, json, sys
def login(Phone, PassWord):
 url = "https://wechatx.34580.com/sz/Sign/SignInV2"
 payload = {
 'SourceType': 9,
 'Phone': Phone,
 'PassWord': PassWord
 }
 # 测试下来发现,连 header 都不需要
 response = requests.post(url, data=json.dumps(payload))
 data = json.loads(response.text)
 is_error = data['Error']
 # 登录失败直接退出
 if is_error:
 print('登录失败:{}'.format(data['Message']))
 sys.exit(1)
 else:
 print('登录成功!')
 return data['Data']['CustomerGuid'], data['Data']['AccessToken']
def signin(customerguid, accesstoken):
 url = "https://wechatx.34580.com/sz/SignUp/CustomerSignUp"
 querystring = {"accesstoken": accesstoken,
 "customerguid": customerguid, "sourcetype": "9"}
 # 这次不需要 body 中的传入数据
 response = requests.post(url, params=querystring)
 data = json.loads(response.text)
 is_error = data['Error']
 if is_error:
 print(data['Message'])
 else:
 print("签到成功,获取到 {} 个积分".format(data['Data']['GetPoints']))
if __name__ == "__main__":
 Phone = input('请输入账号:')
 PassWord = input('请输入密码:')
 customerguid, accesstoken = login(Phone.strip(), PassWord.strip())
 signin(customerguid, accesstoken)

运行:

$ python shsx.py

请输入账号:188xxxxxxxx
请输入密码:98a53578bd74e150
登录成功!
签到成功,获取到 20 个积分

最后,怎么自动执行?把登录信息写死到代码里,然后放到 Linux 下的 crontab 里,每天早上执行一次就行啦~

总结

这里还有一个遗留问题,就是登录密码的获取,现在还只能通过 F12 查看请求获取到,然后记下来。

Python 相关文章推荐
Windows下为Python安装Matplotlib模块
Nov 06 Python
Python2.x与Python3.x的区别
Jan 14 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 Python
python字典一键多值实例代码分享
Jun 14 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
Python字符串的修改方法实例
Dec 19 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 04 Python
Python turtle实现贪吃蛇游戏
Jun 18 Python
10个Python小技巧你值得拥有
Sep 29 #Python
实例分析python3实现并发访问水平切分表
Sep 29 #Python
3个用于数据科学的顶级Python库
Sep 29 #Python
使用Python机器学习降低静态日志噪声
Sep 29 #Python
python实现字符串和字典的转换
Sep 29 #Python
python实现字符串中字符分类及个数统计
Sep 28 #Python
python中使用zip函数出现错误的原因
Sep 28 #Python
You might like
php根据分类合并数组的方法实例详解
2013/11/06 PHP
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
js实现列表按字母排序
2020/08/11 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
python Django框架实现自定义表单提交
2016/03/25 Python
python得到windows自启动列表的方法
2018/10/14 Python
Python之修改图片像素值的方法
2019/07/03 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
python中如何写类
2020/06/29 Python
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
党校培训思想汇报
2014/01/03 职场文书
高一学生评语大全
2014/04/25 职场文书
学校食品安全实施方案
2014/06/14 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
Python学习之os包使用教程详解
2022/03/21 Python