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 = True
        try:
            ell.find_element(By.CLASS_NAME, "file-rate").find_element(By.CSS_SELECTOR, '[class="iconfont zhihuishu-wancheng"]')
            return flag
        except:
            flag = False
            return flag
    #这个函数用于检测页面是否存在某元素,并返回布尔值

    def chooseCourse(self):
        time.sleep(2)
        courses = driver.find_elements(By.CLASS_NAME,"process")
        iff = 0
        #获取全部大标题信息作为库,并定义判断值,赋值为0
        for var1 in courses:
            persent = var1.find_element(By.CLASS_NAME, "processNum").get_attribute('textContent')
            #遍历大标题,并获取学习进度
            if persent != '100%':
                #当获取到未完成的大标题时停止,并点击进入
                iff = 1
                #将判断值赋值1
                var1.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遍历所有没有学完的大标题,然后再逐个点击;后遍历所有没学习完成的小标题(利用小标题学习完成后会显示一个对勾图标加以区分),再点击学习。

四.结语

使用愉快,如遇到报错请留言(不常在线,但看到反馈会第一时间排查问题) (^_^)文章来源地址https://uudwc.com/A/BvPe4

原文地址:https://blog.csdn.net/qinheyuan/article/details/132536461

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月29日 03:05
外包干了3个月,技术退步明显。。。。。
下一篇 2023年09月29日 04:35