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 pickle 和 shelve模块的用法
Sep 16 Python
Python yield 小结和实例
Apr 25 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
Jul 01 Python
Python之Scrapy爬虫框架安装及简单使用详解
Dec 22 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
Python登录注册验证功能实现
Jun 18 Python
python逆序打印各位数字的方法
Jun 25 Python
python中yield的用法详解——最简单,最清晰的解释
Apr 04 Python
从numpy数组中取出满足条件的元素示例
Nov 26 Python
Python3如何使用range函数替代xrange函数
Oct 05 Python
Python并发编程实例教程之线程的玩法
Jun 20 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 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/04/28 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
javascript读写json示例
2014/04/11 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
django之session与分页(实例讲解)
2017/11/13 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
对Python w和w+权限的区别详解
2019/01/23 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
工业设计专业推荐信
2013/10/29 职场文书
司仪主持词两篇
2014/03/22 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
护士业务学习心得体会
2016/01/25 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS