Python实现App自动签到领取积分功能

作者:爱你哟编程 时间:2021-09-16 15:59:59 

要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化。但是发现食行没有页面,只有 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 查看请求获取到,然后记下来。

来源:https://www.cnblogs.com/hahaa/p/9721069.html

标签:python,签到,领积分
0
投稿

猜你喜欢

  • javascript中的throttle和debounce浅析

    2024-05-08 10:10:27
  • Python calendar模块详情

    2023-08-20 23:04:59
  • javascript时间自动刷新实现原理与步骤

    2024-04-30 08:50:50
  • 设计规范有谱么?

    2008-06-06 12:28:00
  • Python实现RLE格式与PNG格式互转

    2021-07-11 18:23:19
  • matplotlib绘制折线图的基本配置(万能模板案例)

    2022-09-06 18:06:17
  • 学习python处理python编码问题

    2022-06-23 22:18:42
  • python实现二级登陆菜单及安装过程

    2023-09-16 16:05:44
  • Python使用win32com实现的模拟浏览器功能示例

    2023-09-21 14:13:13
  • matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析

    2022-08-31 12:17:15
  • 深入研究Application和Session对象

    2008-10-13 08:30:00
  • 这么多的 Oracle 性能工具

    2008-06-04 11:20:00
  • 安装Python和pygame及相应的环境变量配置(图文教程)

    2023-09-05 15:54:42
  • 不得不承认:韩国的 Web 设计很唯美

    2009-05-13 13:26:00
  • python能做哪方面的工作

    2023-02-01 09:48:44
  • 备战618!用Python脚本帮你实现淘宝秒杀

    2022-05-15 04:43:40
  • 浅析Python字符串索引、切片、格式化

    2023-09-26 07:57:20
  • jquery eval解析JSON中的注意点介绍

    2024-04-19 10:01:07
  • 不要用强制方法杀掉python线程

    2021-04-10 09:19:18
  • 在mac下查找python包存放路径site-packages的实现方法

    2023-06-12 21:12:36
  • asp之家 网络编程 m.aspxhome.com