Python如何利用Selenium实现自动观看学习通视频
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章给大家分享的是有关Python如何利用Selenium实现自动观看学习通视频的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、登录以信号与系统课程为例,直接输入网址
千家信息网最后更新 2024年11月24日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安全错误
数据库的锁怎样保障安全
网络安全具体事例
第七大道网络技术有限公司
我是网络安全小卫士
油田软件开发的意义
怎么把网络安全作为教学重点
软件开发店
我的世界服务器夜视
德国原生iP 服务器
苏州阿里云数据库推送
maxcompute 数据库
用服务器怎么渲染效果图
部队网络安全内容大全
软件开发的办公软件
网络技术第三次浪潮是什么
金山区网络软件开发定制收费
安徽省蚌埠软件开发有限公司
病历数据库连接失败
免费下载软件开发方案模板
网络安全法专家咨询会
癌症检查正常数据库
网络安全知识竞赛过程总结
鼎信软件开发工程师
日照临升互联网科技
阳江电视台网络安全
网络技术服务范本
根服务器 费用
重装系统后数据库
怎么样导出微信群数据库
龙腾网络安全
数据库和数据仓库联系和区别