前言:

遇到一个视频学习平台,视频无法快进,学习过程中会出现习题,需要在一定时间内提交答案(不管对错),才会继续视频的学习。其间若是逾时不答题或是出现其它错误,视频播放进度都不算。

使用Python + selenium,实现自动挂视频:

  • 半自动登录。帐号密码可设定,在登录页面会自动输入,但需要自己输入验证码(这一块处理起来也不难,它的验证码还是比较好辩认),并且点击“个人登录”。
  • 自动进入课程学习。
  • 处理在视频播放时间里出现的所有情况:答题、错误提示等。
  • 播放完毕后自动进入下一个课程。
  • 全程使用一个logger装饰器,把main()包装起来,让所有的输出(包括错误)转存到logger.log文件中。
  • 最主要是在handle_interference()函数中,处理播放视频时出现的所有干扰,以便视频能顺利播放完。

代码如下 :

# -*- coding: utf-8 -*-
"""
广东省******公需课在线学习平台 自动点播
存在问题:handle_interference()中处理“网络故障”的判断条件不正确
"""
import time
import sys
import functoolsfrom selenium import webdriver
from selenium.common import exceptionsUSER_NAME = '******'
USER_PWD = '******'
now = time.strftime('[%H:%M:%S]', time.localtime())
login_url = 'http://******/zxpx/index?f=73075572383248020'  # 登录页面
classes_url = 'http://******/zxpx/hyper/courseDetail?ocid=OC201903290000005403'  # “课程详情”页面地址def logger(func):""" 装饰器 将系统输出转到logger.log文件 """@functools.wraps(func)def log():with open('logger.log', 'a', encoding='utf-8') as log_file:org_err, org_out = sys.stderr, sys.stdoutsys.stderr, sys.stdout = log_file, log_filefunc()sys.stderr, sys.stdout = org_err, org_outreturn logdef login(driver, url):""" 登录平台 """try:driver.get(url)time.sleep(2)driver.find_element_by_id('username_personal').send_keys(USER_NAME)driver.find_element_by_id('password_personal').send_keys(USER_PWD)driver.find_element_by_id('vcode_personal').click()# 手动填写验证码,并登录while True:time.sleep(3)if driver.title == '首页':return True, Noneexcept exceptions.NoSuchElementException:return False, '非登录页面'def start_new_video(driver, n):""" 获取并开始新课视频 """try:new_class = driver.find_elements_by_xpath('//a[contains(text(), "点击学习")]')[n]except:return False, '找不到学习课程。'else:print('{} 开始新一课: {}'.format(now, new_class.get_attribute('href')))new_class.click()time.sleep(5)state, msg = play_video(driver)if state:return True, 'success'else:return False, msgdef play_video(driver):""" 点击页面中的视频object元素,开始播放 """if driver.title == '课件学习':try:driver.find_element_by_xpath('//object/embed').click()except exceptions.NoSuchElementException:return False, '找不到视频'else:return True, 'success'else:return False, '非课件网面'def handle_interference(driver):"""自动点击处理视频播放过程中出现的题目选择和异常告警:return:(True, 'next_class"): 正常,并视频播放完毕(Flase, msg):异常"""print('{} 处理视频页面:答题和错误处理'.format(now))while driver.title == '课件学习':# 处理页面中出现的异常对话框:选择确定try:driver.find_element_by_xpath('//*[contains(text(), "确定")]').click()print('{} 选择确定'.format(now))time.sleep(1)except:pass# 选择视频过程中出现题目的正确答案try:driver.find_element_by_xpath('//div[@id="aadiv"]/input').click()print('{} 选择正确'.format(now))time.sleep(1)except:pass# 提交答案try:driver.find_element_by_class_name('reply-sub').click()print('{} 选择提交'.format(now))time.sleep(1)except:pass# 若出现告警对话框时选择确定通过try:driver.switch_to.alert.accept()print('{} 对话框确定'.format(now))time.sleep(1)except:pass# 视频播放的进度(正常情况下以**%的形式出现,异常则说明视频播放完毕)try:driver.find_element_by_id('realPlayVideoTime')except exceptions.NoSuchElementException:return True, 'next_class'# 处理网络故障提示try:driver.find_element_by_xpath('//*[contains(text(), ‘网络故障,请刷新’)]')  # 网络故障这个提示有点问题,待修复driver.find_element_by_xpath('//*[contains(text(), "确定")]').click()except:passelse:driver.refresh()print('{} 刷新页面'.format(now))time.sleep(3)state, msg = play_video(driver)if not state:return False, msgtime.sleep(5)@logger
def main():with webdriver.Ie(executable_path='IEDriverServer.exe') as driver:logined, login_msg = login(driver, login_url)if logined:while True:driver.get(classes_url)time.sleep(2)new_video_state, new_video_msg = start_new_video(driver, 0)if new_video_state:handle_state, handle_msg = handle_interference(driver)if not handle_state:print('{} {}'.format(now, handle_msg))else:print('{} {}'.format(now, new_video_msg))return Falseelse:print('{} {}'.format(now, login_msg))return Falseif __name__ == '__main__':main()

某在线学习平台自动挂视频相关推荐

  1. 【JAVA微服务架构项目前后端分离开发-MyMooc教育在线学习平台】

    类似于中国Mooc的在线学习平台 文章目录 类似于中国Mooc的在线学习平台 一.项目描述 二.后台管理员系统细讲 三.前台用户系统细讲 四.前端技术点总结 五.后端技术点总结 六.遇到问题及解决方法 ...

  2. 基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  3. SSM+在线学习平台 毕业设计-附源码211707

    摘  要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准 ...

  4. classin安卓手机安装条件_Classin在线学习平台安装指引——从这里打开知识的大门与北京四中网校名师面对面交流学习!...

    中华教育与北京四中网校名师联袂执教,从这里打开知识的大门与北京四中网校名师面对面交流学习! 中华教育 16年精磨教学 北京四中网校 国内教育排头兵 Classin 学习平台下载步骤 登录官网下载Cla ...

  5. java微信小程序的在线学习平台

    本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计.整个开发过程首先对在线学习平台进行需求分析,得出在线学习平台主要功能.接着对在线 ...

  6. 分享:大讲台在线学习平台怎么样,靠谱吗?

    时至今日,互联网上的各类教育学习平台不可谓不多,但是大部分长得都很像.抛开直播授课形式不谈,大部分的在线学习还都是以"录播"视频为主. 围绕录播的视频,有些学习平台增加了笔记.资料 ...

  7. 美国中小学停课,20个优质在线学习平台推荐

    新冠疫情继续在世界各地蔓延,美国中小学这周也宣布全面停课,CodeCombat 团队在这里为各位整理总结了 20个广受美国中小学喜爱的免费优质在线学习平台,包括英语.科学.编程.数学和艺术五个大类,特 ...

  8. 计算机课学生段密码,在线学习平台学生端常见问题

    在线学习平台及信息技术平台学生在操作中的常见问题总结如下: 1.学生注册时需要填写"您的学号"是指什么,如何可以获得学号? 学生个人学籍号. 2.密码忘记怎么办? 告知老师或者学校 ...

  9. java-php-python-ssm-蔚蓝在线学习平台2021计算机毕业设计

    java-php-python-ssm-蔚蓝在线学习平台2021计算机毕业设计 java-php-python-ssm-蔚蓝在线学习平台2021计算机毕业设计 本源码技术栈: 项目架构:B/S架构 开 ...

  10. 基于微信小程序的在线学习平台

    随着社会的发展,社会的方方面面都在利用信息化时代的优势.互联网的优势和普及使得各种系统的开发成为必需. 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数 ...

最新文章

  1. bzoj1070————2016——3——14
  2. 零基础入门学习 Python(4)条件分支、while循环、逻辑连接符、引入外援
  3. java反码补码原码作用_java原码补码反码关系解析
  4. Linux2.6内核 -- 编码风格(1)
  5. 接口作为参数,不同的接口调用不同的方法,例如:输出“I love Game”或输出“我喜欢游戏”...
  6. [转载]struts+hibernate遇到的错误总结
  7. python不用加号实现加法
  8. 入侵检测技术-矛与盾
  9. C++基础学习9:构造函数和析构函数
  10. html 分页 惰性加载,懒加载实现的分页网站footer自适应
  11. hibernate 多表查询
  12. 什么是生成式对抗神经网络GAN
  13. MyBatis学习_2_MyBatis的关联映射
  14. [算法]Fibonacci数列O(n)和O(lgn)的解法
  15. 4.16 期货每日早盘操作建议
  16. 计算机网络有线通信媒体,计算机网络基础知识之传输媒体
  17. Maven 自问自答
  18. DNS解析过程及工作原理
  19. python 热度图_keras CNN卷积核可视化,热度图教程
  20. Android自定义Scrollbar样式

热门文章

  1. pytthon django开发php,记录Django开发心得
  2. php验证码点击刷新,php实现点击可刷新验证码_PHP
  3. PS零基础自学笔记:常见操作方法记录(去水印、抠图、调色调)
  4. java计算101~200之间的素数
  5. ❤️工作半年前端的一些思考 | 共勉
  6. daemontools的安装、示例、简介
  7. 【Proteus仿真】 51单片机利用定时器制作简易SPWM波形输出
  8. EM310指令集及使用
  9. HTTP请求的完整过程
  10. 如何减小电压跟随器输出电阻_三分钟带你搞懂运算放大器与比较器的区别