马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、前置准备
===========
1. 确保青龙面板已正常运行 (版本建议 2.10+)
2. 确保已安装 Python3 依赖管理功能
3. 登录 pan1.me 网站并获取有效 Cookie
二、获取 Cookie 步骤
===================
1. 浏览器登录 https://pan1.me
2. 按 F12 打开开发者工具 → 切换到 Network (网络) 标签
3. 在页面上找到并点击"签到"按钮
4. 在 Network 列表中找到名为 my-sign.htm 的请求
5. 点击该请求 → Headers → 找到 Request Headers 中的 Cookie 字段
6. 复制完整 Cookie 字符串 (包含 bbs_token 和 bbs_sid)
示例格式: bbs_token=xxx; bbs_sid=yyy; _clck=zzz
三、青龙面板部署步骤
===================
步骤1: 上传脚本
--------------
1. 进入青龙面板 → 脚本管理
2. 点击右上角"+"号 → 新建脚本
3. 文件名填写: pan1_sign.py
4. 将本脚本完整内容粘贴进去
5. 点击保存
步骤2: 安装依赖
--------------
1. 进入青龙面板 → 依赖管理 → Python3
2. 点击"新建依赖"
3. 依赖名称填写: requests
4. 点击确定,等待安装完成 (显示已安装即可)
步骤3: 配置环境变量
------------------
- 青龙面板内配置 (推荐):
1. 进入青龙面板 → 环境变量
2. 点击"新建环境变量"
3. 名称: PAN1_COOKIE
4. 值: 刚才复制的完整 Cookie 字符串
5. 点击确定
步骤4: 创建定时任务
-----------------
1. 进入青龙面板 → 定时任务
2. 点击"新建任务"
3. 任务名称: pan1.me签到
4. 命令: task pan1_sign.py
5. 定时规则: 0 9 * * * (每天上午9点执行)
其他可选规则:
- 0 */6 * * * (每6小时执行一次)
- 0 8,20 * * * (每天8点和20点执行)
6. 点击确定
四、测试运行
===========
1. 在定时任务列表中找到刚创建的 pan1.me签到
2. 点击"运行"按钮 (▶️图标)
3. 立即查看运行日志:
- 方式1: 点击任务右侧"日志"按钮
- 方式2: 进入日志管理 → 找到 pan1_sign 开头的日志文件
4. 观察日志输出:
- 看到 ✅ [SUCCESS] 表示签到成功
- 看到 ❌ [ERROR] 表示失败,根据提示排查
五、常见故障排查
===============
问题1: ModuleNotFoundError: No module named 'requests'
解决: 回到步骤2,确认 requests 依赖已正确安装
或手动执行: pip3 install requests
问题2: 未找到 Cookie,请设置环境变量 PAN1_COOKIE
解决: 回到步骤3,检查环境变量名称是否完全匹配 (区分大小写)
检查 Cookie 值是否包含多余空格或换行
问题3: HTTP 错误: 403 或 401
解决: Cookie 已过期,重新登录 pan1.me 获取最新 Cookie
检查 Cookie 字符串是否完整 (特别是 bbs_token 字段)
问题4: 连接错误 / 超时
解决: 检查容器网络是否能访问外网: curl -I https://pan1.me
检查是否开启代理/VPN导致连接异常
问题5: 今日已签到,无需重复操作
解决: 这是正常状态,表示签到成功但今日已签过
建议调整定时规则为每天只执行一次
六、高级配置 (可选)
=================
多账号支持:
如需签到多个账号,修改环境变量为 JSON 格式:
PAN1_COOKIE=[{"name":"账号1","cookie":"xxx"},{"name":"账号2","cookie":"yyy"}]
对接推送通知:
如需微信/钉钉推送结果,在青龙面板配置好通知设置后,
脚本会自动通过 sendNotify.js 发送通知 (无需修改代码)
日志保留策略:
默认保留最近7天日志,可在青龙面板系统设置中调整
七、更新维护
===========
Cookie 有效期通常为 7-30 天,建议:
1. 每周检查一次日志,确认 Cookie 未过期
2. 设置日历提醒,每月更新一次 Cookie
3. 如脚本运行失败且日志显示 403,立即更新 Cookie
【技术支持】
如有问题,检查以下信息:
- 青龙面板版本
- Python 版本: python3 --version
- 依赖列表: pip3 list | grep requests
- 容器网络: curl -v https://pan1.me/?my-sign.htm
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- 青龙面板签到脚本 - pan1.me 网盘签到
- 作者: 蓝小白
- 版本: v1.3
- 功能: 每日自动签到获取积分/奖励
- 环境变量: PAN1_COOKIE - 登录后的 Cookie 字符串
- 定时规则: 0 9 * * * (每天上午9点)
- 依赖安装: pip3 install requests brotli
- """
- import os
- import sys
- import json
- import gzip
- import brotli
- import requests
- from datetime import datetime
- from io import BytesIO
- # ==================== 配置区域 ====================
- SIGN_URL = "https://pan1.me/?my-sign.htm"
- HEADERS = {
- "Accept": "application/json, text/javascript, */*; q=0.01",
- "Accept-Language": "zh-CN,zh;q=0.9",
- "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
- "DNT": "1",
- "Origin": "https://pan1.me",
- "Referer": "https://pan1.me/",
- "Sec-Ch-Ua": '"Not:A-Brand";v="99", "Chromium";v="145"',
- "Sec-Ch-Ua-Mobile": "?0",
- "Sec-Ch-Ua-Platform": '"Windows"',
- "Sec-Fetch-Dest": "empty",
- "Sec-Fetch-Mode": "cors",
- "Sec-Fetch-Site": "same-origin",
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36",
- "X-Requested-With": "XMLHttpRequest"
- # 注意: 不设置 Accept-Encoding,让 requests 自动处理压缩
- }
- # ==================== 日志输出函数 ====================
- def log(message, level="INFO"):
- """统一日志输出,带时间戳和级别"""
- timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- emoji_map = {
- "INFO": "ℹ️",
- "SUCCESS": "✅",
- "WARNING": "⚠️",
- "ERROR": "❌"
- }
- emoji = emoji_map.get(level, "ℹ️")
- print(f"[{timestamp}] {emoji} {message}")
- # ==================== 核心签到函数 ====================
- def pan1_sign(cookie_str):
- """执行 pan1.me 签到请求"""
- headers = HEADERS.copy()
- headers["Cookie"] = cookie_str
-
- try:
- log("🚀 启动 pan1.me 签到任务")
-
- # 使用 requests 自动处理压缩 (需要 brotli 库)
- response = requests.post(
- url=SIGN_URL,
- headers=headers,
- data="",
- timeout=30,
- allow_redirects=False
- )
-
- log(f"📡 HTTP 状态: {response.status_code}")
-
- if response.status_code != 200:
- return {
- "success": False,
- "status": "请求失败",
- "message": f"HTTP 错误码: {response.status_code}",
- "raw": None
- }
-
- # requests 自动解压后的文本
- response_text = response.text
- log(f"📄 响应内容: {response_text[:200]}")
-
- # 尝试解析 JSON
- try:
- result = json.loads(response_text)
- code = result.get("code")
- msg = result.get("message", "未知消息")
-
- if code == "1" or code == 1:
- return {"success": True, "status": "签到成功", "message": msg, "raw": result}
- elif code == "-1" or code == -1:
- return {"success": True, "status": "今日已签", "message": msg, "raw": result}
- else:
- return {"success": False, "status": "签到异常", "message": f"返回码: {code}, 消息: {msg}", "raw": result}
-
- except json.JSONDecodeError:
- # 关键词匹配兜底
- if "已经" in response_text or "已签" in response_text:
- return {"success": True, "status": "今日已签", "message": "检测到已签到", "raw": response_text[:100]}
- elif "成功" in response_text:
- return {"success": True, "status": "签到成功", "message": "检测到成功", "raw": response_text[:100]}
- else:
- return {"success": False, "status": "解析失败", "message": "无法解析响应", "raw": response_text[:200]}
-
- except requests.exceptions.Timeout:
- return {"success": False, "status": "请求超时", "message": "连接超时(30s)", "raw": None}
- except Exception as e:
- return {"success": False, "status": "运行异常", "message": str(e), "raw": None}
- # ==================== 主函数 ====================
- def main():
- """脚本入口"""
- print("="*60)
- log("🎯 pan1.me 网盘签到脚本 v1.3")
- print("="*60)
-
- # 检查 brotli 库
- try:
- import brotli
- except ImportError:
- log("❌ 缺少 brotli 库,正在尝试安装...", "ERROR")
- os.system("pip3 install brotli -q")
- log("请重新运行脚本", "INFO")
- sys.exit(1)
-
- cookie = os.environ.get("PAN1_COOKIE", "")
-
- if not cookie:
- log("❌ 未配置环境变量 PAN1_COOKIE", "ERROR")
- log("💡 获取方式: 浏览器F12 → Network → my-sign.htm → 复制Cookie", "ERROR")
- sys.exit(1)
-
- if "bbs_token" not in cookie:
- log("⚠️ Cookie 缺少 bbs_token 字段", "WARNING")
-
- start_time = datetime.now()
- result = pan1_sign(cookie)
- end_time = datetime.now()
- duration = (end_time - start_time).total_seconds()
-
- print("-"*60)
- if result["status"] == "今日已签":
- log(f"⏰ {result['status']} | {result['message']}", "SUCCESS")
- elif result["success"]:
- log(f"🎉 {result['status']} | {result['message']}", "SUCCESS")
- else:
- log(f"💥 {result['status']} | {result['message']}", "ERROR")
-
- log(f"⏱️ 耗时: {duration:.2f}秒")
- print("="*60)
-
- sys.exit(0)
- if __name__ == "__main__":
- main()
复制代码
|