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静态方法实例
Jan 14 Python
深入理解Python变量与常量
Jun 02 Python
Python实现获取磁盘剩余空间的2种方法
Jun 07 Python
使用python实现链表操作
Jan 26 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
Python类装饰器实现方法详解
Dec 21 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
Python谱减法语音降噪实例
Dec 18 Python
Python OpenCV去除字母后面的杂线操作
Jul 05 Python
Pycharm安装python库的方法
Nov 24 Python
python 实现图片批量压缩的示例
Dec 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
利用js调用后台php进行数据处理原码
2006/10/09 PHP
搜索引擎技术核心揭密
2006/10/09 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
Python MD5文件生成码
2009/01/12 Python
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
python中精确输出JSON浮点数的方法
2014/04/18 Python
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
机电一体化毕业生求职信
2013/11/02 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
美术教师岗位职责
2014/03/18 职场文书
座谈会主持词
2014/03/20 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
公司仓库管理制度
2015/08/04 职场文书
golang slice元素去重操作
2021/04/30 Golang