使用python Selenium实现智慧树界面化自动刷网课 chromehandless实现智慧树无界面化自动刷网课
最近看到隔壁室友在学习python,再加上那句“爬虫学得好,监狱进的早”,于是有了一个大胆的想法,刷网课。我是通过使用selenium驱动真实的浏览器来实现
1.自动点击播放
2.自动切换到流畅画质(省流量)
3.自动1.5倍速
4.自动静音
4.自动检查当前播放时间,结束后调到下一集
由于是驱动真实的浏览器来实现一系列操作,所以理论上不会有封号危险 (祝你好运)
-
# _*_ codeing utf-8 _*_
-
# @TIME : 2021/11/6 22:30
-
# @Author : wust Qiuyu
-
# @File : test_selenium
-
# @Project : 代码
-
-
-
from selenium import webdriver
-
from selenium.webdriver.common.by import By
-
import time
-
from selenium.webdriver import ActionChains
-
from selenium.webdriver.chrome.options import Options
-
-
-
# 无界面
-
def share_browser(): # 初始化
-
chrome_options = Options()
-
chrome_options.add_argument('--headless')
-
chrome_options.add_argument('--disable-gpu')
-
-
# 浏览器的安装路径 打开文件位置 #这个路径是你谷歌浏览器的路径
-
# chrome浏览器的安装位置 Chromedriver需在当前py文件的相同路径下
-
path = r'C:\Users\19436\AppData\Local\Google\Chrome\Application\chrome.exe'
-
chrome_options.binary_location = path
-
browser = webdriver.Chrome(chrome_options=chrome_options)
-
return browser
-
-
# 取消下方注释即可使用有界面
-
# # # # # # # # # # # # # # # # # # # # # #
-
# 加载驱动 有界面 #
-
path = './chromedriver.exe' #
-
browser = webdriver.Chrome(path) #
-
# # # # # # # # # # # # # # # # # # # # # #
-
-
-
# # # # # # # # # # # # # # # # # # # # # #
-
# # 加载驱动 无界面 #
-
# browser = share_browser() #
-
# # # # # # # # # # # # # # # # # # # # # #
-
-
-
-
# 答题
-
def response():
-
try:
-
#检查是否有弹窗检验
-
browser.find_element(By.XPATH,'//div[@id="app"]/div[1]/div[7]/div[@class="el-dialog"]')
-
option = browser.find_elements(By.XPATH, '//ul[@class="topic-list"]/li')
-
for i in range(len(option)):
-
option[i].click()
-
-
# 获取正确答案
-
answer = browser.find_element(By.XPATH,"//p[@class='answer']/span").text.split(',')
-
print('正确答案是:' str(answer))
-
-
# 点击正确答案
-
-
for i in range(len(option)):
-
print('选项' str(i) ':' option[i].text)
-
flag=False
-
for j in range(len(answer)):
-
if option[i].text.find(answer[j])!=-1:
-
flag=True
-
break
-
if(flag==False):
-
option[i].click()
-
# 点击关闭
-
close = browser.find_element(By.XPATH,'//div[@class="btn"]')
-
close.click()
-
print("答题成功!\t\t\t√")
-
play()
-
return True
-
except:
-
print("未找到弹窗测验\t\t✘")
-
return False
-
-
-
# 点击我知道了
-
def clickIknow():
-
try:
-
# 检测是否有我知道了
-
browser.find_element(By.XPATH,'//div[@id="app"]/div[1]/div[6]')
-
# 点击我知道了
-
iKnow = browser.find_element(By.XPATH,'//div[@id="app"]/div[1]/div[6]/div[1]/div[3]/span/button')
-
iKnow.click()
-
print("关闭我知道成功!\t√")
-
return True
-
except:
-
print("未发现我知道了\t\t✘")
-
return False
-
-
-
# 点击学前必读
-
def clickBeforeRead():
-
try:
-
# 检测是否有学前必读
-
browser.find_element(By.XPATH,'//div[@id="app"]/div[1]/div[7]')
-
# 点击×
-
close = browser.find_element(By.XPATH,'//div[@id="app"]/div[1]/div[7]/div[2]/div[1]/i')
-
close.click()
-
print("关闭学前必读成功!\t√")
-
return True
-
except:
-
print("未发现学前必读\t\t✘")
-
return False
-
-
-
# 获取当前播放时间
-
def getCurrentTime():
-
openControlsBar()
-
time = browser.find_element(By.XPATH,'//div[@class="nPlayTime"]/span[1]').text
-
print('当前播放时间为:' time)
-
return time
-
-
# 获取当前视频总时间
-
def getTotalTime():
-
openControlsBar()
-
time = browser.find_element(By.XPATH,'//div[@class="nPlayTime"]/span[2]').text
-
print('本集视频时间为:' time)
-
return time
-
-
# 播放下一个视频
-
def nextVideo():
-
openControlsBar()
-
nextBtn = browser.find_element(By.XPATH,'//div[@id="nextBtn"]')
-
nextBtn.click()
-
print('\n切换下一个视频\n')
-
-
# 1.5速度
-
def fasterPlay():
-
try:
-
openControlsBar()
-
speed = browser.find_element(By.XPATH,' //div[@class="speedBox"]/div/div[1]')
-
speedbox = browser.find_element(By.XPATH,'//div[@class="speedBox"]')
-
time.sleep(5)
-
openControlsBar()
-
ActionChains(browser).move_to_element(speedbox).perform()
-
speed.click()
-
print('成功切换成' speed.text '倍速\t√')
-
except:
-
print('切换成' speed.text '倍速失败,稍后将重试\t✘')
-
-
# 点击开始播放
-
def play():
-
start_status = browser.find_element(By.XPATH,'//div[@id="playButton"]').get_attribute('class')
-
start_button = browser.find_element(By.XPATH,'//div[@id="playButton"]')
-
time.sleep(10)
-
if start_status.find('playButton')!=-1:
-
print('当前静止')
-
openControlsBar()
-
time.sleep(1)
-
start_button.click()
-
print('点击播放成功\t\t√')
-
-
# 点击静音
-
def noVoice():
-
try:
-
voice_status = browser.find_element(By.XPATH,'//div[@id="vjs_container"]/div[10]/div[6]').get_attribute('class')
-
voice_buttton= browser.find_element(By.XPATH,'//div[@id="vjs_container"]/div[10]/div[6]/div[1]')
-
print(voice_status)
-
if voice_status.find('volumeNone')==-1:
-
print('此时非静音')
-
time.sleep(5)
-
openControlsBar()
-
voice_buttton.click()
-
print('静音成功\t\t\t√')
-
except:
-
print('静音失败,稍后将重试\t\t✘')
-
-
-
# 切换流畅画质
-
def changeVideoQuality():
-
try:
-
openControlsBar()
-
videoQuality = browser.find_element(By.XPATH,' //div[@class="definiBox"]/div/b[1]')
-
definiBox = browser.find_element(By.XPATH,' //div[@class="definiBox"]')
-
time.sleep(5)
-
openControlsBar()
-
ActionChains(browser).move_to_element(definiBox).perform()
-
videoQuality.click()
-
print('成功切换到流畅画质\t√')
-
checkWindow()
-
except:
-
print('切换到流畅画质失败,稍后将重试\t\t✘')
-
-
# 打开ControlsBar
-
def openControlsBar():
-
checkWindow()
-
controlsBar = browser.find_element(By.XPATH,' //div[@id="container"]')
-
ActionChains(browser).move_to_element(controlsBar).perform()
-
-
# 检测弹窗
-
def checkWindow():
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n' '正在播放:' getUnitName())
-
clickIknow()
-
clickBeforeRead()
-
response()
-
print('\n\n')
-
-
# 获取当前章节
-
def getUnitName():
-
try:
-
name = browser.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[1]/div[1]/div[1]')
-
return name.text
-
except:
-
return '暂未加载'
-
if __name__ == '__main__':
-
# 访问网站 课程的地址
-
url = 'https://studyh5.zhihuishu.com/videoStudy.html#/studyVideo?recruitAndCourseId=4b595c5c435d4859454a5859584259455f'
-
# 账号密码
-
userName = "**************"
-
passWord = "**************"
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n' '开始学习\n')
-
browser.get(url)
-
# 元素定位 输入用户名密码
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n' '正在输入账号\n')
-
inputUsername = browser.find_element(By.XPATH,'//input[@id="lUsername"]')
-
inputUsername.send_keys(userName)
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n' '账号输入成功\n')
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n' '正在输入密码\n')
-
inputPassword = browser.find_element(By.XPATH,'//input[@id="lPassword"]')
-
inputPassword.send_keys(passWord)
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n' '密码输入成功\n')
-
-
# 点击登录
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n' '正在登陆\n')
-
login = browser.find_element(By.XPATH,"//span[@class='wall-sub-btn']")
-
login.click()
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n' '登陆成功\n')
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n' '正在进入课程\n\n')
-
-
print('----------------------------------')
-
-
import threading
-
from threading import Lock,Thread
-
import time,os
-
while(True):
-
-
# 有时进入视频会直接弹出窗口,且窗口显示顺序不定,故检测三次,保证再开始播放之前关闭
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n' '正在在执行视频播放前检查')
-
for i in range(3):
-
print('\n第' str(i) '检测')
-
checkWindow()
-
time.sleep(2)
-
-
-
print(time.strftime('%Y-%m-%d %H:%M:%S') '\n检查完毕\n\n\n开始优化播放\n')
-
# 避免在前三次中未检测出窗口,开始操作前全部检查一次
-
checkWindow()
-
play()
-
print('正在修改画质')
-
time.sleep(2)
-
checkWindow()
-
changeVideoQuality()
-
print('画质修改成功\t\t\t√')
-
print('正在修该播放速度')
-
checkWindow()
-
fasterPlay()
-
print('播放速度修改成功\t\t\t√')
-
print('正在修改静音')
-
checkWindow()
-
noVoice()
-
print('静音修改成功\t\t√\n\n')
-
-
# 每隔5秒检测是否有我知道了,学前必读,是否播放完
-
while(True):
-
print(time.strftime('%Y-%m-%d %H:%M:%S'))
-
# 播放完毕,下一集
-
if getCurrentTime() == getTotalTime():
-
print('\n\n')
-
checkWindow()
-
nextVideo()
-
break
-
-
print('\n\n')
-
checkWindow()
-
print('\n\n')
-
time.sleep(5)
-
-
-
-
-
-
-
-
-
-
-
-
-
需要更换的是账号密码以及url路径,url路径是你先在浏览器中登录进智慧树,点击课程,在播放界面复制地址栏中的URL即可,具体看注释即可
需要安装selenium包 和chrome浏览器驱动下载地址chrome.exe,注意版本相匹配,该驱动器的路径与py文件在同一目录即可
运行结果
C:\Users\19436\Desktop\邱哥\学习资料\Python\代码\venv\Scripts\python.exe C:/Users/19436/Desktop/邱哥/学习资料/Python/代码/test/selenium_ZhiHuiShu.py
C:\Users\19436\Desktop\邱哥\学习资料\Python\代码\test\selenium_ZhiHuiShu.py:25: DeprecationWarning: use options instead of chrome_options
browser = webdriver.Chrome(chrome_options=chrome_options)
2021-11-15 12:56:45
开始学习2021-11-15 12:56:48
正在输入账号2021-11-15 12:56:48
账号输入成功2021-11-15 12:56:48
正在输入密码2021-11-15 12:56:49
密码输入成功2021-11-15 12:56:49
正在登陆2021-11-15 12:56:49
登陆成功2021-11-15 12:56:49
正在进入课程
----------------------------------
2021-11-15 12:56:49
正在在执行视频播放前检查第0检测
2021-11-15 12:56:49
正在播放:暂未加载
未发现我知道了 ✘
未发现学前必读 ✘
未找到弹窗测验 ✘
第1检测
2021-11-15 12:56:53
正在播放:第三章
3.1、辅音(下)
关闭我知道成功! √
关闭学前必读成功! √
未找到弹窗测验 ✘
第2检测
2021-11-15 12:56:56
正在播放:第三章
3.1、辅音(下)
未发现我知道了 ✘
未发现学前必读 ✘
未找到弹窗测验 ✘2021-11-15 12:56:58
检查完毕
开始优化播放2021-11-15 12:56:58
正在播放:第三章
3.1、辅音(下)
未发现我知道了 ✘
未发现学前必读 ✘
未找到弹窗测验 ✘正在修改画质
2021-11-15 12:57:10
正在播放:第三章
3.1、辅音(下)
未发现我知道了 ✘
未发现学前必读 ✘
未找到弹窗测验 ✘切换到流畅画质失败,稍后将重试 ✘
画质修改成功 √
正在修该播放速度
2021-11-15 12:57:16
正在播放:第三章
3.1、辅音(下)
未发现我知道了 ✘
未发现学前必读 ✘
未找到弹窗测验 ✘切换成倍速失败,稍后将重试 ✘
播放速度修改成功 √
正在修改静音
2021-11-15 12:57:22
正在播放:第三章
3.1、辅音(下)
未发现我知道了 ✘
未发现学前必读 ✘
未找到弹窗测验 ✘volumeBox
此时非静音
静音成功 √
静音修改成功 √
2021-11-15 12:57:28
当前播放时间为:00:03:56
本集视频时间为:00:25:562021-11-15 12:57:28
正在播放:第三章
3.1、辅音(下)
未发现我知道了 ✘
未发现学前必读 ✘
未找到弹窗测验 ✘
2021-11-15 12:57:34
当前播放时间为:00:04:01
本集视频时间为:00:25:562021-11-15 12:57:34
正在播放:第三章
3.1、辅音(下)
未发现我知道了 ✘
未发现学前必读 ✘
未找到弹窗测验 ✘
2021-11-15 12:57:39
当前播放时间为:00:04:07
本集视频时间为:00:25:562021-11-15 12:57:40
正在播放:第三章
3.1、辅音(下)
未发现我知道了 ✘
未发现学前必读 ✘
未找到弹窗测验 ✘
2021-11-15 12:57:45
当前播放时间为:00:04:13
本集视频时间为:00:25:562021-11-15 12:57:46
正在播放:第三章
3.1、辅音(下)
未发现我知道了 ✘
未发现学前必读 ✘
未找到弹窗测验 ✘进程已结束,退出代码为 -1
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfkaak
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01