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实现自动登录人人网并访问最近来访者实例
Sep 26 Python
使用Python的Zato发送AMQP消息的教程
Apr 16 Python
在Python中使用成员运算符的示例
May 13 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
Python中GIL的使用详解
Oct 03 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
python 三元运算符使用解析
Sep 16 Python
python,Java,JavaScript实现indexOf
Sep 09 Python
python matplotlib库的基本使用
Sep 23 Python
Python Tkinter实例——模拟掷骰子
Oct 24 Python
Python headers请求头如何实现快速添加
Nov 03 Python
Python Django 后台管理之后台模型属性详解
Apr 25 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 构造函数construct的前下划线是双的_
2009/12/08 PHP
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
php中spl_autoload详解
2014/10/17 PHP
php实现点击可刷新验证码
2015/11/07 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
JavaScript null和undefined区别分析
2009/10/14 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
一步步教你用Python实现2048小游戏
2017/01/19 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
python编写俄罗斯方块
2020/03/13 Python
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
绿色家庭事迹材料
2014/05/01 职场文书
好的促销活动方案
2014/08/21 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
青年联谊会致辞
2015/07/31 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript