Python如何利用Selenium实现自动观看学习通视频
发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,这篇文章给大家分享的是有关Python如何利用Selenium实现自动观看学习通视频的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、登录以信号与系统课程为例,直接输入网址
千家信息网最后更新 2025年02月19日Python如何利用Selenium实现自动观看学习通视频
这篇文章给大家分享的是有关Python如何利用Selenium实现自动观看学习通视频的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
一、登录
以信号与系统课程为例,直接输入网址则出现登录界面:
由于学号登录需要验证码,因此选择电话登录:
直接在开发者工具中找到手机号输入框、密码输入框和登录按钮,并进行输入和点击:
import timefrom selenium.webdriver import Chromeweb = Chrome()web.get('https://mooc2-ans.chaoxing.com/mycourse/stu?courseid=203430340&clazzid=43992529&cpi=93003203&enc=9726840999ffc15f3f441bb5466882e6&t=1637651449831&pageHeader=1')# 登录phone = web.find_element_by_class_name('ipt-tel')pwd = web.find_element_by_class_name('ipt-pwd')login = web.find_element_by_class_name('btn-big-blue')phone.send_keys('电话号码')pwd.send_keys('密码')login.click()time.sleep(2)
二、进行一个页面的视频观看
登录成功后,如下:
找到所有的知识点页面:
all_no_list = web.find_elements_by_xpath('//span[@class="catalog_points_yi"]')
执行以上代码后,发现错误,通过开发者工具发现其在iframe中,因此需要先进入iframe:
# 进入iframeframe_content = web.find_element_by_xpath('//*[@id="frame_content-zj"]')web.switch_to.frame(frame_content)time.sleep(2)# 查找所有未完成的知识点页面all_no_list = web.find_elements_by_xpath('//span[@class="catalog_points_yi"]')
紧接着进入第一个页面:
# 跳转到第一个知识点页面all_no_list[0].click()web.switch_to.window(web.window_handles[-1]) # 跳转到该知识点界面time.sleep(5)
查找未完成的知识点的div(同样需要进入iframe):
iframe = web.find_element_by_id('iframe') # 每次刷新后,都要进入内部iframeweb.switch_to.frame(iframe)# 筛选,去除已完成的知识点k_points = web.find_elements_by_css_selector('div.ans-attach-ct:not(.ans-job-finished)')
进入视频的播放:
num = len(k_points)for i in range(0, num): k_point = k_points[i] # 查找任务图标个数,1为知识点,0为不是知识点 icon_num = len(k_point.find_elements_by_xpath('./div[contains(@class,"ans-job-icon")]')) if icon_num == 0: # 再次筛选,去除不是知识点的div continue # 进行视频的播放 video_iframe = k_point.find_element_by_xpath('./iframe') # 视频iframe print(video_iframe) time.sleep(2) web.switch_to.frame(video_iframe) # 进入视频iframe time.sleep(2) web.find_element_by_class_name('vjs-big-play-button').click() # 点击播放按钮 time.sleep(1) web.find_element_by_xpath('//*[@id="video"]/div[5]/div[6]/button').click() # 静音 # 播放和暂停按钮 pause_btn = web.find_element_by_xpath('//button[contains(@class,"vjs-play-control")and ' 'contains(@class,"vjs-control")and contains(@class,"vjs-button")]') while (1): # 播放等待 time.sleep(1) # 每1秒,检查视频是否播放完毕 if (pause_btn.get_attribute('title') == "重播"): # 点击后播放,即播放完毕状态 break print('视频播放完毕') # 视频播放完毕,退出播放iframe,然后退出循环,再次查找该页面的所有知识点(k_points) web.switch_to.default_content() print('退出知识点iframe') time.sleep(2)
经过测试后,发现播放完一个视频后,k_points
(即知识点列表)发生改变,不能继续使用该列表中的元素,因此需要重新获取,则需要刷新页面。
观看一个视频方法如下:
# 完成一个页面的所有未完成的知识点def view_one_page_points(): while (1): iframe = web.find_element_by_id('iframe') # 每次刷新后,都要进入内部iframe web.switch_to.frame(iframe) # 筛选,去除已完成的知识点 k_points = web.find_elements_by_css_selector('div.ans-attach-ct:not(.ans-job-finished)') num = len(k_points) flag = False for i in range(0, num): if i == (num - 1): # 是最后一个,表示该页刷完 flag = True k_point = k_points[i] # 查找任务图标个数,1为知识点,0为不是知识点 icon_num = len(k_point.find_elements_by_xpath('./div[contains(@class,"ans-job-icon")]')) if icon_num == 0: # 再次筛选,去除不是知识点的div continue # 进行视频的播放 video_iframe = k_point.find_element_by_xpath('./iframe') # 视频iframe print(video_iframe) time.sleep(2) web.switch_to.frame(video_iframe) # 进入视频iframe time.sleep(2) web.find_element_by_class_name('vjs-big-play-button').click() # 点击播放按钮 time.sleep(1) web.find_element_by_xpath('//*[@id="video"]/div[5]/div[6]/button').click() # 静音 # 播放和暂停按钮 pause_btn = web.find_element_by_xpath('//button[contains(@class,"vjs-play-control")and ' 'contains(@class,"vjs-control")and contains(@class,"vjs-button")]') while (1): # 播放等待 time.sleep(1) # 每1秒,检查视频是否播放完毕 if (pause_btn.get_attribute('title') == "重播"): # 点击后播放,即播放完毕状态 break print('视频播放完毕') # 视频播放完毕,退出播放iframe,然后退出循环,再次查找该页面的所有知识点(k_points) web.switch_to.default_content() print('退出知识点iframe') time.sleep(2) web.refresh() # 刷新页面,之后需重新进入iframe time.sleep(2) print('刷新页面') break if flag: # 该页面知识点播放完毕 break pass
三、所有视频的观看
之前在主页面获取了所有的知识点页面:
all_no_list = web.find_elements_by_xpath('//span[@class="catalog_points_yi"]')
和上一点的k_points
需要重新获取类似,all_no_list
每完成一个页面则也需要重新获取,因此代码如下:
while (1): # 进入iframe frame_content = web.find_element_by_xpath('//*[@id="frame_content-zj"]') web.switch_to.frame(frame_content) time.sleep(2) # 查找所有未完成的知识点页面 all_no_list = web.find_elements_by_xpath('//span[@class="catalog_points_yi"]') list_num = len(all_no_list) #知识点页面个数 if list_num == 0: # 没有知识点页面,即全部刷完 break # 跳转到第一个知识点页面 all_no_list[0].click() web.switch_to.window(web.window_handles[-1]) # 跳转到该知识点界面 time.sleep(5) ##### view_one_page_points() # 播放该知识点页面的所有未完成的知识点视频 ##### print('完成一个知识点页面...') web.close() # 关闭当前窗口 # 该页面知识点完毕,关闭当前窗口,选择下一个知识点窗口 web.switch_to.window(web.window_handles[0]) # 变更视角到该课程主界面 time.sleep(1) # 刷新页面 web.refresh() time.sleep(2) print('刷新主页面') pass
四、总代码
import timefrom selenium.webdriver import Chromeweb = Chrome()web.get('https://mooc2-ans.chaoxing.com/mycourse/stu?courseid=203430340&clazzid=43992529&cpi=93003203&enc=9726840999ffc15f3f441bb5466882e6&t=1637651449831&pageHeader=1')# 1. 登录phone = web.find_element_by_class_name('ipt-tel')pwd = web.find_element_by_class_name('ipt-pwd')login = web.find_element_by_class_name('btn-big-blue')phone.send_keys('手机号码')pwd.send_keys('密码')login.click()time.sleep(2)# 完成一个页面的所有未完成的知识点def view_one_page_points(): while (1): iframe = web.find_element_by_id('iframe') # 每次刷新后,都要进入内部iframe web.switch_to.frame(iframe) # 筛选,去除已完成的知识点 k_points = web.find_elements_by_css_selector('div.ans-attach-ct:not(.ans-job-finished)') num = len(k_points) flag = False for i in range(0, num): if i == (num - 1): # 是最后一个,表示该页刷完 flag = True k_point = k_points[i] # 查找任务图标个数,1为知识点,0为不是知识点 icon_num = len(k_point.find_elements_by_xpath('./div[contains(@class,"ans-job-icon")]')) if icon_num == 0: # 再次筛选,去除不是知识点的div continue # 进行视频的播放 video_iframe = k_point.find_element_by_xpath('./iframe') # 视频iframe print(video_iframe) time.sleep(2) web.switch_to.frame(video_iframe) # 进入视频iframe time.sleep(2) web.find_element_by_class_name('vjs-big-play-button').click() # 点击播放按钮 time.sleep(1) web.find_element_by_xpath('//*[@id="video"]/div[5]/div[6]/button').click() # 静音 # 播放和暂停按钮 pause_btn = web.find_element_by_xpath('//button[contains(@class,"vjs-play-control")and ' 'contains(@class,"vjs-control")and contains(@class,"vjs-button")]') while (1): # 播放等待 time.sleep(1) # 每1秒,检查视频是否播放完毕 if (pause_btn.get_attribute('title') == "重播"): # 点击后播放,即播放完毕状态 break print('视频播放完毕') # 视频播放完毕,退出播放iframe,然后退出循环,再次查找该页面的所有知识点(k_points) web.switch_to.default_content() print('退出知识点iframe') time.sleep(2) web.refresh() # 刷新页面,之后需重新进入iframe time.sleep(2) print('刷新页面') break if flag: # 该页面知识点播放完毕 break passwhile (1): # 进入iframe frame_content = web.find_element_by_xpath('//*[@id="frame_content-zj"]') web.switch_to.frame(frame_content) time.sleep(2) # 查找所有未完成的知识点页面 all_no_list = web.find_elements_by_xpath('//span[@class="catalog_points_yi"]') list_num = len(all_no_list) #知识点页面个数 if list_num == 0: # 没有知识点页面,即全部刷完 break # 跳转到第一个知识点页面 all_no_list[0].click() web.switch_to.window(web.window_handles[-1]) # 跳转到该知识点界面 time.sleep(5) ##### view_one_page_points() # 播放该知识点页面的所有未完成的知识点视频 ##### print('完成一个知识点页面...') web.close() # 关闭当前窗口 # 该页面知识点完毕,关闭当前窗口,选择下一个知识点窗口 web.switch_to.window(web.window_handles[0]) # 变更视角到该课程主界面 time.sleep(1) # 刷新页面 web.refresh() time.sleep(2) print('刷新主页面') pass
其他
bug:
如以下存在该div的页面,则无法读取其中视频。
感谢各位的阅读!关于"Python如何利用Selenium实现自动观看学习通视频"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
知识
知识点
页面
视频
登录
按钮
再次
界面
个数
输入
主页
任务
图标
密码
状态
课程
循环
检查
选择
重播
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器如何扩大文件
吉林通信软件开发服务品质保障
开源网盘系统 无数据库
代理服务器可以换吗
流媒体服务器地址如何登陆
英文歌曲下载软件开发
智能售楼软件开发
多元化的数据库防火墙
租港服务器托管行业
西安奇火网络技术
数据库原理和应用教材难学吗
云筑网数据库怎么注册
个人服务器哪家好
软件开发语言2018
删除数据库次数据文件
租的服务器需要内网穿透
优化自己的网络技术
内网限制连不了服务器
英雄联盟手游国际服服务器炸了
学软件开发做什么工作好
机器学习数据库实例
重庆市超级服务器云空间
四年级网络安全手抄报有哪些
加盟 软件开发
服务器直接连接双防火墙
盈实互联网科技公司官网
汽车如何查数据库
莱阳电商软件开发
服务器主机主板连接方法
造梦西游怎么找服务器