Python刷视频

一、登录视频网站(XXT)

二、进入课程判断是否完成

三、切换不同章节和小节视频进行播放

四、每次播放一个小节后点击返回课程

五、主函数

总结


以下代码主要是使用python的selenium库来完成视频的自动播放的,主要过程是登录视频网站,再到达视频播放界面,点击视频播放,判断视频是否播放完成,同时解决如何播放一个界面中有多个视频的播放和切换不同小节和章节的视频播放,最后播放完所有视频

一、登录视频网站(XXT)

from selenium import webdriver  # 导入库
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import timeweb = webdriver.Chrome()
# 超星网站
url = "http://passport2.chaoxing.com/wunitlogin?refer=http%3A%2F%2Fi.mooc.chaoxing.com"
web.get(url)# 反检查
option = Options()
option.add_argument('--disable-blink-features=AutomationControlled')verify_code=input('请输入验证码:')
# 第一次登录进入学习通
def register_first(verify_code):#输入用户名和密码#account=input("请输入账号:")#password=input("请输入密码:")web.find_element(By.XPATH, '//*[@id="FidName"]').send_keys("学校名称")time.sleep(3)web.find_element(By.XPATH, '//*[@id="2201"]').click()time.sleep(3)web.find_element(By.XPATH, '//*[@id="idNumber"]').send_keys("学号")web.find_element(By.XPATH, '//*[@id="pwd"]').send_keys("密码")# 验证码web.find_element(By.XPATH, '//*[@id="numcode"]').send_keys(verify_code)# 点击登录web.find_element(By.XPATH, '//*[@id="userLogin"]/div/a').click()time.sleep(3)

二、进入课程判断是否完成

# 进入课程
def into_course():# iframe框架,需要先跳转web.switch_to.frame("frame_content")time.sleep(3)# 课程course = web.find_element(By.XPATH,'//*[@id="course_206634766_54029448"]/div[2]/h3/a/span')# 解决元素被遮挡点击不了的问题web.execute_script('arguments[0].click()',course)time.sleep(3)# 跳转页面web.switch_to.window(web.window_handles[-1])# 进入章节web.find_element(By.XPATH, '//*[@id="boxscrollleft"]/div/ul[1]/li[2]/a').click()print('进入课程页')# iframe框架,需要先跳转web.switch_to.frame("frame_content-zj")time.sleep(3)# 判断章节是否已经完成
def OK(li):time.sleep(3)# 获取课程状态status = li.find_element(By.XPATH,'./div/div/div[3]/div/span').get_attribute("textContent")return status

三、先切换不同章节,再到每一章的每一个小节视频进行播放

# 跳转后,播放同一章中的小节,同时获取一节中有几个iframe
# 传入同一章的每一节
def play_next(li):time.sleep(6)vedio_window = li.find_element(By.XPATH, './div/div/div[2]/span')web.execute_script("arguments[0].click();", vedio_window)time.sleep(3)web.switch_to.frame("iframe")time.sleep(3)num_vedio = web.find_elements(By.XPATH, '//*[@id="ext-gen1045"]/div/div/p')time.sleep(1)# print(len(num_vedio))# print('播放下一节')# 返回一节中的视频数目return len(num_vedio)# 播放同一节中的所有视频  点击静音 每次进入下一个视频的iframe
def play_vedio(symbol,i):# 上一个视频播放完成,播放下一个视频if symbol:try:# 开始播放下一个视频web.switch_to.default_content()web.switch_to.frame("iframe")web.switch_to.frame(i)paly_course = web.find_element(By.XPATH,"//*[@id='video']/button")web.execute_script("arguments[0].click();", paly_course)time.sleep(3)voice = web.find_element(By.XPATH, '//*[@id="video"]/div[5]/div[6]/button')web.execute_script('arguments[0].click()', voice)time.sleep(3)print(f'开始播放第{i+1}个视频')except:print(f"没有第{i+1}个视频")# 判断视频是否播放完成
def vedio_finished():try:while True:time.sleep(3)vedio_stat_time = web.find_element(By.XPATH,'//*[@id="video"]/div[5]/div[2]/span[2]').get_attribute("textContent")vedio_end_time = web.find_element(By.XPATH,'//*[@id="video"]/div[5]/div[4]/span[2]').get_attribute("textContent")print("正在播放的时间和结束时间是:", vedio_stat_time, vedio_end_time)# 每10秒检测一次视频是否完成time.sleep(10)if vedio_end_time == vedio_stat_time:print('视频播放完成')return 1except:print('视频不可播放')return 1

四、每次播放一个小节后点击返回课程​​​​​​​

​​​​​​​

# 点击返回课程
def Retrun_course():# 跳到最外层的页面web.switch_to.default_content()time.sleep(3)web.find_element(By.XPATH, '/html/body/div[4]/div/div[1]/a').click()time.sleep(3)# 同时进入新的iframe的框架web.switch_to.frame("frame_content-zj")time.sleep(3)print('点击返回课程')

五、主函数

# 主函数
if __name__ == '__main__':# 进入学习通register_first(verify_code)# 进入课程into_course()# 播放所有的章节,一共六个章节for i in range(2,8):# 获取每一个章节中的所有小节li_list = web.find_elements(By.XPATH, f'//*[@id="fanyaChapter"]/div/div[2]/div[2]/div[{i}]/div[2]/ul/li')time.sleep(3)# 播放一个章节中的一个小节for j in range(len(li_list)):# print(li_list[j])# 跳转后,判断每一小节完成的状态,完成则跳过status = OK(li_list[j])print("每一小节状态:",status)# 判断视频是否播放完成if status != "已完成":# 点击进入下一章的视频num_vedio = play_next(li_list[j])# 允许播放symbol = 1;# 播放每一节中的每一个视频for k in range(0,num_vedio):play_vedio(symbol,k)# 判断视频是否播放完,播放完,则进入下一个symbol = vedio_finished()# print("symbol:",symbol)# 完成一节的所有iframe后点击返回课程Retrun_course()# 每次重新获取一下列表li_list = web.find_elements(By.XPATH,f'//*[@id="fanyaChapter"]/div/div[2]/div[2]/div[{i}]/div[2]/ul/li')else:# 已完成则跳过continue

总结

验证码部分还可以使用超级鹰进行识别,从而实现完全的自动化,提高效率,该部分可以自行学习,比较简单

参考资料:

https://blog.csdn.net/s_frozen/article/details/121136832?spm=1001.2014.3001.5506

https://blog.csdn.net/zhangkexin_z/article/details/90232187?spm=1001.2014.3001.5506

Python如何自动播放视频(XXT)相关推荐

  1. 自动播放视频并录屏保存的python实现

    需求: 在路飞学城买了一个python全栈的在线课程,由于前期没有抓紧时间学习,导致课程到期前2个月感觉视频看不完了,所以想到用python+selenium自动播放视频,自动录屏保存,这样就可以每天 ...

  2. Python+BeautifulSoup+Selenium模拟浏览器循环自动播放视频,如哔哩哔哩某个UP主的视频

    1.前言 计算机的出现,推动了人类社会的进步,使得人们更高效的工作或是生活.当我们很"懒"的时候,计算机就能站出来,帮助我们做一些我们觉得浪费时间的事情了.你嫌用手点鼠标麻烦,计算 ...

  3. 解决微信浏览器video标签自动播放视频失效

    正常在浏览器好好的视频,在微信内置浏览器中点击播放全屏,样式也不一样,自动播放失效.罪魁祸首是微信把video标签都成微信规则的了.下面方式可以解决视频播放全屏以及不能自动播放的问题. <vid ...

  4. 如何阻止YouTube在iOS,Android和Web上自动播放视频

    Over at YouTube, they love it when you watch more YouTube. If you're sick of YouTube automatically q ...

  5. 自动点击器如何设置最快_微视APP如何设置自动播放视频-微视APP设置自动播放视频的方法...

    微视APP是一款功能实用的短视频软件,在手机上安装这款软件之后就可以在使用手机的时候点击打开微视,查看一些自己感兴趣的视频,现在很多视频应用都是采用滑动的方式来进行切换视频,如果用户的手不方便进行滑动 ...

  6. html自动播放视频不可用muted,html5_videoaudio的autoplay属性失效的解决方法

    autoPlay属性失效的原因 chrome 66以上的版本为了避免多媒体标签产生随机噪音,规定了不为静音的标签不能自动播放,需手动触发开始播放,标签定义为静音(muted: true)才可以自动播放 ...

  7. 哔哩哔哩自动播放视频

    哔哩哔哩自动播放视频 # datetime:2020/10/7 16:33 # bilibili from selenium import webdriver from selenium.webdri ...

  8. Mac系统如何取消自动播放视频和实况照片?

    Mac系统是一款非常好用的电脑操作系统,在使用这款操作系统的过程中,当我们打开照片或者视频的时候,系统会自动播放视频以及实况照片.如果电脑连接的是数据流量,播放视频以及照片就会对流量造成很大的消耗,在 ...

  9. Mac中如何取消“自动播放视频和实况照片”的操作方法

    Mac系统是一款非常好用的电脑操作系统,在使用这款操作系统的过程中,当我们打开照片或者视频的时候,系统会自动播放视频以及实况照片.如果电脑连接的是数据流量,播放视频以及照片就会对流量造成很大的消耗,在 ...

  10. 12_微信小程序之微信视频号滚动自动播放视频效果实现

    12_微信小程序之微信视频号滚动自动播放视频效果实现 一.获取视频的分辨率.时长.缩略图 微信小程序提供了三种方式可以获取视频的分辨率.时长: wx.getVideoInfo(Object) :只能用 ...

最新文章

  1. vue实现多个元素或多个组件之间动画效果
  2. JUC系列(六) | Callable和Future接口详解使用、FutureTask应用 获取异步线程返回值
  3. Newtonsoft.Json 的序列化与反序列化
  4. git github的使用
  5. java properties读取缓存_java 读取 properties文件的各种方法
  6. 中奖福利事宜 和 跪求意见
  7. Qlik 助力安井食品实现企业智能决策、高效运营
  8. Bootstrap Table插件 页面跳转后再回来保存搜索的值
  9. Oracle中使用SQL语句修改字段类型
  10. java将汉字字符串转换为拼音(包含多音字)
  11. “松鼠症”患者看过来 整理电子相册的秘笈都在这了
  12. 新趋势:区块链引领游戏行业发展
  13. 微信小程序爱江山更爱美人忘记服务器,爱江山更爱美人微信小程序
  14. 国内云通讯渗透率不足3% 容联云SaaS业务迈入高速发展期
  15. serviceaccounts is forbidden: User “system:serviceaccount:kubernetes-dashboard:kubernetes-dashboard“
  16. 单片机怎么通过按键控制计时器的开始和停止_学习电路仿真:基于proteus电路仿真软件的交通灯控制电路设计...
  17. 北邮某牛人找工作切身感受
  18. 【LVGL】学习笔记--(2)GUI Guider的使用
  19. 【高阶】一个用户态的RCU实现liburcu
  20. 物联网时代的十大黄金定律,你造吗?

热门文章

  1. 汇编语言--如何调用子程序
  2. 极致小巧的画图工具,只有548K,有20多种工具,图层功能 类PS
  3. 毕业设计总结篇之终结篇——基于android的创意展示平台(混合app)
  4. 潮汕地区2-汕头观感
  5. win10系统mysql重新配置密码
  6. 小米平板1的刷机经历
  7. 小知识点日记 2013-1-17 至 2013-6-13
  8. ln软链接调试mininet
  9. 酷睿i3 10105f参数 i310105f属于什么水平 i3 10105f性能怎么样
  10. windows server 远程登录后总是出现屏幕键盘,烦死人了