Python 实现「食行生鲜」签到领积分功能

作者:hoxis 时间:2023-02-25 16:26:00 

用过食行生鲜的同学应该知道,每天可以在食行生鲜签到,签到可以领到 20 积分,在购物时可以抵 2 毛钱。钱虽少,但是积少成多,买菜时可以抵扣一两块钱还是不错的。

今天我们就用 Python 来实现自动签到,省得我每天打开 APP 来操作了。

分析

要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化。但是发现食行没有页面,只有 APP,这不是一个好消息,这意味着需要抓包处理了。

不过还好,我们有微信。

在微信里面,我们发现也可以登录食行,这时选择在浏览器中打开页面,~哎~ ,柳暗花明了,我们找到了一个可用的网页地址:wechatx.34580.com

Python 实现「食行生鲜」签到领积分功能

下面的操作就好办了,在电脑端的浏览器打开网址,按下 F12,开始起飞~

登录分析

点击签到后,会跳转到用户登录页面: https://wechatx.34580.com/mart/#/sign/in,输入登录信息后,点击登录,同时关注开发调试栏的网络交互信息 。

Python 实现「食行生鲜」签到领积分功能

可以发现,登录的请求地址是: 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 实现「食行生鲜」签到领积分功能


发现进来还是一个签到按钮,套娃啊!再点它!


终于签到成功!


发现签到的请求: https://wechatx.34580.com/sz/SignUp/CustomerSignUp


Python 实现「食行生鲜」签到领积分功能


签到请求中有两个重要的参数,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 查看请求获取到,然后记下来。

但是,登录密码是怎么加密的,由于本人 js 方面比较薄弱,有能力有兴趣的同学要是能看出来可以留言分享下啊~

以上所述是小编给大家介绍的Python 实现「食行生鲜」签到领积分功能网站的支持!

来源:http://www.cnblogs.com/hoxis/p/9704889.html

标签:python,食行生鲜,签到,积分
0
投稿

猜你喜欢

  • Python函数递归调用实现原理实例解析

    2023-01-16 12:00:52
  • 巧用Dreamweaver制作复杂图像

    2010-09-02 12:34:00
  • 浅谈vue中使用编辑器vue-quill-editor踩过的坑

    2024-04-10 13:46:00
  • 解析python的局部变量和全局变量

    2023-08-23 18:17:01
  • 最强Python可视化绘图库Plotly详解用法

    2022-03-08 11:01:07
  • 浅谈Django2.0 加xadmin踩的坑

    2022-03-03 11:00:24
  • python学习之matplotlib绘制散点图实例

    2021-02-22 21:28:22
  • MySQL去重的方法整理

    2024-01-27 07:04:42
  • Python pandas DataFrame操作的实现代码

    2021-07-24 00:49:43
  • Python使用PyCrypto实现AES加密功能示例

    2022-09-18 13:23:57
  • python环境中的概念conda中与环境相关指令操作

    2021-01-09 19:40:55
  • pytorch锁死在dataloader(训练时卡死)

    2023-06-28 02:36:34
  • Django+Celery实现定时任务的示例

    2023-07-27 19:48:18
  • django实现用户注册实例讲解

    2022-06-23 08:05:53
  • Python实现约瑟夫环问题的方法

    2021-09-07 19:41:28
  • Python笔记之工厂模式

    2022-11-07 17:58:47
  • javascript实现checkbox全选的代码

    2024-04-16 10:38:11
  • 分享8 个常用pandas的 index设置

    2023-10-24 14:22:13
  • mysql语法之DQL操作详解

    2024-01-19 09:39:10
  • python使用pil进行图像处理(等比例压缩、裁剪)实例代码

    2022-12-22 16:50:09
  • asp之家 网络编程 m.aspxhome.com