selenium实现智慧树自动刷视频课

一.前提准备(python环境配置及火狐驱动配置)

1.火狐浏览器驱动下载

驱动下载网址:http:// https://github.com/mozilla/geckodriver/releases/

把火狐更新到最新版本,然后下载对应版本的驱动(记得选win版本)

 然后把下载并解压完成的驱动软件复制到火狐的安装文件夹下(注:这里标注出来的是正确的驱动位置,和Firefox.exe在同一文件夹下)

 已经快完成了,咱们现在来配置环境变量

 

按照图片介绍配置好环境变量

配置完成后,进入cmd(win+R,输入cmd), 再输入一下驱动的名字,如果返回了端口名称,则是配置成功,咱们可以进入下一步了

2.火狐selenium插件下载

打开Firefox,点击右上角菜单->扩展和主题->搜索->输入selenium ide

 下载第一个,并安装

二.pycharm配置selenium

请提前配置python环境变量,并下载pycharm社区版(免费),这部分我就不去赘述了

新建一个python项目,再点击Ctrl+Alt+S,进入设置页面

完成selenium包下载,下一步就可以进入代码部分了   (^_^)

三.代码部分

先来看代码,写的比较粗糙,直接在新建项目下在创建一个.py文件复制进去能跑就行

注释我尽力去写的清晰,如果有bug欢迎纠错留言(^_^)

注:输入账号密码后登录的人工验证图是需要用户自己解决的,才疏学浅真的无法解决这个

# coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import time
######################################################
#  导包,初始化浏览器智慧树网址                            #
#  @代码封装:通用中文名                                  #
#  @想要解放双手轻松刷智慧树网课吗,想要富裕出大把时间决战高数吗?#
#  @这款 Dr.通用 的自动化程序绝对不会让你失望!(目前仅支持火狐)#
########################################################class auto_Course:def login(self):time.sleep(3)print("hello,欢迎使用本程序 :P")name = input("请输入用户名:")code = input("请输入密码:")password = driver.find_element(By.ID, "lPassword")password.send_keys(code)myname = driver.find_element(By.ID, "lUsername")myname.send_keys(name)time.sleep(1)driver.find_element(By.CLASS_NAME, "wall-sub-btn").click()# 定义用户和密码,并输入,点击登录键WebDriverWait(driver,20).until(ec.presence_of_element_located((By.CLASS_NAME, 'process')))#等待用户进行验证码验证(手动)def panduan(self, ell):flag = Truetry:ell.find_element(By.CLASS_NAME, "file-rate").find_element(By.CSS_SELECTOR, '[class="iconfont zhihuishu-wancheng"]')return flagexcept:flag = Falsereturn flag#这个函数用于检测页面是否存在某元素,并返回布尔值def chooseCourse(self):time.sleep(2)courses = driver.find_elements(By.CLASS_NAME,"process")iff = 0#获取全部大标题信息作为库,并定义判断值,赋值为0for var1 in courses:persent = var1.find_element(By.CLASS_NAME, "processNum").get_attribute('textContent')#遍历大标题,并获取学习进度if persent != '100%':#当获取到未完成的大标题时停止,并点击进入iff = 1#将判断值赋值1var1.click()#如果大标题未学习满,则点击学习WebDriverWait(driver, 8).until(ec.presence_of_element_located((By.CLASS_NAME, 'file-name')))eemmaann = driver.find_element(By.CLASS_NAME,"course-name").find_element(By.CLASS_NAME,"name").get_attribute('textContent')print("------------------------------检测到未学习完成的专题-----------------------")print("专题名称 :   "+eemmaann)files = driver.find_elements(By.CLASS_NAME, "file-item")#待小标题出现后获取所有的小标题print("请等待,正在遍历未学习完成的课程......")for o in files:for handle in driver.window_handles:driver.switch_to.window(handle)flag= self.panduan(o)#判断已经学习完成的课程,不点击(节省时间)if flag==False:nnaammee = o.find_element(By.CLASS_NAME, "file-name").get_attribute('textContent')print("开始学习" + nnaammee)o.click()#点击课程,打开新窗口for handle in driver.window_handles:driver.switch_to.window(handle)# 遍历句柄,切换主要界面WebDriverWait(driver, 8).until(ec.presence_of_element_located((By.XPATH, '//*[@id="vjs_mediaPlayer"]')))driver.find_element(By.XPATH, '//*[@id="vjs_mediaPlayer"]').click()time.sleep(10)# 找到视频主界面,点击播放mytime = driver.find_element(By.CLASS_NAME, "currentTime").get_attribute('textContent')ittime = driver.find_element(By.CLASS_NAME, "duration").get_attribute('textContent')# 获取目前时间和总时长while mytime != ittime:mytime = driver.find_element(By.CLASS_NAME, "currentTime").get_attribute('textContent')ittime = driver.find_element(By.CLASS_NAME, "duration").get_attribute('textContent')time.sleep(10)driver.close()#每十秒更新一次当前时间,若视频播放完成则关闭该页面driver.back()driver.refresh()WebDriverWait(driver, 20).until(ec.presence_of_element_located((By.CLASS_NAME, 'courseName')))self.chooseCourse()if iff == 0:print("-----------------------------------我是可爱的分界线-----------------------")print("已经自动学习完所有课程啦,稍后程序将自动退出,期待您的下次使用 :D ")driver.quit()exit()
#进程部分def erro(self):print("遇到错误,退出程序,如有疑问请联系开发者:CSDN @通用中文名")driver.quit()exit()def run(self):self.login()self.chooseCourse()driver = webdriver.Firefox()
driver.get('https://onlineweb.zhihuishu.com/onlinestuh5')# 设置初始网页,配置浏览器
try:auto_Course().run()
except Exception:auto_Course().erro()

 程序设计的基本原理,点击进入智慧树页面后,先用find_elements遍历所有没有学完的大标题,然后再逐个点击;后遍历所有没学习完成的小标题(利用小标题学习完成后会显示一个对勾图标加以区分),再点击学习。

四.结语

使用愉快,如遇到报错请留言(不常在线,但看到反馈会第一时间排查问题) (^_^)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部