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安全错误
数据库的锁怎样保障安全
国内最大服务器股
ajax验证数据库唯一性
数据库两表关联查询
福建省网络安全大赛
邯郸第三方软件开发哪家正规
在哪可以找软件开发人员
虚拟服务器端口
无锡中赋网络技术有限公司
如何拆分数据库中的表
签订软件开发合同的注意事项
服务器最大内存条
计算机网络技术在生活
腾飞安全服务器机柜
sql数据库无日志不能附加
网络游戏软件开发网
公安系统监管平台软件开发公司
美食平台网络技术服务
wcf框架官方测试数据库
电脑怎么导出数据库
深圳网络安全学习线上学习
批量管理服务器上的jar包
数据库中的基本操作对象
数据采集中的数据库技术
dxcad用什么软件开发的
网络安全发59条规定
网络安全设计版图
国内云服务器加盟项目
特朗普宣布将组建网络安全企业家
小企业如何网络安全
广西广播电视台网络安全教育