# Cookie 自动监控功能需求文档

## 1. 功能概述

本系统提供 Cookie 自动监控、管理和通知功能，确保用户能够持续访问多个网站。

## 2. 详细功能需求

### 2.1 Cookie Cloud 集成

#### 2.1.1 从 Cookie Cloud 获取 Cookie
- **功能描述**: 从 Cookie Cloud 服务器获取并解密 Cookie 数据
- **输入**: Cookie Cloud API 地址、UUID、密码
- **输出**: 按域名分组的 Cookie 数据
- **处理逻辑**:
  1. 发送 GET 请求到 `/get/{uuid}` 接口
  2. 获取加密的 Cookie 数据
  3. 使用 AES 算法解密数据
  4. 解析 JSON 格式的 Cookie 数据
  5. 按域名组织 Cookie

#### 2.1.2 按域名获取 Cookie
- **功能描述**: 获取指定域名的 Cookie
- **输入**: 域名
- **输出**: 该域名的 Cookie 列表
- **处理逻辑**: 遍历所有 Cookie，匹配域名

### 2.2 浏览器控制

#### 2.2.1 创建浏览器实例
- **功能描述**: 创建浏览器实例并启动浏览器
- **输入**: 浏览器类型（chrome/edge）、是否无头模式
- **输出**: 浏览器对象
- **支持浏览器**: Chrome、Edge
- **运行模式**: 有头模式、无头模式

#### 2.2.2 检测登录状态
- **功能描述**: 检测网站是否已登录
- **输入**: 网站 URL、登录检测选择器、成功文本
- **输出**: 是否已登录（True/False）
- **处理逻辑**:
  1. 访问网站
  2. 查找登录检测元素
  3. 检查元素文本是否包含成功文本

#### 2.2.3 使用 Cookie 登录
- **功能描述**: 使用 Cookie 登录网站
- **输入**: 网站 URL、Cookie 列表、登录检测选择器、成功文本
- **输出**: 是否登录成功（True/False）
- **处理逻辑**:
  1. 访问网站
  2. 设置 Cookie
  3. 刷新页面
  4. 检测登录状态

#### 2.2.4 刷新并保存 Cookie
- **功能描述**: 刷新页面并获取最新的 Cookie
- **输入**: 网站 URL
- **输出**: 最新的 Cookie 列表
- **处理逻辑**:
  1. 刷新页面
  2. 获取当前所有 Cookie
  3. 返回 Cookie 列表

### 2.3 Cookie 管理

#### 2.3.1 保存 Cookie
- **功能描述**: 保存指定用户和网站的 Cookie
- **输入**: 用户名、网站名、Cookie 列表
- **输出**: 无
- **存储位置**: `cookies.json` 文件
- **存储格式**:
  ```json
  {
    "用户名": {
      "网站名": [
        {
          "name": "cookie名称",
          "value": "cookie值",
          "domain": "域名",
          "path": "路径",
          "expiry": "过期时间"
        }
      ]
    }
  }
  ```

#### 2.3.2 读取 Cookie
- **功能描述**: 读取指定用户和网站的 Cookie
- **输入**: 用户名、网站名
- **输出**: Cookie 列表
- **数据来源**: `cookies.json` 文件

#### 2.3.3 按域名获取 Cookie
- **功能描述**: 从所有 Cookie 中查找指定域名的 Cookie
- **输入**: 域名
- **输出**: Cookie 列表
- **匹配规则**: 域名完全匹配或包含关系

### 2.4 失败追踪

#### 2.4.1 获取失败次数
- **功能描述**: 获取指定用户和网站的失败次数
- **输入**: 用户名、网站名
- **输出**: 失败次数
- **数据来源**: `state.json` 文件

#### 2.4.2 增加失败次数
- **功能描述**: 增加指定用户和网站的失败次数
- **输入**: 用户名、网站名
- **输出**: 增加后的失败次数
- **存储位置**: `state.json` 文件

#### 2.4.3 重置失败次数
- **功能描述**: 重置指定用户和网站的失败次数
- **输入**: 用户名、网站名
- **输出**: 无

#### 2.4.4 检查并发送通知
- **功能描述**: 检查失败次数，达到阈值时发送通知
- **输入**: 用户名、网站名、最大失败次数、通知器、错误信息
- **输出**: 是否应该停止重试
- **处理逻辑**:
  1. 增加失败次数
  2. 判断是否达到阈值
  3. 达到阈值则发送通知
  4. 发送通知后重置失败计数
  5. 返回是否停止重试

### 2.5 消息通知

#### 2.5.1 发送爱语飞飞通知
- **功能描述**: 通过爱语飞飞 API 发送通知
- **输入**: 令牌、标题、内容
- **输出**: 是否发送成功（True/False）
- **API 地址**: `https://iyuu.cn/{令牌}.send`
- **请求方式**: GET
- **请求参数**:
  - `text`: 通知标题
  - `desp`: 通知内容

### 2.6 主程序流程

#### 2.6.1 读取配置
- **功能描述**: 读取配置文件
- **输入**: 配置文件路径
- **输出**: 配置字典
- **配置文件**: `config.json`

#### 2.6.2 处理用户
- **功能描述**: 处理单个用户的所有网站
- **输入**: 用户配置
- **输出**: 无
- **处理逻辑**:
  1. 初始化 Cookie Cloud 客户端
  2. 初始化爱语飞飞通知器
  3. 初始化浏览器
  4. 遍历该用户的所有网站
  5. 调用处理网站功能
  6. 关闭浏览器

#### 2.6.3 处理网站
- **功能描述**: 处理单个网站的监控
- **输入**: 用户名、网站配置、Cookie Cloud 客户端、通知器、最大失败次数、浏览器
- **输出**: 无
- **处理流程**:
  1. **步骤 1**: 尝试使用本地 Cookie 登录
     - 读取本地 Cookie
     - 登录网站
     - 检测登录状态
     - 登录成功 → 跳转到步骤 3
     - 登录失败 → 跳转到步骤 2
  2. **步骤 2**: 从 Cookie Cloud 获取 Cookie 并重试
     - 从 Cookie Cloud 获取 Cookie
     - 登录网站
     - 检测登录状态
     - 登录成功 → 跳转到步骤 3
     - 登录失败 → 跳转到步骤 4
  3. **步骤 3**: 刷新页面并保存新 Cookie
     - 刷新页面
     - 获取最新 Cookie
     - 保存到 Cookie 文件
     - 重置失败计数
     - 结束
  4. **步骤 4**: 登录失败处理
     - 增加失败计数
     - 判断是否达到阈值
     - 达到阈值 → 发送通知 → 重置计数
     - 未达到阈值 → 记录日志

#### 2.6.4 运行监控
- **功能描述**: 运行整个监控流程
- **输入**: 无
- **输出**: 无
- **处理逻辑**:
  1. 读取配置文件
  2. 遍历所有用户
  3. 处理每个用户
  4. 记录成功和失败数量
  5. 输出日志

## 3. 配置管理功能

### 3.1 配置文件管理
- 支持多用户配置
- 支持多网站配置
- 支持 Cookie Cloud 配置
- 支持通知配置
- 支持浏览器配置

### 3.2 状态文件管理
- 记录失败次数
- 持久化存储
- 自动加载和保存

### 3.3 Cookie 文件管理
- 统一管理所有 Cookie
- 按用户和网站组织
- 持久化存储

## 4. 日志功能

### 4.1 日志记录
- 记录操作开始和结束
- 记录用户和网站处理状态
- 记录登录成功和失败
- 记录 Cookie 更新
- 记录通知发送
- 记录异常信息

### 4.2 日志格式
```
[时间戳] 日志内容
```

## 5. 异常处理

### 5.1 网络异常
- Cookie Cloud 请求失败
- 网站访问失败
- 通知发送失败

### 5.2 浏览器异常
- 浏览器启动失败
- 元素查找失败
- Cookie 设置失败

### 5.3 文件异常
- 配置文件读取失败
- Cookie 文件读写失败
- 状态文件读写失败

### 5.4 加密异常
- Cookie 解密失败
- 密钥生成失败

## 6. 性能要求

- Cookie Cloud 请求超时：30 秒
- 网站访问超时：10 秒
- 元素查找超时：10 秒
- 通知发送超时：10 秒

## 7. 安全要求

- Cookie Cloud 使用端到端加密
- 配置文件包含敏感信息，需妥善保管
- 爱语飞飞令牌不应泄露
- Cookie 数据不应明文传输

## 8. 扩展功能

### 8.1 多用户支持
- 每个用户独立的 Cookie Cloud 配置
- 每个用户独立的爱语飞飞令牌
- 每个用户独立的浏览器配置

### 8.2 多网站支持
- 每个用户可以配置多个网站
- 每个网站独立的登录检测
- 每个网站独立的失败计数

### 8.3 浏览器配置
- 支持 Chrome 和 Edge
- 支持有头和无头模式
- 每个用户可以独立配置浏览器

### 8.4 通知配置
- 支持自定义最大失败次数
- 支持自定义通知内容
- 每个用户独立的通知配置

## 9. 非功能需求

### 9.1 可靠性
- 程序异常不影响下次执行
- 状态文件确保数据不丢失
- 浏览器异常自动关闭

### 9.2 可维护性
- 模块化设计
- 清晰的日志输出
- 详细的错误信息

### 9.3 可扩展性
- 易于添加新用户
- 易于添加新网站
- 易于添加新通知方式

### 9.4 易用性
- 配置文件简单明了
- 日志输出清晰易懂
- 通知信息详细准确