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

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

分析

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

不过还好,我们有微信。

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

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

登录分析

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

可以发现,登录的请求地址是: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,就代表登录成功!

签到分析

登录成功后,页面会自动跳转到首页,我们可以看到签到图标,点击它,进入签到页面:

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

终于签到成功!

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

签到请求中有两个重要的参数,accesstoken 和 customerguid,这两个参数就是登陆后返回的。

签到请求响应:

{"Error": 0,"Message": "返回正确","Data": {"GetPoints": 5,"SumGetPoints": 840}
}

返回说这次签到获得了 5 个积分,其实连续签到 4 天后,每天就可以获得 20 积分了!

实现

通过上面的分析,我们的签到流程也很清晰了,首先就是登陆获取 accesstoken 和 customerguid,然后再去签到就可以了!

import requests, json, sysdef 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、Java、PHP、前端、小程序、算法、架构、数据库等等!关注本公众号,后台回复「慕课网」即可获取下载地址。

Python 实现「食行生鲜」签到领积分相关推荐

  1. python 爬虫 爬取食行生鲜 app

    目标app 需要爬取的内容是 限时抢购 用fiddler代理手机抓一下包.(具体fiddler如何代理手机参考这里:https://www.cnblogs.com/qingqing-919/p/844 ...

  2. 没有任何基础的可以学python吗-没有任何基础的人,该如何学习Python?「附具体步骤」...

    原标题:没有任何基础的人,该如何学习Python?「附具体步骤」 Python是一门简单易学的语言,可是对于完全没有任何基础的小白来说,入门也是不容易的. 今天,我们来看一下,对于这部分同学来说,具体 ...

  3. 怎么学python-没有任何基础的人,该如何学习Python?「附具体步骤」

    原标题:没有任何基础的人,该如何学习Python?「附具体步骤」 Python是一门简单易学的语言,可是对于完全没有任何基础的小白来说,入门也是不容易的. 今天,我们来看一下,对于这部分同学来说,具体 ...

  4. 没有基础的人可以学python吗-没有任何基础的人,该如何学习Python?「附具体步骤」...

    原标题:没有任何基础的人,该如何学习Python?「附具体步骤」 Python是一门简单易学的语言,可是对于完全没有任何基础的小白来说,入门也是不容易的. 今天,我们来看一下,对于这部分同学来说,具体 ...

  5. 【招聘】食行生鲜--前端开发工程师

    岗位内容: 参与食行生鲜 HTML5 各类页面的实现与维护: 参与组件库的开发. 任职/特质要求 掌握 HTML 和 HTML5 ,符合 W3C 标准: 掌握 CSS ,熟悉 CSS3 特性: 掌握 ...

  6. 逆向js混淆 解密食行生鲜的js加密函数

    起因 在csdn里面看到这篇文章 (https://blog.csdn.net/bruce_6/article/details/81452796),想要试试逆向混淆js 登陆页面 食行生鲜手机登陆地址 ...

  7. python积分管理系统_python实现每天自动签到领积分的示例代码

    自动签到的python脚本源码 新建一个python文件,checkin.py,保存到电脑上某个位置,我这里保存到的是E:\pyproject\checkin.py # 引入3个包 from sele ...

  8. python模拟-食行生鲜登陆

    目标路径 : https://wechatx.34580.com/mart/#/sign/in 需要解决的问题: 当我们登陆的时候会发现密码进行了加密,这个时候怎么找到加密的函数尤为重要,这里为大家进 ...

  9. 王垠的「40 行代码」真如他说的那么厉害吗?

    "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在 GitHub 上了.但是除非接受过专门的训练,你绝对不会理解它们的价值.你会很难想象,这样一片普通人看起来像是玩 ...

最新文章

  1. linux中cooy命令_Linux复制指令
  2. 《强化学习周刊》第2期:多智能体强化学习(MARL)赋能“AI智能时代”
  3. webpack:多文件、多环境、跨域处理、热加载
  4. tf.nn.dropout和tf.keras.layers.Dropout的区别(TensorFlow2.3)与实验
  5. 组件化与插件化的差别在哪里?附面试题答案
  6. 关于datetime 比较大小失效的问题
  7. 301重定向错误(细心就不应该出错)
  8. 计算机学业水平测试网,学业水平测试
  9. HDU 1358 (所有前缀中的周期串) Period
  10. Ubuntu下RabbitMQ安装
  11. Goto是关键?思考
  12. flash打开文件时缺少文字_FLash常见问题
  13. 北理c语言乐学作业分数运算,北理乐学C语言答案-最新(12页)-原创力文档
  14. iPad——添加学校邮箱到邮件解决方案
  15. Win10查看电脑上次的开机时间
  16. 重装系统进入PE的快捷键大全
  17. 运动耳机排行榜10强,运动人士必备的几款运动耳机分享
  18. 贺泓胜:2.24黄金今日走势分析操作建议,黄金原油解套指导
  19. 【Kafka】kafka日志收集平台搭建(二)
  20. MatLab专用变量

热门文章

  1. vue打包后dist的使用
  2. SQL Server中使用convert进行日期转换
  3. TCP Reno/Westwood 的效率和公平
  4. import cannot be resolved问题-解决方法
  5. Git:分布式框架原理
  6. php think swoole,tp5.1 think-swoole使用
  7. java 转发url_Java转发重定向
  8. 目录授予777权限却还是无法进入的解决方案
  9. 微信python小课_微信公众号广告案例:Pytnon小课
  10. RF2O-2D激光里程计算法源码解析与相关公式的详细推导