Python 实现「食行生鲜」签到领积分的脚本如何编写?
https://mp.weixin.qq.com/s/M_zbszwC7EWEQLqtRlFnWg
非广告。。。不知道有多少用「食行生鲜」的。。。
用过「食行生鲜」的同学应该知道,每天可以在食行生鲜签到,签到可以领到 20 积分,在购物时可以抵 2 毛钱。钱虽少,但是积少成多,买菜时可以抵扣一两块钱还是不错的。
另外,有大神能看出来登录密码是怎么加密的吗?
页面输入的 000000,登录时加密成了 98a53578bd74e150
Python 实现「食行生鲜」签到领积分的脚本如何编写?
5 回复
js 加密?看代码啊
要写一个食行生鲜的签到脚本,核心就是模拟登录和发送签到请求。这里给你一个使用 requests 库的基础框架。你需要自己找到关键的接口和参数。
import requests
import time
import hashlib
import json
class ShiHXianSigner:
def __init__(self, username, password):
self.username = username
self.password = password
self.session = requests.Session()
# 这里需要设置正确的User-Agent,模拟手机APP
self.headers = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
}
self.session.headers.update(self.headers)
def login(self):
"""模拟登录,获取必要的token或cookie"""
# 1. 首先需要分析登录流程
# 通常需要先访问一个页面获取初始token或验证码
# init_url = "https://api.xxx.com/get_token"
# init_resp = self.session.get(init_url)
# token = init_resp.json().get('token')
# 2. 构造登录参数(密码可能需要加密)
# 这里密码加密方式需要逆向分析APP或网页
# encrypted_pwd = self._encrypt_password(self.password)
login_data = {
'username': self.username,
'password': self.password, # 可能是加密后的
# 'token': token,
# 其他必要参数...
}
# 3. 发送登录请求
# login_url = "https://api.xxx.com/login"
# resp = self.session.post(login_url, data=login_data)
# if resp.json().get('code') == 200:
# print("登录成功")
# return True
# else:
# print(f"登录失败: {resp.text}")
# return False
# 这里是示例,实际需要替换
print(f"模拟登录: 用户名 {self.username}")
# 假设登录成功,保存必要的cookie
return True
def sign(self):
"""执行签到操作"""
# 签到接口地址需要抓包分析
sign_url = "https://api.xxx.com/member/sign" # 示例URL,需要替换
# 通常需要携带时间戳、签名等参数
timestamp = int(time.time() * 1000)
# 签名算法需要逆向分析
# sign_str = self._generate_sign(timestamp)
sign_data = {
'timestamp': timestamp,
# 'sign': sign_str,
# 其他必要参数...
}
try:
# resp = self.session.post(sign_url, data=sign_data)
# result = resp.json()
# 模拟响应
result = {'code': 200, 'msg': '签到成功', 'data': {'points': 10}}
if result.get('code') == 200:
print(f"签到成功! 获得积分: {result.get('data', {}).get('points', 0)}")
return True
else:
print(f"签到失败: {result.get('msg')}")
return False
except Exception as e:
print(f"请求异常: {e}")
return False
def _encrypt_password(self, password):
"""密码加密函数(示例)"""
# 具体加密方式需要逆向分析,可能是MD5、AES或自定义算法
# 例如: return hashlib.md5(password.encode()).hexdigest()
return password
def _generate_sign(self, timestamp):
"""生成请求签名(示例)"""
# 通常是将参数按规则排序后拼接,加上密钥,再做MD5或SHA256
# 例如: sign_str = f"param1=value1¶m2=value2&key=secret{timestamp}"
# return hashlib.md5(sign_str.encode()).hexdigest()
return ""
def main():
# 替换为你的账号密码
USERNAME = "your_phone_number"
PASSWORD = "your_password"
signer = ShiHXianSigner(USERNAME, PASSWORD)
# 1. 登录
if not signer.login():
print("登录失败,程序退出")
return
# 2. 签到
signer.sign()
if __name__ == "__main__":
main()
关键步骤说明:
- 抓包分析:这是最关键的。用Fiddler、Charles或浏览器开发者工具,抓取手机APP或网页的登录和签到请求。找到真实的API接口地址(
login_url,sign_url)。 - 分析参数:仔细看登录和签到POST请求里的所有参数(
Form Data或Payload)。特别注意像sign、token、timestamp这种动态的、用于验证的参数。 - 破解加密:密码和签名(
sign)大概率被加密了。你需要分析JavaScript代码或反编译APP,找到加密算法(常见的是MD5、SHA、AES,或者自定义的)。把对应的加密逻辑用Python实现(代码里的_encrypt_password和_generate_sign函数)。 - 处理Cookie/Session:用
requests.Session()保持会话,登录后的cookie会自动管理。 - 模拟请求头:
User-Agent很重要,设置成对应手机APP的。可能还需要Referer、X-Requested-With等头。
一句话建议: 核心在于逆向分析它的登录和签到接口,搞定参数加密就能写出来。
刚刚看了下密码加密,不是很难,js 加密代码 如下,把末行 get_pwd 第一个参数替换成自己的密码就行了:
https://raw.githubusercontent.com/EngiGu/python-login-with-JS/master/shihangshengxian/pwd.js
多谢了

