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导入oracle数据的方法
Jul 10 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
python try except 捕获所有异常的实例
Oct 18 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
Aug 23 Python
python爬虫容易学吗
Jun 02 Python
python上selenium的弹框操作实现
Jul 13 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 06 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
python geopandas读取、创建shapefile文件的方法
Jun 29 Python
Python探索生命起源 matplotlib细胞自动机动画演示
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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
php设计模式小结
2013/02/15 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
Python实现KNN邻近算法
2021/01/28 Python
python处理csv中的空值方法
2018/06/22 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
关于母亲节的感言
2014/02/04 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
基层党员对照检查材料
2014/09/24 职场文书
先进集体申报材料
2014/12/25 职场文书
淘宝好评语句大全
2014/12/31 职场文书
董事长岗位职责
2015/02/13 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
《英雄联盟》2022日蚀、月蚀皮肤演示 黑潮亚索曝光
2022/04/13 其他游戏
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang