某在线学习平台自动挂视频
前言:
遇到一个视频学习平台,视频无法快进,学习过程中会出现习题,需要在一定时间内提交答案(不管对错),才会继续视频的学习。其间若是逾时不答题或是出现其它错误,视频播放进度都不算。
使用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()
某在线学习平台自动挂视频相关推荐
- 【JAVA微服务架构项目前后端分离开发-MyMooc教育在线学习平台】
类似于中国Mooc的在线学习平台 文章目录 类似于中国Mooc的在线学习平台 一.项目描述 二.后台管理员系统细讲 三.前台用户系统细讲 四.前端技术点总结 五.后端技术点总结 六.遇到问题及解决方法 ...
- 基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件
基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...
- SSM+在线学习平台 毕业设计-附源码211707
摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准 ...
- classin安卓手机安装条件_Classin在线学习平台安装指引——从这里打开知识的大门与北京四中网校名师面对面交流学习!...
中华教育与北京四中网校名师联袂执教,从这里打开知识的大门与北京四中网校名师面对面交流学习! 中华教育 16年精磨教学 北京四中网校 国内教育排头兵 Classin 学习平台下载步骤 登录官网下载Cla ...
- java微信小程序的在线学习平台
本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计.整个开发过程首先对在线学习平台进行需求分析,得出在线学习平台主要功能.接着对在线 ...
- 分享:大讲台在线学习平台怎么样,靠谱吗?
时至今日,互联网上的各类教育学习平台不可谓不多,但是大部分长得都很像.抛开直播授课形式不谈,大部分的在线学习还都是以"录播"视频为主. 围绕录播的视频,有些学习平台增加了笔记.资料 ...
- 美国中小学停课,20个优质在线学习平台推荐
新冠疫情继续在世界各地蔓延,美国中小学这周也宣布全面停课,CodeCombat 团队在这里为各位整理总结了 20个广受美国中小学喜爱的免费优质在线学习平台,包括英语.科学.编程.数学和艺术五个大类,特 ...
- 计算机课学生段密码,在线学习平台学生端常见问题
在线学习平台及信息技术平台学生在操作中的常见问题总结如下: 1.学生注册时需要填写"您的学号"是指什么,如何可以获得学号? 学生个人学籍号. 2.密码忘记怎么办? 告知老师或者学校 ...
- java-php-python-ssm-蔚蓝在线学习平台2021计算机毕业设计
java-php-python-ssm-蔚蓝在线学习平台2021计算机毕业设计 java-php-python-ssm-蔚蓝在线学习平台2021计算机毕业设计 本源码技术栈: 项目架构:B/S架构 开 ...
- 基于微信小程序的在线学习平台
随着社会的发展,社会的方方面面都在利用信息化时代的优势.互联网的优势和普及使得各种系统的开发成为必需. 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数 ...
最新文章
- bzoj1070————2016——3——14
- 零基础入门学习 Python(4)条件分支、while循环、逻辑连接符、引入外援
- java反码补码原码作用_java原码补码反码关系解析
- Linux2.6内核 -- 编码风格(1)
- 接口作为参数,不同的接口调用不同的方法,例如:输出“I love Game”或输出“我喜欢游戏”...
- [转载]struts+hibernate遇到的错误总结
- python不用加号实现加法
- 入侵检测技术-矛与盾
- C++基础学习9:构造函数和析构函数
- html 分页 惰性加载,懒加载实现的分页网站footer自适应
- hibernate 多表查询
- 什么是生成式对抗神经网络GAN
- MyBatis学习_2_MyBatis的关联映射
- [算法]Fibonacci数列O(n)和O(lgn)的解法
- 4.16 期货每日早盘操作建议
- 计算机网络有线通信媒体,计算机网络基础知识之传输媒体
- Maven 自问自答
- DNS解析过程及工作原理
- python 热度图_keras CNN卷积核可视化,热度图教程
- Android自定义Scrollbar样式