python实现app自动签到器_Python实现App自动签到领取积分功能

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

201809291443421.jpg

201809291443422.jpg

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

登录分析

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

201809291443423.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,就代表登录成功!

签到分析

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

201809291443424.jpg

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

终于签到成功!

201809291443425.jpg

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值