# 发票RPA功能 ## 简介 本功能为verify-invoice-default技能添加了RPA(机器人流程自动化)能力,可以自动从网站提取发票信息,用于后续的票据合规预审。 ## 功能特性 - 🤖 **自动登录**:支持用户名密码自动登录 - 🌐 **页面导航**:自动导航到发票预检页面 - 📊 **信息提取**:提取发票列表和详细信息 - 🎭 **拟人操作**:模拟真实用户操作,避免被检测 - ⚠️ **错误处理**:处理登录超时、验证码等异常情况 ## 快速开始 ### 1. 获取浏览器配置目录 ```bash # 确保已安装account-manager cd account-manager python scripts/main.py ensure-web --platform sandbox-jc2009 ``` ### 2. 测试连接 ```bash cd verify-invoice-default/verify-invoice-default python scripts/main.py test-rpa-connection \ --username "15527406659" \ --password "qwer1234" \ --profile-dir "从account-manager获取的profile_dir" ``` ### 3. 提取发票信息 ```bash # 基本提取 python scripts/main.py extract-invoices \ --username "15527406659" \ --password "qwer1234" \ --profile-dir "从account-manager获取的profile_dir" # 详细信息提取 python scripts/main.py extract-invoices \ --username "15527406659" \ --password "qwer1234" \ --profile-dir "从account-manager获取的profile_dir" \ --detail-mode ``` ## 命令行参数 ### extract-invoices | 参数 | 必填 | 说明 | |------|------|------| | `--username` | 是 | 网站用户名 | | `--password` | 是 | 网站密码 | | `--profile-dir` | 是 | 浏览器配置目录 | | `--headless` | 否 | 无头模式(生产不建议) | | `--detail-mode` | 否 | 提取详细信息 | ### test-rpa-connection | 参数 | 必填 | 说明 | |------|------|------| | `--username` | 是 | 网站用户名 | | `--password` | 是 | 网站密码 | | `--profile-dir` | 是 | 浏览器配置目录 | ## 输出格式 ### 成功输出 ```json { "total_count": 10, "invoices": [ { "row_index": 0, "row_text": "发票信息...", "invoice_number": "12345678", "amount": "100.00" } ], "extraction_complete": true } ``` ### 失败输出 ```json { "success": false, "error": "错误信息", "stage": "错误发生阶段" } ``` ## 文件结构 ``` verify-invoice-default/verify-invoice-default/ ├── scripts/ │ ├── service/ │ │ ├── rpa/ │ │ │ ├── __init__.py # RPA模块初始化 │ │ │ ├── browser_session.py # 浏览器会话管理 │ │ │ ├── login_handler.py # 登录处理 │ │ │ ├── invoice_extractor.py # 发票信息提取 │ │ │ └── invoice_rpa.py # RPA主流程 │ │ └── rpa_invoice_service.py # RPA数据服务 │ ├── db/ │ │ ├── connection.py # 数据库连接 │ │ └── rpa_invoice_schema.py # RPA数据表结构 │ └── cli/ │ └── app.py # CLI入口(已更新) ├── test_rpa.py # 测试脚本 ├── demo_rpa.py # 演示脚本 ├── RPA_README.md # 本文件 ├── RPA_USAGE.md # 详细使用说明 └── PLATFORM_USAGE.md # 平台内使用指南 ``` ## 常见问题 ### 1. 浏览器启动失败 **错误**:`ERROR:MISSING_BROWSER 浏览器启动失败` **解决**: - 确保已安装Chrome或Edge浏览器 - 检查`profile_dir`是否有效 - 确保没有其他浏览器进程占用配置目录 ### 2. 登录失败 **错误**:`ERROR:LOGIN_TIMEOUT 登录失败或超时` **解决**: - 检查用户名和密码是否正确 - 确保网络连接正常 - 检查是否有验证码需要人工处理 ### 3. 页面加载失败 **错误**:`导航到发票页面失败` **解决**: - 检查网络连接 - 确保已登录 - 检查目标URL是否正确 ## 技术细节 ### 架构设计 RPA功能采用分层架构设计: 1. **浏览器会话层**:管理浏览器的启动、配置和关闭 2. **登录处理层**:处理网站登录流程 3. **信息提取层**:从页面提取发票信息 4. **主流程层**:协调各层完成RPA任务 ### 安全考虑 1. **合规性**:仅用于授权范围内的正常界面操作 2. **频率控制**:避免频繁请求,防止被网站限制 3. **人工兜底**:验证码、人脸等必须等待人工完成 4. **数据安全**:不要在日志中暴露敏感信息 ### 扩展性 RPA功能设计为可扩展的: 1. **支持新网站**:只需修改URL和选择器 2. **支持新字段**:在提取器中添加新的选择器 3. **支持新操作**:可以添加点击、填写等操作 ## 开发指南 ### 添加新的提取字段 1. 在`invoice_extractor.py`的`INVOICE_SELECTORS`中添加选择器 2. 在`_extract_invoice_from_row`函数中添加提取逻辑 3. 更新`format_invoice_data`函数的输出格式 ### 修改登录流程 1. 在`login_handler.py`的`LOGIN_SELECTORS`中更新选择器 2. 修改`_try_auto_login`函数的登录逻辑 3. 更新`_is_logged_in`函数的检测逻辑 ### 添加新的RPA功能 1. 在`service/rpa/`目录下创建新模块 2. 在`__init__.py`中导出新功能 3. 在`task_service.py`中添加对应的命令函数 4. 在`cli/app.py`中添加命令行参数 ## 更新日志 ### v1.0.0 (2026-09-14) - 初始版本 - 实现基本登录和页面导航 - 实现发票信息提取 - 集成到现有CLI系统 ## 许可证 本项目遵循与verify-invoice-default技能相同的许可证。