飞牛NAS论坛自动签到
这是一个用于FN论坛(club.fnnas.com)的自动签到脚本,可以实现自动登录、检查签到状态、执行签到并记录签到信息。
- 自动登录FN论坛账号
- 检测当前签到状态
- 自动执行签到操作
- 获取并记录签到信息(最近签到时间、本月签到天数、连续签到天数等)
- 保存Cookie到本地,下次运行时优先使用Cookie登录
- 验证码自动识别功能,使用百度OCR API识别验证码
- 详细的日志记录
- 完善的错误处理和重试机制
- GitHub Actions 自动运行支持
- IYUU 通知功能,签到成功/失败时自动发送通知
脚本依赖以下Python库:
pip install requests beautifulsoup4脚本现在仅支持通过环境变量配置,不再支持在代码中直接修改配置。
必须设置以下环境变量:
USERNAME: FN论坛用户名(必需)PASSWORD: FN论坛密码(必需)API_KEY: 百度OCR API Key(必需,用于验证码识别)SECRET_KEY: 百度OCR Secret Key(必需,用于验证码识别)
可选环境变量:
IYUU_TOKEN: IYUU 通知令牌(可选,用于接收签到通知)
- 确保已安装所需依赖
- 必须通过环境变量设置配置信息(见下方详细说明)
- 运行脚本
python fnclub_signer.py脚本在启动前会自动检查必需的环境变量,如果未设置,脚本将无法运行。
Windows 系统
方法一:命令行临时设置(CMD)
set USERNAME=your_username
set PASSWORD=your_password
set API_KEY=your_api_key
set SECRET_KEY=your_secret_key
set IYUU_TOKEN=your_iyuu_token
python fnclub_signer.py方法二:PowerShell 临时设置
$env:USERNAME="your_username"
$env:PASSWORD="your_password"
$env:API_KEY="your_api_key"
$env:SECRET_KEY="your_secret_key"
$env:IYUU_TOKEN="your_iyuu_token"
python fnclub_signer.py方法三:系统环境变量(永久设置,推荐)
-
右键点击"此电脑" → 选择"属性"
-
点击"高级系统设置"
-
点击"环境变量"
-
在"用户变量"或"系统变量"中点击"新建"
-
添加以下变量:
必需变量:
- 变量名:
USERNAME,变量值:你的FN论坛用户名 - 变量名:
PASSWORD,变量值:你的FN论坛密码 - 变量名:
API_KEY,变量值:你的百度OCR API Key - 变量名:
SECRET_KEY,变量值:你的百度OCR Secret Key
可选变量:
- 变量名:
IYUU_TOKEN,变量值:你的IYUU Token(用于接收签到通知)
- 变量名:
-
点击"确定"保存
-
重要: 重新打开命令行窗口,使环境变量生效
Linux/Mac 系统
方法一:命令行临时设置
export USERNAME=your_username
export PASSWORD=your_password
export API_KEY=your_api_key
export SECRET_KEY=your_secret_key
export IYUU_TOKEN=your_iyuu_token
python fnclub_signer.py方法二:永久设置(推荐)
编辑 ~/.bashrc(或 ~/.zshrc)文件:
# 使用 nano 编辑器
nano ~/.bashrc
# 或使用 vim 编辑器
vim ~/.bashrc在文件末尾添加:
# FN论坛签到脚本环境变量
export USERNAME="your_username" # 必需:FN论坛用户名
export PASSWORD="your_password" # 必需:FN论坛密码
export API_KEY="your_api_key" # 必需:百度OCR API Key
export SECRET_KEY="your_secret_key" # 必需:百度OCR Secret Key
export IYUU_TOKEN="your_iyuu_token" # 可选:IYUU 通知令牌保存后执行:
source ~/.bashrc方法三:使用 .env 文件(Python 需安装 python-dotenv)
- 在脚本目录创建
.env文件 - 添加以下内容:
USERNAME=your_username
PASSWORD=your_password
API_KEY=your_api_key
SECRET_KEY=your_secret_key
IYUU_TOKEN=your_iyuu_token
- 安装 python-dotenv:
pip install python-dotenv - 修改脚本开头,添加:
from dotenv import load_dotenv; load_dotenv()
注意: 方法三需要修改脚本代码,不推荐使用。建议使用方法一或方法二。
脚本现在仅支持通过环境变量配置,所有配置信息必须通过环境变量设置。
| 变量名 | 说明 | 示例 |
|---|---|---|
USERNAME |
FN论坛用户名 | your_username |
PASSWORD |
FN论坛密码 | your_password |
API_KEY |
百度OCR API Key(用于验证码识别) | your_api_key |
SECRET_KEY |
百度OCR Secret Key(用于验证码识别) | your_secret_key |
| 变量名 | 说明 | 示例 |
|---|---|---|
IYUU_TOKEN |
IYUU 通知令牌(用于接收签到通知) | your_iyuu_token |
DEBUG |
调试模式(设置为 1 启用) |
1 |
脚本在启动前会自动检查必需的环境变量:
- 如果必需的环境变量未设置,脚本会输出错误信息并退出
- 如果可选的环境变量未设置,脚本会给出提示但继续运行
错误示例:
错误:以下必需的环境变量未设置:USERNAME, PASSWORD, API_KEY, SECRET_KEY
请通过环境变量设置这些值后再运行脚本。
详细配置方法请参考 README.md 文件。
- 访问百度AI开放平台注册账号
- 创建文字识别应用,获取API Key和Secret Key
- 必须通过环境变量
API_KEY和SECRET_KEY设置(见上方环境变量配置说明)
- 访问 IYUU 获取通知令牌
- 通过环境变量
IYUU_TOKEN设置(见上方环境变量配置说明) - 脚本会在以下情况发送通知:
- 签到成功时
- 今日已签到(提醒)
- 登录失败时
- 签到失败时
- 其他异常情况
通知接口说明:
- 接口URL:
https://iyuu.cn/{您的IYUU令牌}.send - 请求方式: POST
- Content-Type:
application/x-www-form-urlencoded; charset=UTF-8 - 请求参数:
text: 通知标题(必填)desp: 通知内容(必填)
脚本会在同目录下创建logs文件夹,并生成格式为sign_YYYYMMDD.log的日志文件,记录签到过程中的各种信息。
- 所有HTML响应内容输出时都会添加清晰的分隔符,便于查看
- 分隔符格式:
【描述 - 开始】和【描述 - 结束】 - 使用
=====作为分隔线,便于在日志中搜索
可以通过设置环境变量启用调试模式,获取更详细的日志信息:
# Windows (CMD)
set DEBUG=1
python fnclub_signer.py
# Windows (PowerShell)
$env:DEBUG="1"
python fnclub_signer.py
# Linux/Mac
export DEBUG=1
python fnclub_signer.py使用 GitHub Actions 可以免费自动化运行签到脚本,无需自己的服务器。
- 登录 GitHub 账号
- 访问本仓库:https://github.com/your-username/FN_AQ(替换为实际仓库地址)
- 点击右上角的 "Fork" 按钮
- 选择要 Fork 到的账号/组织
- 等待 Fork 完成
-
进入你 Fork 后的仓库页面
-
点击仓库顶部的 "Settings"(设置)选项卡
-
在左侧菜单中选择 "Secrets and variables" → "Actions"
-
点击右上角的 "New repository secret" 按钮
-
依次添加以下 Secrets:
必填项:
-
Name:
USERNAME- Value: 你的 FN论坛用户名
-
Name:
PASSWORD- Value: 你的 FN论坛密码
可选项(建议配置):
-
Name:
API_KEY- Value: 百度OCR API Key(用于验证码识别,如果论坛需要验证码时使用)
-
Name:
SECRET_KEY- Value: 百度OCR Secret Key(用于验证码识别)
-
Name:
IYUU_TOKEN- Value: IYUU 通知令牌(用于接收签到通知,获取方式见下方"IYUU 通知配置")
-
-
每添加一个 Secret 后,点击 "Add secret" 保存
-
重复以上步骤,直到添加完所有需要的 Secrets
注意:
- Secrets 是加密存储的,不会在代码中显示
- 可以随时在 Settings → Secrets 中修改或删除
- Secret 名称必须完全匹配(区分大小写)
- 在仓库页面,点击顶部的 "Actions" 选项卡
- 如果是第一次使用 Actions,可能会看到提示,点击 "I understand my workflows, go ahead and enable them"(我了解我的工作流,继续启用它们)
- 在左侧菜单中选择 "自动签到" 工作流
- 脚本将每天北京时间 0:00自动运行
- 在 Actions 页面,选择 "自动签到" 工作流
- 点击右侧的 "Run workflow" 按钮
- 选择分支(默认 main 或 master)
- 点击 "Run workflow" 确认
- 等待工作流运行完成,查看运行日志
- 在 Actions 页面,点击对应的运行记录
- 点击 "运行签到脚本" 步骤可以查看详细日志
- 点击 "上传日志" 步骤可以下载日志文件
- 默认运行时间:每天北京时间 0:00(UTC 16:00)
- 如需修改运行时间,编辑
.github/workflows/auto-sign.yml文件中的 cron 表达式 - Cron 格式:
分 时 日 月 星期(UTC 时间)- 北京时间 0:00 = UTC 16:00(前一天)=
0 16 * * * - 北京时间 8:00 = UTC 0:00 =
0 0 * * * - 北京时间 12:00 = UTC 4:00 =
0 4 * * *
- 北京时间 0:00 = UTC 16:00(前一天)=
可以通过Linux的crontab设置定时任务,实现每天自动签到:
# 编辑crontab
crontab -e
# 添加以下内容,设置每天上午8:30执行签到脚本
30 8 * * * cd /path/to/script && python fnclub_signer.py对于Windows系统,可以使用计划任务:
- 打开任务计划程序
- 创建基本任务
- 设置每天运行,并指定时间
- 选择启动程序,并设置为python脚本路径
- 请勿频繁运行脚本,以免对网站造成不必要的压力
- 首次运行时会创建Cookie文件,之后会优先使用Cookie登录
- 如Cookie失效,脚本会自动尝试使用账号密码重新登录
- 验证码识别功能需要配置有效的百度OCR API密钥才能使用
- 脚本内置了重试机制,可以自动处理临时性错误
本脚本仅供学习交流使用,请勿用于任何商业用途。使用本脚本产生的任何后果由使用者自行承担。
- 添加了完善的重试机制,提高脚本稳定性
- 优化了百度OCR API的集成,实现验证码自动识别
- 添加了access_token缓存功能,减少API调用次数
- 改进了错误处理和日志记录
- 添加了调试模式支持
- 优化了登录表单的查找逻辑,支持多种表单ID格式
- 调整了登录请求参数,确保正确提交用户名和密码
- 添加了登录状态的准确检测
- 优化了签到信息区域的查找方式
- 正确解析并记录签到相关信息
- 添加了详细的日志记录
- 实现了Cookie的保存和加载功能
- 添加了Cookie有效性检查
- 在Cookie失效时自动使用账号密码重新登录
- 添加了验证码检测功能
- 完善了错误日志记录
- 优化了异常情况的处理流程
- 在Config类中添加了百度OCR API相关配置
- 实现了recognize_captcha方法,用于下载验证码图片、转换为Base64编码并调用API识别
- 添加了验证码文本清理功能,提高识别准确率
- 该方法会返回识别出的验证码文本或在失败时返回None
- 修改了login方法,增加了验证码检测和处理逻辑
- 当检测到需要验证码时,会自动获取验证码图片URL
- 调用recognize_captcha方法识别验证码
- 将识别结果添加到登录表单数据中
- 增加了验证码错误的检测和处理
- 优化了check_login_status函数,使用多种方法综合判断登录状态
- 检查登录链接是否存在
- 检查页面中是否包含用户名
- 检查是否有个人中心链接
- 更新了save_cookies函数,保存完整的Cookie信息,包括域名、路径、过期时间等
- 优化了load_cookies函数,使其能够处理新旧两种格式的Cookie文件,确保向后兼容性
- 添加了
.github/workflows/auto-sign.yml工作流文件 - 支持定时自动运行(每天 UTC 0:00,北京时间 8:00)
- 支持手动触发运行
- 自动上传日志文件作为 Artifact
- 集成了 IYUU 通知服务
- 在签到成功、失败、异常等情况下自动发送通知
- 支持通过环境变量
IYUU_TOKEN配置通知令牌 - 通知内容包含详细的签到信息和状态