Python 实现「食行生鲜」签到领积分
2018-09-26 09:02
831 查看
用过食行生鲜的同学应该知道,每天可以在食行生鲜签到,签到可以领到 20 积分,在购物时可以抵 2 毛钱。钱虽少,但是积少成多,买菜时可以抵扣一两块钱还是不错的。
今天我们就用 Python 来实现自动签到,省得我每天打开 APP 来操作了。
下面的操作就好办了,在电脑端的浏览器打开网址,按下 F12,开始起飞~
可以发现,登录的请求地址是:https://wechatx.34580.com/sz/Sign/SignInV2,并且会在请求时带着登录信息:
发现进来还是一个签到按钮,套娃啊!再点它!
终于签到成功!
发现签到的请求:https://wechatx.34580.com/sz/SignUp/CustomerSignUp
签到请求中有两个重要的参数,accesstoken 和 customerguid,这两个参数就是登陆后返回的。
签到请求响应:
分析
要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化。但是发现食行没有页面,只有 APP,这不是一个好消息,这意味着需要抓包处理了。 不过还好,我们有微信。 在微信里面,我们发现也可以登录食行,这时选择在浏览器中打开页面,~哎~ ,柳暗花明了,我们找到了一个可用的网页地址:wechatx.34580.com![](https://oscdn.geek-share.com/Uploads/Images/Content/201809/4770cc070a44d65cace9393f17869254.jpg)
登录分析
点击签到后,会跳转到用户登录页面:https://wechatx.34580.com/mart/#/sign/in,输入登录信息后,点击登录,同时关注开发调试栏的网络交互信息。![](https://oscdn.geek-share.com/Uploads/Images/Content/201809/3550aee9c19760e04f13d34c867343f8.jpg)
{ "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://oscdn.geek-share.com/Uploads/Images/Content/201809/9e2fbb633f337f9eb81757171e629891.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201809/94a79ebd6b1a15974eea58bfca620b96.jpg)
{ "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 方面比较薄弱,有能力有兴趣的同学要是能看出来可以留言分享下啊~ 另外,怎么知道是不是签到成功了呢,总不能去看定时任务的执行日志吧,是不是可以发送短信通知或者微信通知?这个且看后续分解。 如果觉得有用,欢迎关注我的微信,一起学习,共同进步,不定期推出赠书活动~![](https://oscdn.geek-share.com/Uploads/Images/Content/201809/0f53fe97361467cfa0b1a5f1d770187d.jpg)
最近搜集到慕课网视频,视频内容涵盖 Python、Java、PHP、前端、小程序、算法、架构、数据库等等!关注本公众号,后台回复「慕课网」即可获取下载地址。
相关文章推荐
- Python实现App自动签到领取积分功能
- Python脚本实现虾米网签到功能
- 用Python+Selenium模拟键盘和鼠标操作,实现自动签到
- python实现数值积分的Simpson方法实例分析
- 虾米网签到脚本——Python实现
- 详解签到功能(类似于百度贴吧签到),每周积分排行榜的实现思路 --(已在有赞实现)
- python实现数值积分的Simpson方法实例分析
- Python爬虫实现自动登录、签到
- python3 实现的人人影视网站自动签到
- python3+任务计划实现的人人影视网站自动签到
- python实现街旁自动签到
- DEDECMS会员签到加积分的实现方法
- python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
- python 实现 自动oa 签到签退 发送邮件提醒
- python用quad、dblquad实现一维二维积分范例
- python 实现 某网站自动签到
- Linux下使用crontab命令以及Python脚本实现自动签到
- python3+selenium实现自动签到
- Python超越函数积分运算以及绘图实现