使用python的selenium库自动批量刷长江雨课堂的课件视频

这篇具有很好参考价值的文章主要介绍了使用python的selenium库自动批量刷长江雨课堂的课件视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

         

        最近发现自己选的线上通识课在雨课堂上面上传了课件,数了一下一共要看100多个视频,平均时长5-20分钟,而雨课堂的视频无法手动拉动进度条,也无法调整播放速度,因此如果一个一个刷将会非常耗时,作者因此借助自己的爬虫知识,以及在网上搜索过相关经验之后,自己编写了这么一个刷课间的脚本,下面来讲一下运作原理:

一.首先配置相关的环境

     最核心的库就是selenium==4.0.0和urllib3==1.26.2,这里的selenium版本是不能改的,作者试过用最新版的selenium会出现和urllib版本不适配的问题。

     另一个核心就是必须要有谷歌浏览器和谷歌浏览器的驱动,且二者的版本必须一致,作者自己的版本是117,浏览器从网上就可以直接下载,驱动的话这里有详细的下载教程:

【chromedriver与chrome各版本及下载地址】

驱动文件必须放在python解释器的Scripts文件夹下,并且配置到环境变量中,具体教程如下:

 【PyCharm安装配置谷歌浏览器驱动】

全部配置完成之后就可以开始配置雨课堂了!

二.配置谷歌浏览器的参数

我们知道selenium是专门用于模拟人类进行网页操作的库,因此程序接收到的信息与浏览器完全一致,为了显示出程序的优越性,我们还要设置chrom的一些参数,包括下面几个:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json
import time
opt=Options()
opt.add_argument("--headless")
opt.add_argument("--disable-gpu")  #用于设置无头浏览器,让程序在后台运行
opt.add_argument("--mute-audio")  #用于刷视频时静音,这个很重要!
web=webdriver.Chrome(options=opt) #获取chrome浏览器的驱动,并初始化Chrome浏览器

三.设置雨课堂的cookie文件,用于自动登录。

        我们知道雨课堂每次登陆都是需要输入账号和密码的,因此保存一个cookie将会对后面的免登录有很大帮助,下面的代码运行一次即可,且建议单独创建一个py文件运行,运行后,将创建一个txt文件存储cookie,并在后面程序运行时载入此cookie,代码运行时,将跳出雨课堂的扫码登录界面,扫码后成功登陆,即可关闭,此时已经保存成功。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json
import time
#利用selenium获取网页cookies,从而免登录(这部分代码执行一次即可)
time.sleep(15)
with open('cookie.txt','w') as f:
   dictCookies = web.get_cookies()    # 获取list的cookies
   jsonCookies = json.dumps(dictCookies)
   f.write(jsonCookies)
print('cookie保存成功!')

四.运行自动程序(核心)。

下面为核心代码:

        运行逻辑为,每次打开5个要刷的视频,这个量是一般电脑可以承受的网络用量,再多的话网络就受不了了,然后得到5个视频中时长最长的那一个,然后程序休眠,等待所有视频刷完,然后再开启下面5个视频,以此类推。。。直到所有视频刷完,程序结束。

        代码中min_id和max_id需要填入自己的视频id号,最低的编号就是雨课堂要刷的第一个课件的网页后缀的最后一个数字,最高的编号就是雨课堂要刷的最后一个课件的网页后缀的最后一个数字,注意,如果这个区间内有课后作业,程序将会跳过,并且经过作者实际操作运行一轮后发现偶然会有几个视频漏掉,建议在跑完一轮后检查一遍,把没有刷成功的视频编号制成list列表,并替换代码中的x。

        另外,偶然会出现5个视频连续打开失败的情况,或者程序刚运行就报错结束了,这种情况建议是重新启动程序,多试几次。文章来源地址https://www.toymoban.com/news/detail-751419.html

#---------------------------------------初始化---------------------
#首先打开主界面,输入cookie
org= f'https://changjiang.yuketang.cn/v2/web/studentLog/13544910'
web.get(org)
time.sleep(6)
with open('cookie.txt', 'r', encoding='utf8') as f:
    listCookies = json.loads(f.read())
    for cookie in listCookies:
        cookie_dict = {
            'domain': cookie.get('domain'),
            'name': cookie.get('name'),
            'value': cookie.get('value'),
            'path': '/',
            "expires": '',
            'sameSite': 'None',
            'secure': cookie.get('secure')
        }
        web.add_cookie(cookie_dict)  # 添加cookie
web.get(org)  # 更新cookies后进入目标网页
#-------------------------主函数--------------------------------------------
def process(i):
    url = f'https://changjiang.yuketang.cn/v2/web/xcloud/video-student/13544910/{i}'
    js = "window.open('{}','_blank');"
    web.execute_script(js.format(f'https://changjiang.yuketang.cn/v2/web/xcloud/video-student/13544910/{i}'))
    time.sleep(5)
    web.switch_to.window(web.window_handles[-1])

    try:
        web.find_element_by_xpath('//*[@id="video-box"]/div/xt-wrap/xt-bigbutton/button').click()
        #点击开始播放
        wait = web.find_element_by_xpath('//*[@id="video-box"]/div/xt-wrap/xt-controls/xt-inner/xt-time/span[2]').text
        print('序号', i, '打开成功')
    except:
        try:
            print('序号', i, '打开失败,刷新')
            web.refresh()
            time.sleep(5)
            web.find_element_by_xpath('//*[@id="video-box"]/div/xt-wrap/xt-bigbutton/button').click()
            wait = web.find_element_by_xpath('//*[@id="video-box"]/div/xt-wrap/xt-controls/xt-inner/xt-time/span[2]').text
        except:
            wait='00:00:05'
            print(i,'失败,挂起')
            pass
    times=int(wait.split(':')[1])*60+int(wait.split(':')[-1])
    print('时长',times,'s')
    time_list.append(times)
    time.sleep(2)

#-------------------------------调试器-----------------------------
min_id='xxxx'  #这里输入视频编号最低值
max_id='xxxx'  #这里输入视频编号最高值
x=range(min_id,max_id)
i=0
while(i<len(x)):
    time_list = []
    for j in x[i:i+5]:
        try:
            process(i)
        except:
            time.sleep(2)
            print('序号', i, '仍然失败,可能是习题')
            pass
    print('最长的视频长达:', max(time_list), '将在该时间后关闭所有浏览器')
    time.sleep(max(time_list))
    i+=5

五.完整代码如下

#这里有个很坑的地方,selenium的版本只能用旧版的4.0.0,否则就会出现闪退的现象
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import json
import time
opt=Options()
opt.add_argument("--headless")
opt.add_argument("--disable-gpu")  #用于设置无头浏览器,让程序在后台运行
opt.add_argument("--mute-audio")  #用于刷视频时静音,这个很重要!
web=webdriver.Chrome(options=opt) #获取chrome浏览器的驱动,并初始化Chrome浏览器



#利用selenium获取网页cookies,从而免登录(这部分代码执行一次即可)
'''
time.sleep(15)
with open('cookie.txt','w') as f:
   dictCookies = web.get_cookies()    # 获取list的cookies
   jsonCookies = json.dumps(dictCookies)
   f.write(jsonCookies)

'''


#---------------------------------------初始化---------------------
#首先打开主界面,输入cookie
org= f'https://changjiang.yuketang.cn/v2/web/studentLog/13544910'
web.get(org)
time.sleep(6)
with open('cookie.txt', 'r', encoding='utf8') as f:
    listCookies = json.loads(f.read())
    for cookie in listCookies:
        cookie_dict = {
            'domain': cookie.get('domain'),
            'name': cookie.get('name'),
            'value': cookie.get('value'),
            'path': '/',
            "expires": '',
            'sameSite': 'None',
            'secure': cookie.get('secure')
        }
        web.add_cookie(cookie_dict)  # 添加cookie
web.get(org)  # 更新cookies后进入目标网页
#-------------------------主函数--------------------------------------------
def process(i):
    url = f'https://changjiang.yuketang.cn/v2/web/xcloud/video-student/13544910/{i}'
    js = "window.open('{}','_blank');"
    web.execute_script(js.format(f'https://changjiang.yuketang.cn/v2/web/xcloud/video-student/13544910/{i}'))
    time.sleep(5)
    web.switch_to.window(web.window_handles[-1])

    try:
        web.find_element_by_xpath('//*[@id="video-box"]/div/xt-wrap/xt-bigbutton/button').click()
        #点击开始播放
        wait = web.find_element_by_xpath('//*[@id="video-box"]/div/xt-wrap/xt-controls/xt-inner/xt-time/span[2]').text
        print('序号', i, '打开成功')
    except:
        try:
            print('序号', i, '打开失败,刷新')
            web.refresh()
            time.sleep(5)
            web.find_element_by_xpath('//*[@id="video-box"]/div/xt-wrap/xt-bigbutton/button').click()
            wait = web.find_element_by_xpath('//*[@id="video-box"]/div/xt-wrap/xt-controls/xt-inner/xt-time/span[2]').text
        except:
            wait='00:00:05'
            print(i,'失败,挂起')
            pass
    times=int(wait.split(':')[1])*60+int(wait.split(':')[-1])
    print('时长',times,'s')
    time_list.append(times)
    time.sleep(2)

#-------------------------------调试器-----------------------------
min_id='xxxx'  #这里输入视频编号最低值
max_id='xxxx'  #这里输入视频编号最高值
x=range(min_id,max_id)
i=0
while(i<len(x)):
    time_list = []
    for j in x[i:i+5]:
        try:
            process(i)
        except:
            time.sleep(2)
            print('序号', i, '仍然失败,可能是习题')
            pass
    print('最长的视频长达:', max(time_list), '将在该时间后关闭所有浏览器')
    time.sleep(max(time_list))
    i+=5

到了这里,关于使用python的selenium库自动批量刷长江雨课堂的课件视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mac 下 Python+Selenium 自动上传西瓜视频

    研究下 Python+Selenium 自动化测试框架,简单实现 Mac 下自动化批量上传视频西瓜视频并发布,分享给需要的同学(未做过多的异常处理)。 首先通过手工手机号登录,保存西瓜视频网站的 cookie 文件 之后加载 cookie 内容,使用脚本批量上传视频,保存到草稿(也可自动发布,为

    2024年04月14日
    浏览(56)
  • 自动驾驶采集多视角图像处理(python实现不同文件夹下同名图片批量拼接并生成视频)

    目录 1.图像拼接 2.合成视频 2.1 cv2.videowriter_fourcc功能介绍 2.2读取图片合成视频 实现目标:将自动驾驶车6个摄像头采集到的图片,按照正确顺序拼接显示,nuScenes数据集测试如下: 图像存放文件夹目录如下: 每个目录下有相同名称,不同视角采集到的图像 。 先显示图片,代

    2024年01月18日
    浏览(66)
  • 基于python实现Web自动化测试(selenium)、API自动化测试(requests)&附学习视频

    另一篇文章 :自动化测试框架(pytest)附学习视频 学习视频,学习文档-白月黑羽 说明: 1紧跟着写的不加/,不加空格-表示同一级别信息,加空格表示后代 2.css定位tag,id,class时分别有不同的标识,其他属性都要加[]进行搜索, Xpath所有属性都要都加【】,tag不用 3. css在使用ta

    2024年02月03日
    浏览(108)
  • 如何使用python快速将大批量图片合成为视频?

    由于CSDN大批量导入图片容易出现乱序,本程序将支撑图片转为视频,便于用视频的方式展示文件内容。 由于图片名称复杂多样,为便于统一化处理,增强程序的通用性,使用改名程序可以降低手动调整的复杂度。 改名之后的效果: 注意此部分的图片大小仍需要手动修改或输

    2024年02月04日
    浏览(49)
  • Selenium批量自动化获取并下载图片

    Selenium批量自动化获取并下载图片 在现代的Web开发中,自动化测试和数据抓取已经成为不可或缺的一部分。Selenium作为一款强大的自动化测试工具,不仅可以用于测试Web应用,还可以用于批量获取网页上的图片。本文将介绍如何使用Selenium批量自动化获取并下载图片。 一、准

    2024年01月22日
    浏览(46)
  • 【办公自动化】使用Python批量生成PPT版荣誉证书

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、Python处理PPT 二、批量生成PPT版荣誉证书  三、往期推荐           使用Python处

    2024年02月12日
    浏览(45)
  • 使用Python批量下载ts格式视频,并合并为mp4格式,非常简单

    哈喽大家好 今天咱们来实现一下批量下载ts格式文件后,如何合并为MP4视频。 网页文件下载其实都可以通过requests.get以文件流的形式获取,并以字节的形式写入本地文件即可。 代码如下:   我发现在保存这一步会存在性能卡点(打印saving之后等了很久都没有生成文件),暂

    2024年02月07日
    浏览(56)
  • 【办公自动化】使用Python批量处理Excel文件并转为csv文件

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 前言 一、Python处理Excel 二、批量处理Excel文件并转为csv文件 三、往期推荐          

    2024年02月10日
    浏览(48)
  • python爬虫篇:使用Selenium自动打开小说网页并自动浏览

    需求:python,pycharm,Selenium库,火狐或ie浏览器 文章目录 一、 自动打开小说网页并浏览 简单使用Selenium库,实现对浏览器的自动化操作 一、自动打开小说网页并浏览 方法:使用命令行下载或者在pycharm中下载 使用命令行下载:打开cmd终端,输入pip install selenium  在pycharm中下

    2024年02月10日
    浏览(55)
  • Python 使用selenium 实现大麦网自动购票

    前言 大麦网是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域 今天,我们要用代码来实现他的购票过程 知识点: 面向对象编程 selenium 操作浏览器 pickle 保存和读取Cookie实现免登陆 time 做延时操作 os 创建文件,判断文件是否存在 开发环

    2023年04月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包