最近看到隔壁室友在学习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 = pathbrowser = 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=Falsefor j in range(len(answer)):if option[i].text.find(answer[j])!=-1:flag=Truebreakif(flag==False):option[i].click()# 点击关闭close = browser.find_element(By.XPATH,'//div[@class="btn"]')close.click()print("答题成功!\t\t\t√")play()return Trueexcept: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 Trueexcept: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 Trueexcept:print("未发现学前必读\t\t✘")return False# 获取当前播放时间
def getCurrentTime():openControlsBar()time = browser.find_element(By.XPATH,'//div[@class="nPlayTime"]/span[1]').textprint('当前播放时间为:'+time)return  time# 获取当前视频总时间
def getTotalTime():openControlsBar()time = browser.find_element(By.XPATH,'//div[@class="nPlayTime"]/span[2]').textprint('本集视频时间为:' + 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.textexcept: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  threadingfrom threading import Lock,Threadimport time,oswhile(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()breakprint('\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:56

2021-11-15  12:57:28
正在播放:第三章
3.1、辅音(下)
未发现我知道了        ✘
未发现学前必读        ✘
未找到弹窗测验        ✘

2021-11-15  12:57:34
当前播放时间为:00:04:01
本集视频时间为:00:25:56

2021-11-15  12:57:34
正在播放:第三章
3.1、辅音(下)
未发现我知道了        ✘
未发现学前必读        ✘
未找到弹窗测验        ✘

2021-11-15  12:57:39
当前播放时间为:00:04:07
本集视频时间为:00:25:56

2021-11-15  12:57:40
正在播放:第三章
3.1、辅音(下)
未发现我知道了        ✘
未发现学前必读        ✘
未找到弹窗测验        ✘

2021-11-15  12:57:45
当前播放时间为:00:04:13
本集视频时间为:00:25:56

2021-11-15  12:57:46
正在播放:第三章
3.1、辅音(下)
未发现我知道了        ✘
未发现学前必读        ✘
未找到弹窗测验        ✘

进程已结束,退出代码为 -1

使用python Selenium实现智慧树界面化自动刷网课 chromehandless实现智慧树无界面化自动刷网课相关推荐

  1. Python爬虫之selenium对标签页切换、切换frame标签、cookie处理、执行js代码、开启无界面、以及使用代理ip和替换user-agent等方法

    一.selenium对标签页切换.切换frame标签.cookie处理.执行js代码.开启无界面.以及使用代理ip和替换user-agent等方法 (一).selenium标签页的切换 当seleni ...

  2. python selenium模拟点击

    文章目录 1.安装谷歌浏览器 2.安装浏览器驱动 3.安装selenium 4.简单测试 5.打卡程序 6.linux设置定时任务 7.其他 1.安装谷歌浏览器 #下载包 wget https://d ...

  3. Python Selenium 基本配置

    [摘要]不知道大家学习python的目的有哪些?Web开发  自动化运维  大数据分析  网络爬虫  人工智能  机器学习  ? 最近对网络爬虫比较感兴趣,为什么呢?懒人分很多种..... 1. 懒惰 ...

  4. Python Selenium+Requests爬虫[双线程]--今日头条图片爬取【亲测能行!!!】

    码前冷静分析 首先需要准备好selenium.requests库以及Chromedriver 这个就不细说了,有很多博客可以参考 然后讲一下大体思路 首先搜索想要爬取图片的关键词 - 接着是" ...

  5. 爬虫之selenium开启无界面模式

    绝大多数服务器是没有界面的,selenium控制谷歌浏览器也是存在无界面模式的(又称之为无头模式) 开启无界面模式的方法 实例化配置对象 options = webdriver.ChromeOptio ...

  6. python3 selenium 无头浏览器 无界面 chromedriver

    第一种 from selenium import webdriver# 创建chrome参数对象 opt = webdriver.ChromeOptions()# 把chrome设置成无界面模式,不论 ...

  7. Python3 爬虫学习笔记 C05 【Selenium + 无界面浏览器】

    Python3 爬虫学习笔记第五章 -- [Selenium + 无界面浏览器] 文章目录 [5.1]关于无界面浏览器 [5.2]PhantomJS [5.3]Headless Chrome [5.4 ...

  8. 微课|中学生可以这样学Python(例9.2):无界面通信录管理系统

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第9章  SQLite数据库编程基础 例9.2  无界面通信录管理系统 京东购买链接:https: ...

  9. python+Selenium自动签到实例

    引言 环境准备 代码 飞猪签到领里程 京东签到领京豆 什么值得买签到 windows计划任务 方法一 方法二 总结 参考 引言 Selenium是一个用于Web应用程序测试的工具.可以十分简单的模拟输 ...

  10. 【python】简单使用selenium编写无界面谷歌浏览器的网页登录和签到功能

    使用python编写简单的关于服务器端网页自动登录及签到的功能 注:仅用于测试人员自动化脚本测试,请勿用于其他用途 ------------------------------------------ ...

最新文章

  1. 2018未来科学大奖揭晓:袁隆平、马大为、林本坚等7位科学家获奖
  2. 【重磅】Waymo无人车高层组团出走?CFO今日也走了!
  3. Apache地址重写的几个问题
  4. vue中v-model是个啥?
  5. Spring Boot(三) 将war文件部署到tomcat 、 Thymeleaf示例
  6. 基于php5.6 php.ini详解
  7. C++ vector.insert的用法
  8. uac2.0驱动_关闭Vista中令人讨厌的HP驱动程序UAC弹出更新检查
  9. 51nod 1686 第K大区间 二分瞎搞
  10. win64位下安装python的image支持
  11. 使用LINQ to SQL更新数据库(中):几种解决方案
  12. PHP汉字转换拼音的函数代码
  13. 电脑怎么打印pdf文件,电脑中保存的pdf文件怎么打印
  14. “绿萌”仿“大麦”演出购票APP
  15. 怎么在csdn中找到自己发布的帖子
  16. CentOS 8 部署禅道,并使用自己的数据库
  17. 如何把微信删除的聊天记录恢复?试试这两个简单有效的方法
  18. 图像拼接和图像融合技术(基于Opencv)
  19. 骨传导耳机和普通耳机危害哪个小?骨传导耳机
  20. 深入理解Android:卷II

热门文章

  1. PHP实现zip字典破解
  2. linux硬盘检测工具,利用Smartmontools工具检测Linux硬盘状况 – 安装及基本应用 | 老左笔记...
  3. 前端练手项目合集40.0个,附源码,2022年最新
  4. 2021 年 6 个GitHub推荐前端项目
  5. 大数据Hadoop基本概念介绍
  6. JAVA图书管理系统详细代码
  7. 学习笔记-行政区划匹配缺失补全
  8. 陪孩子一起学习python
  9. 解决360 安装补丁智能忽略的问题!
  10. 新版Ds社区源码(云商城1.0)