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的ORM框架SQLAlchemy入门教程
Apr 28 Python
Python程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
Python常见数据结构详解
Jul 24 Python
Python使用matplotlib简单绘图示例
Feb 01 Python
深入理解Python爬虫代理池服务
Feb 28 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
python调用tcpdump抓包过滤的方法
Jul 18 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
Python+opencv 实现图片文字的分割的方法示例
Jul 04 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
Python 操作 MySQL数据库
Sep 18 Python
python 算法题——快乐数的多种解法
May 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
mysql数据库差异比较的PHP代码
2012/02/05 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
js控制框架刷新
2008/08/01 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
python实现封装得到virustotal扫描结果
2014/10/05 Python
python实现的简单RPG游戏流程实例
2015/06/28 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
python如何支持并发方法详解
2020/07/25 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
《金钱的魔力》教学反思
2014/02/24 职场文书
设备售后服务承诺书
2014/05/30 职场文书
专业见习报告范文
2014/11/03 职场文书
2014年后勤工作总结
2014/11/18 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
客户经理岗位职责
2015/01/31 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
2015个人半年总结范文
2015/03/09 职场文书
讲座新闻稿
2015/07/18 职场文书