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爬虫常用的模块分析
Aug 29 Python
Python中的zip函数使用示例
Jan 29 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 Python
python中函数默认值使用注意点详解
Jun 01 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
Pytest框架之fixture的详细使用教程
Apr 07 Python
python中可以声明变量类型吗
Jun 18 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
微信小程序调用python模型
Apr 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 ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
javascrip关于继承的小例子
2013/05/10 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
pyramid配置session的方法教程
2013/11/27 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
python统计字符的个数代码实例
2020/02/07 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
自考生毕业自我鉴定
2013/10/10 职场文书
写好自荐信的几个要点
2013/12/26 职场文书
党课学习思想汇报
2014/01/02 职场文书
实习生自我评价
2014/01/18 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
出差报告格式模板
2014/11/06 职场文书
安全检查汇报材料
2014/12/26 职场文书
语文复习计划
2015/01/19 职场文书
司机岗位职责范本
2015/04/10 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers