文章中如果有图看不到,可以点这里去 csdn 看看。从那边导过来的,文章太多,没法一篇篇修改好。

【开源】广东省干部培训网络刷课脚本

广东省干部培训网络刷课脚本:基于Selenium的自动化学习解决方案

项目概述

这是一个专为广东省干部培训网络平台设计的自动化刷课脚本,通过模拟真实用户操作实现课程视频的自动播放和学习进度管理。项目采用Python语言开发,基于Selenium WebDriver实现浏览器自动化操作。

项目地址GitHub链接

技术架构

核心组件

用户界面层
业务逻辑层
数据访问层
浏览器驱动层
credentials.txt
用户交互
登录模块
课程处理模块
视频播放模块
文件读取
配置管理
Chrome Driver
浏览器实例

技术栈详解

1. Selenium WebDriver自动化框架

项目核心基于Selenium实现浏览器自动化操作:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

关键技术点:

  • 元素定位策略:使用ID、Class Name、XPath等多种定位方式
  • 显式等待:通过WebDriverWait实现智能等待,提高脚本稳定性
  • iframe处理:多层iframe嵌套环境下的精准切换
2. 多窗口与iframe处理机制
主窗口 secondIframe thirdIframe dataMainIframe 视频窗口 switch_to.frame('secondIframe') switch_to.frame('thirdIframe') switch_to.frame('dataMainIframe') 打开视频链接 视频播放处理 返回主窗口 主窗口 secondIframe thirdIframe dataMainIframe 视频窗口
3. 视频播放控制逻辑
# 视频状态检测
js_paused = 'return document.getElementById("my-video_html5_api").paused;'
view_paused_status = browser.execute_script(js_paused)

# 播放进度监控
js_duration_str = 'return document.getElementById("my-video_html5_api").duration;'
view_time = browser.execute_script(js_duration_str)

核心功能实现

1. 安全登录机制

def read_credentials(file_path):
    """安全的凭据读取机制"""
    if not os.path.exists(file_path):
        raise FileNotFoundError(f"Credentials file not found: {file_path}")
    with open(file_path, 'r', encoding='utf-8') as f:
        lines = [line.strip() for line in f.readlines() if line.strip()]
    return lines[0], lines[1]

2. 递归视频处理算法

开始处理课程
有未学习视频?
打开视频页面
课程学习完成
切换到视频iframe
检查视频状态
视频已暂停?
点击播放并静音
继续播放
计算剩余时间
视频播放完成?
关闭页面并刷新
等待视频播放

3. 反检测机制

browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
      """
})

环境配置指南

系统要求

  • Windows操作系统
  • Python 3.11+
  • Chrome浏览器
  • ChromeDriver驱动

依赖安装

pip install selenium pyautogui

ChromeDriver配置

确保ChromeDriver版本与Chrome浏览器匹配:

driver_url = 'C:\Program Files\Google\Chrome\Application\chromedriver.exe'
service = Service(executable_path=driver_url)
browser = webdriver.Chrome(service=service, options=option)

使用教程

1. 配置文件准备

创建credentials.txt文件:

your_username
your_password

2. 脚本执行流程

启动脚本
读取凭据文件
初始化浏览器
导航到登录页面
输入账号密码
手动输入验证码
登录系统
进入课程页面
开始视频学习循环
课程完成

3. 验证码处理策略

目前采用半自动化方案:

code_num = pyautogui.prompt("请输入验证码:")

技术亮点

1. 智能等待机制

# 显式等待元素可点击
password_login_button = WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//span[@class='nav-items' and text()='密码登录']"))
)

2. 跨窗口协同处理

all_handles = browser.window_handles
pre_window_handle = browser.current_window_handle
for handle in all_handles:
    if handle != pre_window_handle:
        browser.switch_to.window(handle)

3. 视频进度精确控制

# 计算需要等待的时间
sleep_time = math.ceil(view_time) - math.ceil(view_current_time)
time.sleep(sleep_time)

优化方向

短期优化

  1. 验证码自动识别:集成PIL + pytesseract实现OCR识别
  2. 错误重试机制:增加网络异常的重试逻辑
  3. 日志系统:完善的运行日志记录

长期规划

  1. 课程自动选择:基于时长、类型等条件智能选课
  2. 多平台支持:扩展支持其他培训平台
  3. Web界面:提供图形化操作界面

已知问题与解决方案

分页显示限制

# 当前问题:分页显示导致计数不准确
js_list = 'return document.getElementsByClassName("courseware-list-reed").length;'
# 解决方案:增加分页遍历逻辑

异常处理完善

需要增加更多异常捕获:

try:
    # 核心操作
except TimeoutException:
    # 超时处理
except NoSuchElementException:
    # 元素找不到处理

项目意义

这个项目不仅解决了重复性手动操作的问题,更展示了自动化测试技术在办公自动化领域的应用潜力。通过精确模拟用户行为,既保证了学习进度的有效记录,又大大提高了学习效率。

贡献指南

欢迎开发者贡献代码,主要方向包括:

  • 验证码自动识别优化
  • 异常处理机制完善
  • 跨平台兼容性改进
  • 性能优化和代码重构

结语

本项目是Web自动化技术的典型应用案例,通过合理的技术选型和架构设计,实现了复杂Web环境下的稳定自动化操作。随着技术的不断迭代,相信这个项目能够为更多类似场景提供参考和解决方案。

许可证:基于项目原有版权声明,具体参考文档中的版权信息


注:本项目仅供技术学习交流,请遵守相关平台的使用规定,合理使用自动化工具。

posted @ 2025-11-02 15:26  NeoLshu  阅读(0)  评论(0)    收藏  举报  来源