Python 脚本实现 App 自动签到:逆向分析请求与积分获取
本文详解如何利用 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 抓包查看请求来获取加密后的密码值,并手动记录在代码中,尚未找到动态获取加密密码的方法。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









