自动登录QQ邮箱,搜索指定时间段的发票邮件,下载PDF附件,处理压缩包,并生成Excel目录
bash
# v8.2 最新版 (推荐)
python invoice_downloader_v82.py 260201 260310
# 输出目录: Z:\OpenClaw\InvoiceOC\260201-260310_v1\
特性说明智能搜索修复 date_lt 参数,支持精确日期范围智能自适应按钮识别自动扫描"下载"/"批量zip下载"等关键词只下载PDF/图片跳过 OFD/XML/CSV保留原文件名不添加时间戳前缀重名处理MD5内容比对,不同加版本号ZIP解压后删除自动解压并删除压缩包跳过非发票过滤堂食明细、小票等SSL自动降级SSL失败时自动禁用验证重试Excel详细报告成功/跳过/失败/异常分表显示
发票类型处理方式直接附件HTTP直接下载诺诺网浏览器点击下载按钮税务平台(预览)浏览器点击PDF下载税务平台(直链)HTTP直接下载飒拉商业筛选PDF链接+HTTP下载中海油/批量下载识别"批量zip下载"按钮通行费发票ZIP解压
text
260201-260310_vX/
├── attachments/ # 发票文件
├── 发票目录.xlsx # Excel报告
│ ├── 全部记录 # 所有邮件处理记录
│ ├── 成功 # 成功下载
│ ├── 跳过_重复 # 内容重复跳过的
│ ├── 失败 # 下载失败
│ └── 处理异常 # 处理异常
└── detailed_results.json # 详细JSON日志
⚠️ Playwright 浏览器必须串行!多线程要加 Lock!
greenlet.error: cannot switch to a different thread — 这是多线程并行 Playwright 导致。解决方案:单浏览器串行,通过 threading.Lock() 保证线程安全。
InvoiceAnalyzerWithLLM 在以下情况自动调用 MiniMax LLM:
条件说明confidence < 0.7硬编码置信度不足invoice_type == "unknown"平台不在已知列表中
策略:硬编码优先 → 置信度不足或类型未知 → LLM fallback → 取置信度更高者
bash
# 设置环境变量(Windows PowerShell)
$env:MINIMAX_API_KEY = "your-api-key-here"
# 或在 Python 中直接传入
from invoice_analyzer_v9 import InvoiceAnalyzerWithLLM
analyzer = InvoiceAnalyzerWithLLM(api_key="your-api-key-here")
# 不设置 → 纯硬编码模式(v8.2 兼容行为)
bash
cd qq-invoice-downloader
# 语法检查
python -m py_compile invoice_downloader_v82.py
python -m py_compile invoice_analyzer_v9.py
# 导入验证
python -c "from invoice_analyzer_v9 import InvoiceAnalyzerWithLLM; print('import OK')"
# 运行集成测试(使用 unittest,pytest 可选)
python test/test_analyzer.py
# 或用 pytest
python -m pytest test/test_analyzer.py -v
测试类验证点TestKnownPlatforms和运国际/诺诺网/中海油 → 置信度 ≥ 0.7,不触发 LLMTestUnknownPlatformTriggersLLM未知平台 → LLM 被调用并胜出TestLLMWinsWhenBetterLLM 置信度 > 硬编码 → 使用 LLMTestFallbackPreservesBaseResultLLM 异常 → 保留硬编码结果TestNonInvoiceSkip非发票邮件 → unknown 类型