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 相关文章推荐
在Mac OS上搭建Python的开发环境
Dec 24 Python
Python 装饰器使用详解
Jul 29 Python
TF-IDF算法解析与Python实现方法详解
Nov 16 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
python实现XML解析的方法解析
Nov 16 Python
pytorch实现线性拟合方式
Jan 15 Python
Python3 assert断言实现原理解析
Mar 02 Python
python如何写出表白程序
Jun 01 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
基于python实现音乐播放器代码实例
Jul 01 Python
Python容器类型公共方法总结
Aug 19 Python
django中ImageField的使用详解
Dec 21 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 无限级数据JSON格式及JS解析
2010/07/17 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
Python字符转换
2008/09/06 Python
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
Python多进程同步简单实现代码
2016/04/27 Python
Python Socket传输文件示例
2017/01/16 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
python与字符编码问题
2019/05/24 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
应届生幼儿园求职信
2013/11/12 职场文书
综合实践教学反思
2014/01/31 职场文书
小学数学课题方案
2014/06/15 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书