飞牛OS的相册十分好用,我是远程挂载某NAS上的目录,奈何美中不足的是无法自动扫描和刷新,浏览论坛官方好像也没有相关计划,只能自己想办法了。
刚开始准备使用API,但是签名机制没有研究出来且二次登录不好弄,又不想继续耗费太多精力,干脆使用简单粗暴的selenium模拟登录点击。
仓库地址:https://github.com/lichong1426/fnos_scan_photos/tree/master
功能介绍
自动触发扫描相册
- 配置文件写入参数
- 支持2FA登录
- 支持自定义触发时间(当前只支持每天触发)
- 基于FnOS 0.9.22验证
- 使用selenium获取页面元素路径,如果页面发生变化可能导致功能不可能,需要重新配置元素路径。
配置文件
config.json
{ "host":"http://192.168.xxx.xxx:5666", //Fnos地址或域名 "users":[ { "username": "usera", "password": "password" }, { "username": "userb", "password": "password", "secret_key": "7G2JSOSWJFFADFDFCVRVDAS75B6M6EE" //2FA密钥,没有可以不写会跳过 } ], "timer":["02:00","07:00","12:00","19:00","21:00"] //定时时间,24小时制,每天执行。}
[!warning]
配置文件为明文用户名密码和密钥,务必存放在安全的地方
环境部署
理论上可以部署在任何环境,可自行选择。
我选择直接部署在fnos内。
[!warning]
再次提示:玩机有风险,搞机需谨慎
- ssh登录后创建目录
su rootcd /usr/local/srcmkdir fnos_scan_photoscd fnos_scan_photos
将 config.json
和 fnscanpotos.py
放入,并赋予py可执行权限
- 安装依赖
避免污染系统 Python 环境
python3 -m venv myenvsource myenv/bin/activatepip3 install selenium webdriver-manager schedule pyotpdeactivate #使用完后退出
myenv/bin/python -V
查看版本
修改 fnscanpotos.py
头为 myenv/bin/python
的绝对路径
- 安装chrome及chromedriver
# 进入临时目录cd /tmp# 下载最新版 Google Chrome(稳定版)wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.debapt update && apt install ./google-chrome-stable_current_amd64.deb
查看版本号
google-chrome --versionGoogle Chrome 139.0.7258.154
前往 https://googlechromelabs.github.io/chrome-for-testing/ 选择对应平台的chromedriver
wget https://storage.googleapis.com/chrome-for-testing-public/139.0.7258.154/linux64/chromedriver-linux64.zipunzip chromedriver-linux64.zipmv chromedriver-linux64/chromedriver /usr/local/bin/chromedriver# 添加执行权限sudo chmod +x /usr/local/bin/chromedriver
- 测试环境
直接运行fnscanpotos.py,出现如下打印,并登录页面查看确实触发了,则说明环境没有问题。
注册定时任务: ['08:59', '19:00', '02:00']已添加: 每天 08:59 执行扫描已添加: 每天 19:00 执行扫描已添加: 每天 02:00 执行扫描当前时间: 2025-08-29 08:58:24等待执行定时任务定时任务在 2025-08-29 08:59:24 执行了!开始登录: usera检测到2FA验证码输入框输入2FA验证码: 819113已输入2FA验证码2FA验证码已登录成功开始点击相册已切换到新窗口: http://192.168.xx.xx:5666/p进入相册,寻找设置按钮已点击设置按钮寻找扫描全部按钮点击扫描全部按钮完成浏览器已关闭,资源已释放
- 配置systemd启动
vim /etc/systemd/system/scanphotos.service
[Unit]Description=scanphotos serviceAfter=network.target[Service]Type=simpleExecStart=/usr/local/src/fnos_scan_photos/fnscanpotos.pyUser=rootStandardOutput=journalStandardError=journalEnvironment=PYTHONUNBUFFERED=1[Install]WantedBy=multi-user.target
没有配置失败自动重启,如果发现哪天相册没有自动扫描了建议自行排查。
让创建的服务生效,更新systemd目录
systemctl daemon-reload
开启服务
systemctl enable scanphotos.service
启动服务
systemctl start scanphotos.service
查看服务状态
systemctl status scanphotos.service
如下则已经启动
systemctl status scanphotos.service● scanphotos.service - scanphotos service Loaded: loaded (/etc/systemd/system/scanphotos.service; enabled; preset: enabled) Active: active (running) since Fri 2025-08-29 09:50:43 CST; 4s ago Main PID: 54914 (fnscanpotos.py) Tasks: 1 (limit: 4562) Memory: 18.8M CPU: 628ms CGroup: /system.slice/scanphotos.service **─54914 /usr/local/src/fnos_scan_photos/myenv/bin/python /usr/local/src/fnos_scan_photos/fnscanpotos.pyAug 29 09:50:43 FnOS systemd[1]: Started scanphotos.service - scanphotos service.Aug 29 09:50:44 FnOS fnscanpotos.py[54914]: 注册定时任务: ['02:00', '13:00', '19:00']Aug 29 09:50:44 FnOS fnscanpotos.py[54914]: 已添加: 每天 02:00 执行扫描Aug 29 09:50:44 FnOS fnscanpotos.py[54914]: 已添加: 每天 13:00 执行扫描Aug 29 09:50:44 FnOS fnscanpotos.py[54914]: 已添加: 每天 19:00 执行扫描Aug 29 09:50:44 FnOS fnscanpotos.py[54914]: 当前时间: 2025-08-29 09:50:44Aug 29 09:50:44 FnOS fnscanpotos.py[54914]: 等待执行定时任务
如果修改了配置文件,则需要重启服务
systemctl restart scanphotos.service
已知问题:
- 某些机器环境上概率发生寻找扫描全部按钮失败,因为一天设置了多个定时任务,概率失败影响不大,故不再排查,凑合用。
其他说明(叠buff)
本小程序完全是出于方便自用的角度编写,所以不提供后续维护,随机更新。还是更希望官方能够出定时刷新的功能。
如果飞牛或其它组织联系删除会立即删除。