51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

电子科技大学/UESTC积极分子培训视频自动播放python脚本

原理分析

​ python 的selenium 库可模拟人的行为去操作浏览器, 是web自动化测试工具, 同时也可定制一些特定脚本去模拟人观看视频.

​ selenium的使用需要用到浏览器驱动,此处以chrome为例进行测试.

环境配置与搭建

​ python:3.10

​ selenium:4.1.3

如何安装selenium?

在pycharm的Terminal(终端)执行pip install selenium

​ chrome:100.0.4896.75

​ 如何查看chrome版本?

在chrome地址栏输入chrome://version,第一行即是版本

​ chrome驱动:100.0.4896.60

如何根据下载驱动?

https://chromedriver.storage.googleapis.com/index.html在网址中找到对应chrome版本的驱动(版本号相近即可),

下载"chromedriver_win32.zip",将里面的"chromedriver.exe"放到与main.py同一目录下

成果演示


实现过程

1.安装完selenium和python后,将驱动安放好位置,还需要进行一些额外配置

首先将chrome安装目录"C:\Program Files\Google\Chrome\Application"(默认为这个,需要根据你的电脑自行查找)添加到环境变量path,添加过程详见百度

接着按下win+R,输入命令

chrome.exe --remote-debugging-port=9222 --user-data-dir="D:/selenium_test"

会打开浏览器调试窗口

2.我们首先需要在上一步打开的窗口人为登录,进入如下界面(若使用selenium登录需要用到验证码,而验证码的识别需要第三方接口...付费,因此略去)

3.接下来运行程序


注意问题

1.不要最小化浏览器,推荐在夜晚刷视频.

2.脚本虽设置检测暂停之后自动播放,但有时会遇到网站一直暂停的情况,此时需要点击浏览器聚焦

3.最好不要在调试浏览器的窗口新开标签页

4.无第三方题库接口,目前打算利用爬虫爬取题库,人工录入答案.

5.可使用浏览器插件global speed(同时点击设置,开启幽灵模式),开始16倍速,更为方便.

代码:

# chrome.exe --remote-debugging-port=9222 --user-data-dir="D:/selenium_test"
# https://dxpx.uestc.edu.cn/
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

def address_pause(): """处理视频暂停问题""" if wd.find_element(By.CSS_SELECTOR, '#wrapper > div > div.plyr__controls > button:nth-child(1)').get_attribute( "aria-label") == "Play": wd.find_element(By.CSS_SELECTOR, '#wrapper > div > div.plyr__controls > button:nth-child(1)').send_keys( Keys.ENTER) print("检测到视频暂停,继续播放")

def remove_blank(): """更改属性target为'_self'""" js = 'var items = document.getElementsByTagName("a");for (var i = 0; i < items.length; i++) {var tmp = items['

'i];tmp.target="_self";} ' wd.execute_script(js)

def manage(j): """处理视频""" necessary = wd.find_elements(By.CSS_SELECTOR, 'body > div > div.w1150 > div.wrap_right > div.lesson1_cont.q_lesson1_cont > ' 'div.lesson1_lists > ul > li') # 必修的课程列表 necessary[j].find_element(By.CSS_SELECTOR, 'h2 a').send_keys(Keys.ENTER) # 此后进入视频 time.sleep(3) little_one = wd.find_elements(By.CSS_SELECTOR, 'a[style]') # 侧边栏的课程列表 length_little_one = len(little_one) index = 1 # 第几个视频 print("成功加载侧边栏的课程列表,一共{}个视频".format(length_little_one)) for k in range(length_little_one): little_one = wd.find_elements(By.CSS_SELECTOR, 'a[style]') # 侧边栏的课程列表 print("正在播放第{}个视频,一共{}个".format(index, length_little_one)) if "red" in little_one[k].get_attribute("style"): print("视频{}播放完成,即将播放下一个视频".format(index)) index += 1 continue little_one[k].send_keys(Keys.ENTER) while True: print("剩余时间:" + wd.find_element(By.CSS_SELECTOR, 'div[aria-label="Current time"]').get_attribute( "innerText").replace('-', '')) address_pause() time.sleep(3) if wd.find_element(By.CSS_SELECTOR, 'div[aria-label="Current time"]').get_attribute( "innerText").replace('-', '') == "00:00": print('播放完成,点击按钮"我知道了"') break index += 1

selenium预处理

option = Options() option.add_experimental_option("debuggerAddress", "127.0.0.1:9222") wd = webdriver.Chrome(service=Service('chromedriver.exe'), options=option) wd.implicitly_wait(3) # 隐式等待

study_list = wd.find_elements(By.CSS_SELECTOR, 'a.study') # 按钮'开始学习'的列表 length_study_list = len(study_list) # 一共几门课 index_study_list = 1 for i in range(length_study_list): study_list = wd.find_elements(By.CSS_SELECTOR, 'a.study') # 按钮'开始学习'的列表 if index_study_list == 0 or index_study_list == 1: index_study_list += 1 continue study_list[i].send_keys(Keys.ENTER) # 点击按钮'开始学习' wd.find_element(By.CSS_SELECTOR, 'body > div > div.w1150 > div.wrap_right > div.lesson1_cont.q_lesson1_cont > div.lesson1_title > ' 'div > a:nth-child(2)').send_keys( Keys.ENTER) # 点击'按钮'必修 necessary_list = wd.find_elements(By.CSS_SELECTOR, 'body > div > div.w1150 > div.wrap_right > div.lesson1_cont.q_lesson1_cont > ' 'div.lesson1_lists > ul > li') # 必修的课程列表 tmp_url = wd.current_url length_necessary_list = len(necessary_list) # 必修课的个数 index_necessary_list = 1 # 第几个必修课 remove_blank() # 移除target="_blank"属性 for j in range(length_necessary_list): manage(j) # 处理视频 wd.get(tmp_url) # 处理完视频回退 remove_blank() # 移除target="_blank"属性 print("专题{}/{}:完成必修课程{}/{},三秒后进入下一个课程...".format(index_study_list, length_study_list, index_necessary_list, length_necessary_list)) time.sleep(3) index_necessary_list += 1 index_study_list += 1 # 专题加一 wd.get("https://dxpx.uestc.edu.cn/jjfz/lesson")


赞(1)
未经允许不得转载:工具盒子 » 电子科技大学/UESTC积极分子培训视频自动播放python脚本