可以。思路是:浏览器 console 一键提取 token → 脚本自动从环境变量/文件读取,无需每次输入密码。
有个语法警告,修复一下:
语法检查通过。
download_v2.py 工作流程
一次性设置(1 分钟搞定)
浏览器 F12 → Console → 执行:
copy(localStorage.getItem('auth_token'))
终端保存:
echo 粘贴的token > %USERPROFILE%\.monitor_token
后续日常使用(无需密码)
# token 自动从 ~/.monitor_token 加载,无需输入密码
python scripts/download_v2.py # 列表
python scripts/download_v2.py --task-number TK-20260804-0007 # 按任务过滤
python scripts/download_v2.py --task-number TK-20260804-0007 --all --dir ./out # 一键下载
Token 加载优先级
| 优先级 | 来源 | 说明 |
|---|---|---|
| 1 | --token eyJhbG... |
命令行直接传入 |
| 2 | --token-file /path/file |
指定文件 |
| 3 | MONITOR_TOKEN 环境变量 |
CI/CD 常用 |
| 4 | ~/.monitor_token |
默认缓存文件(自动读取) |
| 5 | 用户名密码登录 | fallback,登录后自动缓存 token |
v1 vs v2 对比
v1 (download_demo.py) |
v2 (download_v2.py) |
|
|---|---|---|
| 依赖 | 零依赖(urllib) | pip install requests |
| 认证方式 | 每次输入密码 | token 自动复用 |
| token 自动缓存 | ❌ | ✅ 登录后自动保存到 ~/.monitor_token |
| 代码量 | ~200 行 | ~180 行 |
v2 自动获取浏览器 token 的可能性分析
v2 的核心问题是:token 存在浏览器 localStorage 里,24 小时过期后必须重新从浏览器获取。要自动化这个"从浏览器取 token"的动作,只有以下几种路子:
| 方案 | 原理 | 可行性 | 问题 |
|---|---|---|---|
| 直接读 Chrome LevelDB | Chrome 的 localStorage 存在 %LocalAppData%\Google\Chrome\User Data\Default\Local Storage\leveldb\ |
⚠️ 勉强可行 | LevelDB 是二进制格式,需要专门解析库;Chrome 运行时锁文件;路径随版本变;key 格式复杂 |
| Puppeteer/Playwright 无头登录 | 脚本启动无头浏览器 → 自动填表登录 → 抓取 token | ✅ 技术上可行 | 需要装 chromium(~300MB);密码得存脚本里;启动慢(3-5秒);大材小用 |
| 书签小工具 (bookmarklet) | 浏览器点一下书签 → 自动复制 token 到剪贴板 | ✅ 最简单 | 仍需手动点一下,但比打开控制台方便很多 |
| curl 直接调登录 API | curl -X POST /api/auth/login → 解析 token → 写入文件 |
✅ 轻量可行 | 需要密码存明文(或环境变量) |
结论:v2 架构下,没有一个方案是"既免密又全自动"的。 根本原因是 v2 只有短期 access_token,没有 refresh_token 这个"长期凭证"。
如果坚持 v2 不改代码,最佳实践是"方案 4"(API 登录):
REM auto_login.cmd — 每天用 curl 登录拿 token
@echo off
set /p PWD=<%USERPROFILE%\.monitor_pass
curl -s -X POST http://localhost:3001/api/auth/login ^
-H "Content-Type: application/json" ^
-d "{\"username\":\"admin\",\"password\":\"%PWD%\"}" ^
| python -c "import sys,json; print(json.load(sys.stdin)['token'])" ^
> %USERPROFILE%\.monitor_token
但问题又绕回来了——你得把密码明文存到文件里,安全性比 refresh token 方案差得多:
| 安全维度 | v2 + 存密码 | v3 refresh token |
|---|---|---|
| 泄露后果 | 密码泄露 → 永久控制 | token 泄露 → 30天有效 |
| 可撤销性 | 得改密码 | 服务端可轮换 |
| 日志痕迹 | 密码出现在 curl 命令行 | token 只在 header 里 |
| 密码修改 | 需同步更新脚本 | 不受影响 |
最实用的 v2 折中:bookmarklet
如果你真的不想改任何代码,在浏览器书签栏加一个,点击就能自动复制 token:
javascript:(function(){const t=localStorage.getItem('auth_token');if(t){navigator.clipboard.writeText(t);alert('Token 已复制('+t.length+'字符)');}else{alert('未找到 token,请先登录');}})();
使用方式:在浏览器新建书签,URL 粘贴上面那行。每次 token 过期后:
- 打开平台页面(已登录状态)
- 点击这个书签 → token 自动到剪贴板
- 终端执行
echo 粘贴 > %USERPROFILE%\.monitor_token
比 F12 → Console → 粘贴命令快 3 倍,但仍然要每天手动操作一次。
最终建议
v2 的"从浏览器拿 token"这个模式,架构上就不适合全自动。浏览器 localStorage 是 sandbox 环境,外部程序本来就不该直接访问。如果真的需要全自动免密,v3 的 refresh token 是最小成本的正确解法——改 4 个文件,永久解决。
浙公网安备 33010602011771号