Python 脚本实现 App 自动签到:逆向分析请求与积分获取

Mason
Mason
发布时间:2026-10-13| 4人浏览过
原创

本文详解如何利用 Python 和 Requests 库实现某 App 的自动签到功能。通过浏览器开发者工具抓包分析登录与签到接口,解析请求参数与响应结构,解决密码加密固定值问题,最终编写脚本实现每日自动获取积分,并通过 Crontab 实现定时执行。

实现自动签到最直观的方法是打开应用页面分析网络请求,随后编写脚本模拟这些请求。然而,目标应用“食行”仅提供移动端 App 而没有网页版,这增加了实现难度,意味着必须通过抓包手段来获取接口信息。

接下来的操作步骤相对明确:在电脑端浏览器中打开相关网址,按下 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, 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 抓包查看请求来获取加密后的密码值,并手动记录在代码中,尚未找到动态获取加密密码的方法。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。