使用python Selenium实现智慧树界面化自动刷网课 chromehandless实现智慧树无界面化自动刷网课
2021/11/15 14:09:59
本文主要是介绍使用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') option[0].click() # 获取正确答案 answer = browser.find_element(By.XPATH,"//p[@class='answer']/span").text print('正确答案是:' + answer) # 点击正确答案 for i in range(len(option)): print('选项'+str(i)+':'+option[i].text) if option[i].text.find(answer)!=-1: option[i].click() break # 点击关闭 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√') except: print('切换到流畅画质失败,稍后将重试\t\t✘') # 打开ControlsBar def openControlsBar(): 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=425a515c46524258454a58595e445042' # 账号密码 userName = "xxxxxxxxxx" passWord = "xxxxxxxxxx" 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('----------------------------------') 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路径,具体看注释即可
运行结果
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
这篇关于使用python Selenium实现智慧树界面化自动刷网课 chromehandless实现智慧树无界面化自动刷网课的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门