你好呀!👋 手里有一台 24 小时运行的 Linux 服务器,却还在每天手动打开网页点“签到”?这不是浪费资源嘛!😤
今天我们就来硬核一把,用 Python 打造一个轻量级、多账户、带飞书美观推送的自动签到神器!不需要安装笨重的浏览器,不需要图形界面,甚至能在 1 核 512M 的小鸡上跑得飞起!✈️
🛠️ 原理揭秘:为什么不用 Selenium?
很多教程教你用 Selenium 模拟浏览器,但它太吃内存了,配置 Headless 模式也容易报错。
我们的方案是 “模拟 API 请求”:直接像黑客一样构造 HTTP 数据包发送给服务器。
✅ 资源占用极低 (几 MB 内存)
✅ 速度极快 (秒级完成)
✅ 极度稳定 (不受网页加载速度影响)
唯一的小难点是网站用了 FingerprintJS(浏览器指纹),不过别怕,我有 “一次抓取,永久使用” 的绝招!😎
🕵️ 第一步:获取关键情报 (Fingerprint)
这是最关键的一步!因为网站登录后会瞬间跳转,普通的抓包看都看不清。我们需要一点小技巧。
🚨 注意:请严格按照以下顺序操作,顺序错了就抓不到了!
打开你的电脑浏览器(Chrome/Edge),进入登录页面。
按 F12 召唤开发者工具,切换到 Network (网络) 面板。
🔴 关键设置 A:确保左上角的圆点是红色的(正在录制)。
✅ 关键设置 B:必须勾选 "Preserve log" (保留日志)。
这一步是为了防止页面跳转后,刚刚的登录请求记录被清空。
🔍 筛选:点击上方的 "Fetch/XHR"(只看数据,不看图片)。
执行:输入账号密码,点击 “登录”。
捕获:此时列表中会出现一个名为
login(或auth/login) 的请求。点击它,在右侧 Payload 里找到fingerprint,复制那串长长的字符备用。
⚙️ 第二步:准备配置文件
为了安全,我们把账号密码和代码分开。在服务器上新建一个文件夹,比如 /root/scripts/neworld/。
创建 config.json,直接抄作业:
{
"url_base": "https://neworld.cloud",
"feishu": {
"enable": true,
"webhook": "https://open.feishu.cn/open-apis/bot/v2/hook/你的Webhook地址",
"secret": "你的加签密钥(在飞书机器人安全设置里看)"
},
"accounts": [
{
"email": "user1@gmail.com",
"password": "mypassword123",
"fingerprint": "这里填刚刚抓到的那一串字符_1",
"note": "我的主力号"
},
{
"email": "user2@qq.com",
"password": "mypassword456",
"fingerprint": "这里填刚刚抓到的那一串字符_2",
"note": "我的小号"
}
]
}💡 提示:如果有多个账号,直接在
accounts列表里复制粘贴大括号块即可,支持无限多开!
🐍 第三步:部署核心脚本
接下来是核心代码。这个脚本集成了 HmacSHA256 签名校验、多线程会话隔离 以及 精美的飞书卡片生成。
确保安装了依赖:
Bash
pip install requests创建 auto_sign.py,粘贴以下内容:
Python
# -*- coding: utf-8 -*-
import requests, json, logging, time, random, os, hashlib, base64, hmac
# ==================== 基础配置 ====================
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
CONFIG_FILE = os.path.join(BASE_DIR, 'config.json')
LOG_FILE = os.path.join(BASE_DIR, 'sign_task.log')
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename=LOG_FILE, filemode='a')
console = logging.StreamHandler()
logging.getLogger('').addHandler(console)
# ==================== 飞书签名算法 ====================
def gen_sign(timestamp, secret):
string_to_sign = '{}\n{}'.format(timestamp, secret)
hmac_code = hmac.new(string_to_sign.encode("utf-8"), digestmod=hashlib.sha256).digest()
return base64.b64encode(hmac_code).decode('utf-8')
# ==================== 发送飞书美化卡片 ====================
def send_feishu_card(config, results):
feishu = config.get('feishu', {})
if not feishu.get('enable'): return
timestamp = str(int(time.time()))
sign = gen_sign(timestamp, feishu['secret']) if feishu.get('secret') else ""
# 构建卡片元素
elements = [{"tag": "div", "text": {"tag": "lark_md", "content": f"📅 **执行时间**: {time.strftime('%Y-%m-%d %H:%M:%S')}"}}, {"tag": "hr"}]
for res in results:
status_icon = "🟢" if res['login'] else "🔴"
# 结果图标逻辑:成功🎉 / 重复🔁 / 失败📝
msg_icon = "🎉" if "成功" in res['msg'] else ("🔁" if "已经" in res['msg'] else "📝")
elements.append({
"tag": "div",
"text": {"tag": "lark_md", "content": f"👤 **{res['name']}**\n{status_icon} {'登录成功' if res['login'] else '登录失败'} | {msg_icon} {res['msg']}"}
})
elements.append({"tag": "hr"})
elements.append({"tag": "note", "elements": [{"tag": "plain_text", "content": "来自 Linux 最强自动签到脚本"}]})
payload = {
"timestamp": timestamp, "sign": sign, "msg_type": "interactive",
"card": {"config": {"wide_screen_mode": True}, "header": {"template": "blue", "title": {"content": "☁️ 新界云 自动签到报告", "tag": "plain_text"}}, "elements": elements}
}
try:
requests.post(feishu['webhook'], json=payload)
logging.info("🔔 飞书通知已发送")
except Exception as e:
logging.error(f"🔔 发送失败: {e}")
# ==================== 机器人逻辑 ====================
class Bot:
def __init__(self, acc, url):
self.acc, self.url = acc, url
self.sess = requests.Session()
self.sess.headers.update({"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/115.0.0.0 Safari/537.36", "Content-Type": "application/json", "Origin": url, "Referer": f"{url}/auth/login"})
def run(self):
res = {"name": self.acc.get('note', self.acc['email']), "login": False, "msg": "未执行"}
try:
# 1. 登录
logging.info(f"[{res['name']}] 正在登录...")
login_resp = self.sess.post(f"{self.url}/auth/login", data=json.dumps({
"email": self.acc['email'], "passwd": self.acc['password'], "fingerprint": self.acc['fingerprint'], "code": "", "remember_me": "false"
}), timeout=15).json()
if login_resp.get("ret") == 1:
res['login'] = True
time.sleep(random.uniform(2, 5)) # 模拟人类延迟
# 2. 签到
self.sess.headers.update({"Referer": f"{self.url}/user"})
check_resp = self.sess.post(f"{self.url}/user/checkin", timeout=15).json()
res['msg'] = check_resp.get('msg', '未知返回')
logging.info(f"[{res['name']}] ✅ 结果: {res['msg']}")
else:
res['msg'] = f"登录失败: {login_resp.get('msg')}"
logging.error(f"[{res['name']}] ❌ {res['msg']}")
except Exception as e:
res['msg'] = f"异常: {str(e)}"
logging.error(f"[{res['name']}] 💥 {res['msg']}")
return res
def main():
logging.info("🚀 任务启动")
if not os.path.exists(CONFIG_FILE): return logging.error("找不到配置文件")
with open(CONFIG_FILE, 'r', encoding='utf-8') as f: config = json.load(f)
results = []
for i, acc in enumerate(config.get('accounts', [])):
results.append(Bot(acc, config['url_base']).run())
if i < len(config['accounts']) - 1: time.sleep(random.randint(5, 10)) # 多号间隔防止封IP
send_feishu_card(config, results)
logging.info("🏁 任务结束")
if __name__ == "__main__":
main()⏰ 第四步:设置自动化 (Crontab)
最后,我们让它每天早上 8:30 自动干活。
输入 crontab -e,添加这一行:
# 每天 08:30 运行
30 8 * * * /usr/bin/python3 /root/scripts/neworld/auto_sign.py🎉 效果展示
每天早上,你的飞书就会收到这样一张赏心悦目的卡片:
☁️ 新界云 自动签到报告
📅 执行时间: 2026-01-23 08:30:15
──────────────────────
👤 我的主力号
🟢 登录成功 | 🎉 签到成功 (获得 500MB)
──────────────────────
👤 备用号
🟢 登录成功 | 🔁 今天已经签到过了
──────────────────────
来自 Linux 最强自动签到脚本
❓ 常见问题 (FAQ)
Q: Fingerprint 会过期吗?
A: 基本不会。 只要你的那台电脑硬件和浏览器不升级,生成的指纹就是固定的。我实测用了一年都没变过。
Q: 为什么日志提示“环境异常”?
A: 极少数情况发生。可能是你的 User-Agent (脚本里写的) 和你抓取的 Fingerprint (浏览器生成的) 匹配度太低。建议把脚本里的 User-Agent 换成你自己浏览器抓包看到的那个。
Q: 配置文件安全吗?
A: 建议执行 chmod 600 config.json,这样只有你能看,防止其他用户偷窥密码。
搞定!现在你可以去喝杯咖啡,让服务器自己去打工吧!☕️ 如果觉得好用,记得点个赞哦!💖