在这里插入图片描述

1. 系统概述

1.1 系统定位

该自动化脚本系统是专为四川智慧学习平台设计的学习自动化解决方案,通过模拟用户操作实现课程的自动学习、视频播放和进度跟踪等功能,大幅提升学习效率。

1.2 技术栈

  • 核心语言:Python 3.x
  • 自动化框架:Selenium WebDriver
  • 浏览器支持:Chrome
  • 配置管理:JSON
  • 日志系统:Python logging 模块

1.3 主要功能

  • ✅ 多账号管理与切换
  • ✅ 自动登录学习平台
  • ✅ 课程类型与列表获取
  • ✅ 视频自动播放与监测
  • ✅ 智能重试与错误处理
  • ✅ 进度可视化显示
  • ✅ 反检测隐身模式
  • ✅ 浏览器状态恢复

2. 系统架构设计

2.1 分层架构

┌───────────────────────────────────────────────────────────┐
│                     用户界面层                             │
│  ┌─────────────────────────────────────────────────────┐  │
│  │                  进度展示模块                        │  │
│  │                 (ProgressBar)                       │  │
│  └─────────────────────────────────────────────────────┘  │
├───────────────────────────────────────────────────────────┤
│                     应用逻辑层                             │
│  ┌─────────────────────────────────────────────────────┐  │
│  │                    核心自动化系统                    │  │
│  │             (CourseAutomationSystem)                │  │
│  ├─────────────────────────────────────────────────────┤  │
│  │                     日志记录器                       │  │
│  │                (EnhancedLogger)                     │  │
│  ├─────────────────────────────────────────────────────┤  │
│  │                     重试处理器                       │  │
│  │                  (RetryHandler)                     │  │
│  └─────────────────────────────────────────────────────┘  │
├───────────────────────────────────────────────────────────┤
│                     数据服务层                             │
│  ┌─────────────────────────────────────────────────────┐  │
│  │                     配置管理器                       │  │
│  │                  (ConfigManager)                    │  │
│  ├─────────────────────────────────────────────────────┤  │
│  │                    浏览器驱动                        │  │
│  │              (Selenium WebDriver)                   │  │
│  └─────────────────────────────────────────────────────┘  │
├───────────────────────────────────────────────────────────┤
│                     外部资源层                             │
│  ┌─────────────────────────────────────────────────────┐  │
│  │                  学习平台网站                        │  │
│  │                (SmartEducation Portal)              │  │
│  └─────────────────────────────────────────────────────┘  │
└───────────────────────────────────────────────────────────┘

2.2 核心模块关系图

ConfigManager ──提供配置信息──► CourseAutomationSystem
EnhancedLogger ──记录日志───► CourseAutomationSystem
RetryHandler ──处理重试───► CourseAutomationSystem
ProgressBar ──展示进度───► CourseAutomationSystem

CourseAutomationSystem ──驱动操作───► Selenium WebDriver
Selenium WebDriver ──访问网站───► 学习平台

3. 核心模块详细分析

3.1 配置管理模块 (ConfigManager)

功能定位:统一管理系统配置信息,支持多账号配置、配置验证和格式转换。

核心功能

class ConfigManager:
    def load_config() -> Dict[str, Any]:           # 加载配置文件
    def get_user_count() -> int:                   # 获取用户数量
    def get_all_users() -> List[Dict[str, str]]:   # 获取所有用户配置
    def get_user_config(user_index: int) -> Dict[str, str]:  # 获取指定用户配置
    def validate_config() -> bool:                 # 验证配置完整性
    def get_login_settings() -> Dict[str, str]:    # 获取登录设置
    def get_browser_settings() -> Dict[str, Any]:  # 获取浏览器设置
    def get_wait_times() -> Dict[str, int]:        # 获取等待时间设置

设计特点

  • 支持多账号配置,每个账号独立设置用户名、密码和显示名称
  • 配置验证机制确保配置文件完整性
  • 提供便捷的配置访问接口,减少代码重复
  • 支持配置文件热加载(隐式实现)

3.2 增强日志模块 (EnhancedLogger)

功能定位:提供结构化、彩色化的日志记录功能,支持上下文信息和多账号日志区分。

核心功能

class EnhancedLogger:
    def setup_logger() -> None:                    # 配置日志记录器
    def set_global_context(context: Optional[Dict[str, Any]]) -> None:  # 设置全局上下文
    def info(message: str, context: Optional[Dict[str, Any]]) -> None:  # 记录信息日志
    def warning(message: str, context: Optional[Dict[str, Any]]) -> None:  # 记录警告日志
    def error(message: str, context: Optional[Dict[str, Any]]) -> None:  # 记录错误日志
    def exception(message: str, context: Optional[Dict[str, Any]]) -> None:  # 记录异常日志
    def _format_message(message: str, context: Optional[Dict[str, Any]]) -> str:  # 格式化消息

设计特点

  • 支持控制台彩色日志输出,提升可读性
  • 多账号上下文区分,清晰展示不同账号的操作日志
  • 上下文信息自动附加,减少重复代码
  • 支持文件日志和控制台日志双输出
  • 丰富的状态图标和进度指示

3.3 智能重试模块 (RetryHandler)

功能定位:提供统一的重试机制,处理网络不稳定和页面加载延迟等问题。

核心功能

class RetryHandler:
    def __init__(self, config: Optional[Dict[str, Any]]) -> None:  # 初始化重试处理器
    def execute_with_retry(func, *args, **kwargs) -> Any:  # 执行带重试逻辑的函数

设计特点

  • 可配置的重试次数和间隔时间
  • 支持随机延迟,避免规律性请求被检测
  • 异常信息详细记录,便于问题排查
  • 灵活的函数装饰器模式,易于集成

3.4 进度展示模块 (ProgressBar)

功能定位:提供实时的进度可视化显示,支持多账号进度跟踪。

核心功能

class ProgressBar:
    def update_progress(username: str, progress: float, status: str = "", force_refresh: bool = False) -> None:  # 更新进度
    def display_all_progress() -> None:               # 显示所有用户进度
    def remove_user(username: str) -> None:           # 移除用户进度跟踪
    def reset() -> None:                              # 重置所有进度

设计特点

  • 支持多账号并行进度显示
  • 自适应刷新间隔,平衡性能与实时性
  • 跨平台清屏机制,确保显示效果
  • 进度条颜色区分,提升视觉体验

3.5 核心自动化系统 (CourseAutomationSystem)

功能定位:整合所有模块,实现完整的自动化学习流程。

核心功能

class CourseAutomationSystem:
    def setup_driver() -> WebDriver:                  # 设置浏览器驱动
    def login(login_url: str, username: str, password: str, ...) -> bool:  # 执行登录
    def get_course_types() -> List[Dict[str, Any]]:   # 获取课程类型
    def click_course_type(course_type_element: Any) -> bool:  # 点击课程类型
    def get_all_courses() -> List[Dict[str, Any]]:    # 获取所有课程
    def is_browser_closed() -> bool:                  # 检测浏览器状态
    def restart_browser() -> bool:                    # 重启浏览器

设计特点

  • 模块化设计,各功能模块松耦合
  • 反检测隐身模式,避免被平台识别
  • 浏览器状态恢复机制,提高系统稳定性
  • 智能页面刷新与重试,解决加载问题
  • 详细的状态跟踪,便于问题定位

3. 自动化工作流程

3.1 系统初始化流程

1. 加载配置文件 (ConfigManager)
2. 初始化日志系统 (EnhancedLogger)
3. 配置重试机制 (RetryHandler)
4. 设置进度展示 (ProgressBar)
5. 初始化浏览器驱动 (Chrome WebDriver)
6. 启用反检测隐身模式

3.2 登录流程

1. 访问登录页面
2. 输入用户名和密码
3. 点击登录按钮
4. 验证登录结果
5. 保存登录状态用于恢复

3.3 课程学习流程

1. 获取课程类型列表
   └── 如果获取失败,自动刷新页面重试
2. 遍历所有课程类型
3. 点击进入课程类型页面
4. 获取当前类型下的所有课程
   └── 如果获取失败,自动刷新页面重试
5. 遍历所有课程
6. 点击进入课程详情页
7. 查找并播放视频
8. 监测视频播放状态
   └── 如果暂停,自动恢复播放
9. 完成学习后返回

3.4 错误处理流程

1. 操作失败触发异常
2. 记录错误日志并保存上下文
3. 启动智能重试机制
   ├── 随机延迟避免检测
   ├── 最多重试3次
4. 如果重试失败
   ├── 检查浏览器状态
   ├── 必要时重启浏览器
   ├── 恢复登录状态
   ├── 重新执行失败操作

4. 设计特点与优化

4.1 反检测隐身模式

系统采用多种技术手段避免被学习平台检测到自动化操作:

# 禁用自动化特征识别
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': '''
        Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
        Object.defineProperty(navigator, 'languages', { get: () => ['zh-CN', 'zh'] });
        Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5] });
    '''
})

# 随机用户代理
user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...'
]
options.add_argument(f'user-agent={random.choice(user_agents)}')

4.2 智能重试机制

def execute_with_retry(self, func, *args, **kwargs) -> Any:
    if not self.retry_enabled:
        return func(*args, **kwargs)
    
    last_exception = None
    for attempt in range(self.max_retries):
        try:
            return func(*args, **kwargs)
        except Exception as e:
            last_exception = e
            if attempt < self.max_retries - 1:
                wait_time = self.retry_interval + random.uniform(0, 2)  # 随机延迟
                logging.warning(f"操作失败 (尝试 {attempt+1}/{self.max_retries}): {str(e)},将在 {wait_time:.1f} 秒后重试")
                time.sleep(wait_time)
            else:
                logging.error(f"操作失败 (尝试 {self.max_retries}/{self.max_retries}): {str(e)}")
    
    raise last_exception

4.3 浏览器状态恢复

系统能够检测浏览器是否关闭,并在需要时自动重启浏览器并恢复之前的登录状态:

def restart_browser(self) -> bool:
    # 保存当前状态
    current_status = self.current_status.copy()
    saved_login_info = self.login_info.copy()
    
    # 关闭旧驱动
    try:
        self.driver.quit()
    except Exception:
        pass
    
    # 重新初始化驱动
    self.driver = self.setup_driver()
    
    # 使用保存的信息重新登录
    if saved_login_info:
        self.login(
            login_url=saved_login_info.get('login_url'),
            username=saved_login_info.get('username'),
            password=saved_login_info.get('password'),
            username_field=saved_login_info.get('username_field'),
            password_field=saved_login_info.get('password_field'),
            login_button=saved_login_info.get('login_button')
        )
    
    # 恢复状态
    self.update_status(current_status)
    return True

4.4 多账号管理

系统支持多账号配置和切换,每个账号可以独立进行学习任务。配置文件中可以定义多个用户,每个用户包含用户名、密码和显示名称:

{
  "users": [
    {
      "username": "用户名",               // 登录用户名
      "password": "密码",                  // 登录密码
      "display_name": "显示名称"
    },
    {
      "username": "用户名",               // 登录用户名
      "password": "密码",                  // 登录密码
      "display_name": "显示名称"
    }
  ]
}

每个用户配置项说明:

  • username:学习平台登录用户名
  • password:学习平台登录密码
  • display_name:系统中显示的用户名称,便于区分不同账号

系统会自动为每个用户创建独立的学习任务,支持并行处理多个账号的学习进度。

5. 技术选型与优化

5.1 依赖分析

依赖包 版本 用途
selenium latest 浏览器自动化
python 3.8+ 运行环境
logging 内置 日志记录
json 内置 配置管理
time 内置 时间控制
random 内置 随机延迟
typing 内置 类型提示

5.2 性能优化

  • 延迟优化:使用随机延迟避免被检测,同时减少不必要的等待时间
  • 刷新策略:仅在必要时刷新页面,避免频繁刷新影响性能
  • 内存管理:及时释放不再使用的浏览器实例和资源
  • 并发控制:虽然当前为单线程设计,但架构支持扩展为多线程并发

5.3 安全考虑

  • 密码存储:当前密码明文存储在配置文件中,建议未来使用加密存储
  • 异常处理:所有异常均被捕获并记录,避免程序崩溃
  • 资源释放:确保浏览器实例正确关闭,避免资源泄漏

6. 使用指南

6.1 配置文件说明

{
  "users": [                               // 用户列表
    {
      "username": "用户名",               // 登录用户名
      "password": "密码",                  // 登录密码
      "display_name": "显示名称"            // 显示名称
    }
  ],
  "login_settings": {                      // 登录设置
    "login_url": "登录地址",               // 平台登录URL
    "username_field": "loginName",        // 用户名输入框ID
    "password_field": "password",         // 密码输入框ID
    "login_button": "submit-btn"          // 登录按钮类名
  },
  "browser_settings": {                    // 浏览器设置
    "driver_path_windows": "./chromedriver.exe",  // Windows驱动路径
    "driver_path_macos": "./chromedriver",         // macOS驱动路径
    "use_stealth_mode": true,             // 是否启用隐身模式
    "page_load_timeout": 30               // 页面加载超时时间
  },
  "wait_times": {                         // 等待时间设置
    "after_login": 10,                    // 登录后等待时间
    "after_click_course_type": 10,        // 点击课程类型后等待时间
    "after_click_course": 15,             // 点击课程后等待时间
    "monitor_interval": 60,               // 监测间隔
    "retry_interval": 5                   // 重试间隔
  }
}

6.2 运行系统

# 安装依赖
pip install -r requirements.txt

# 运行主程序
python course_automation.py

6.3 功能扩展

6.3.1 添加新用户
"users": [
  {
    "username": "新用户名",
    "password": "新密码",
    "display_name": "新用户显示名称"
  }
]
6.3.2 调整等待时间
"wait_times": {
  "after_login": 15,          // 增加登录后等待时间
  "after_click_course": 20    // 增加课程点击后等待时间
}
6.3.3 禁用隐身模式
"browser_settings": {
  "use_stealth_mode": false
}

7. 系统评估与未来规划

7.1 系统优势

  • 稳定性:完善的错误处理和重试机制
  • 安全性:反检测隐身模式和隐私保护
  • 可扩展性:模块化设计便于功能扩展
  • 易用性:配置文件驱动,无需修改代码
  • 可视化:实时进度显示,直观了解学习状态

7.2 改进空间

  1. 密码加密:配置文件中密码明文存储的问题
  2. 多线程支持:实现真正的多账号并发学习
  3. 验证码识别:如果平台添加验证码,需要集成OCR识别
  4. 学习进度持久化:保存学习进度,支持断点续学
  5. 配置验证工具:提供配置文件验证命令行工具

7.3 未来功能规划

  • 学习进度统计与分析
  • 邮件通知与报告
  • 自动答题功能扩展
  • Web界面管理端
  • 云同步学习进度

8. 故障排除指南

8.1 常见问题与解决方案

问题1:浏览器驱动初始化失败

  • 检查驱动文件是否存在:chromedriver.exe (Windows) 或 chromedriver (macOS)
  • 确保驱动版本与Chrome浏览器版本匹配
  • 检查驱动文件路径是否正确配置

问题2:登录失败

  • 检查用户名和密码是否正确
  • 确认登录URL是否有效
  • 检查页面元素选择器是否正确

问题3:无法获取课程列表

  • 检查网络连接是否正常
  • 确认页面结构是否变化(可能需要更新CSS选择器)
  • 尝试增加等待时间

问题4:视频无法播放

  • 检查浏览器是否支持视频播放
  • 确保浏览器已启用JavaScript
  • 尝试调整视频播放策略

问题5:被平台检测到自动化

  • 确保已启用隐身模式
  • 尝试更换用户代理
  • 增加随机延迟时间

9. 总结

四川智慧学习平台自动化脚本系统是一个功能完善、架构清晰、性能稳定的学习自动化解决方案。通过模块化设计和智能优化,实现了从登录到课程学习的全流程自动化,大幅提升了学习效率。

系统的主要亮点包括:

  • 多账号管理支持
  • 智能重试与错误处理
  • 反检测隐身模式
  • 进度可视化显示
  • 浏览器状态恢复

虽然当前系统已经具备了完善的功能,但仍有进一步优化的空间,特别是在安全性、并发性能和用户体验方面。未来可以通过增加密码加密、多线程支持和Web管理界面等功能,进一步提升系统的实用性和易用性。


Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐