43 lines
1.3 KiB
Markdown
43 lines
1.3 KiB
Markdown
# DESIGN - 报表自动化架构设计
|
|
|
|
## 1. 整体架构
|
|
```mermaid
|
|
graph TD
|
|
A[Main Script] --> B[Browser Manager]
|
|
A --> C[Secsion Service]
|
|
A --> D[Upload Service]
|
|
B --> E[Playwright Context]
|
|
C --> E
|
|
D --> E
|
|
```
|
|
|
|
## 2. 核心组件说明
|
|
- **Browser Manager**: 初始化 Playwright,配置 `ignore_https_errors`,管理浏览器生命周期。
|
|
- **Secsion Service**:
|
|
- `login()`: 处理角色选择、账号密码输入、登录按钮点击。
|
|
- `export_report(date)`: 处理日期填写、点击导出、捕获下载流。
|
|
- **Upload Service**:
|
|
- `upload_file(file_path)`: 处理 94kan.cn 的文件上传。
|
|
|
|
## 3. 数据流向
|
|
1. 启动浏览器 -> 建立 Context。
|
|
2. `Secsion Service` 登录 -> 获取报表下载对象。
|
|
3. 保存文件至 `temp_downloads/` 目录。
|
|
4. `Upload Service` 读取该文件并上传。
|
|
5. 关闭浏览器。
|
|
|
|
## 4. 异常处理策略
|
|
- **超时处理**: 设置全局等待超时(30s)。
|
|
- **重试机制**: 对关键点击动作进行简单重试。
|
|
- **日志记录**: 使用 Python `logging` 模块记录每一步状态。
|
|
|
|
## 5. 接口契约 (伪代码)
|
|
```python
|
|
class SecsionService:
|
|
def login(page, username, password): ...
|
|
def export_report(page, date_str) -> str: ... # returns file path
|
|
|
|
class UploadService:
|
|
def upload(page, file_path): ...
|
|
```
|