# gdpx-python **Repository Path**: scrynoo/gdpx-python ## Basic Information - **Project Name**: gdpx-python - **Description**: 广东省干部培训网络学院自动学习 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-29 - **Last Updated**: 2024-03-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # gdpx-python #### 介绍 广东省干部培训网络学院自动学习脚本 gdpxAutoCompleteBeta1.0 单文件执行 基于github:zww7821270/gdgbpx_auto 代码基础上根据机器情况和需要调整 #### 测试使用环境 1. python3.12 2. pycharm2023 3. chrome 123.0.6312.86 4. chromedriver 123.0.6312.86 5. selenium 4.19 #### 环境准备 1. 安装python3.12 下载地址:https://mirrors.huaweicloud.com/python/3.12.2/ 2. pip 换阿里源: pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ 3. pycharm下载及使用教程:https://www.exception.site/ pycharm 常用插件:缺 pycharm 配置、新建工程 4. chrome与chromedriver安装 1) 国内能访问下载地址:https://chromedriver.com/download#stable 2) chromedriver地址2:https://registry.npmmirror.com/binary.html?path=chromedriver/ 3) 安装chrome后打开文件所在目录,添加目录地址到系统变量Path中 4) chromedriver解压后exe文件放到python安装目录下Scripts文件夹中 5) chrome与chromedriver 的版本需要一致 * 有几次配置时发现不行,后来放过在chrome文件夹中,使用中指定具体地址 5. 在pycharm工程下import selenium 安装库 * 当前阿里源安装是selenium 4.19版本,不同版本有差异,和4.11不同 #### 使用说明 1. 仅用于挂机,无法快速完成视频观看。同样因是挂机,没有视频加速功能。 2. 因没搞定验证码的自动识别,所以无法全自动登陆,且打包单独使用配置复杂,自用无需打包 自动输入账户和密码没有意义.因此需要自行登陆并进入学习页面,见到在学的列表。 3. selenium可以接管已经登陆的chrome浏览器,无需重复打开登陆。 4. 需要通过cmd调用chromedriver的debugging功能,配置不同的储存区 5. 仅视频学习,其他学习方式无效。如有答题同样无效(目前视频暂未见答题要求)。 6. 仅是个人学习的需要和记录,所以写详细些。 #### 使用方法 1. cmd 调用debugging,会启动一个chrome 1) 代码:chrome.exe --remote-debugging-port=9222 --user-data-dir="d:\AutomationProfile" 2) 端口9222可以是任意没占用的端口,dir地址可以自行配置 3) 理论上可以一次搞定,如果需要多次完成需要重复执行上述代码,调用调用debugging 2. 在新打开的浏览器进入继续教育学习登陆页面 网址:https://gbpx.gd.gov.cn/gdceportal/index.aspx 自行登陆、点击"进入学习" 3. pycharm 运行脚本挂机直到学习列表为空。循环默认设置10次,后续可以调整为根据列表长度循环及刷新, 现在暂时手动修改for in range 中的10为需要的次数。 #### 代码逻辑 ###### 一. 循环开始 1. 接管页面 2. 获得列表长度 * 有3层嵌套,driver.switch_to.frame()逐次切换到最底层才能获得需要的元素 * 执行js代码获得boolean值(True or False),需要在代码前加 return,如: 'return document.getElementsByClassName("courseware-list-reed").length;' * selenium执行js代码: driver.execute_script('js代码') 3. 点击学习按钮,激活视频播放新窗口 4. 在视频播放窗口根据状态、时间长度判断、进行进一步操作,等待视频播放结束 * 获得窗口句柄并切换到视频播放窗口,释放frame回到当前层(操作播放及关闭按钮) * 根据视频状态点击播放(暂停则播放) * 获得视频总时间长、当前时间长度,math.ceil()向上取整,比较时间得到应该等待的时长 * time.sleep(获得的剩余时间) * 判断状态,关闭视频 5. 通过窗口句柄切回主界面,刷新界面,等待加载 ###### 二. 进入下一个循环