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 相关文章推荐
python构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
python制作小说爬虫实录
Aug 14 Python
python xlsxwriter库生成图表的应用示例
Mar 16 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 Python
详解python中*号的用法
Oct 21 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
Keras实现支持masking的Flatten层代码
Jun 16 Python
python 爬虫如何正确的使用cookie
Oct 27 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获取数组最后一个值的2种方法
2015/01/21 PHP
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
jquery根据属性和index来查找属性值并操作
2014/07/25 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python实现将元祖转换成数组的方法
2015/05/04 Python
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
python中的lambda表达式用法详解
2016/06/22 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
python元组的概念知识点
2019/11/19 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
weblogic面试题
2016/03/07 面试题
经济与贸易专业应届生求职信
2013/11/19 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
社会实践活动总结报告
2014/04/29 职场文书
出生医学证明书
2014/09/15 职场文书
信访维稳工作汇报
2014/10/27 职场文书
搞笑婚前保证书
2015/02/28 职场文书
环保建议书范文
2015/09/14 职场文书
奖学金申请书(范文)
2019/08/14 职场文书