【Selenium】实现智慧树课堂半自动化播放

环境配置

# 没有安装 selenium 库,可以通过以下命令进行安装

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

去半自动化

半自动化的体现:滑块验证码

想要绕过滑块验证验证,文章可以参考破解滑动验证码最新版本(97%左右通过率) - Damon- - 博客园 (cnblogs.com)

半自动化代码实现

登入阶段

from selenium.webdriver import Edge
from selenium.webdriver.common.by import By

driver = Edge()
driver.maximize_window()
driver.get('https://onlineweb.zhihuishu.com/')

driver.find_element(By.NAME, 'username').send_keys('你的智慧树账号')
driver.find_element(By.NAME, 'password').send_keys('你的智慧树密码')

driver.find_element(By.CLASS_NAME, 'wall-sub-btn').click()

# 等待验证 

课程读取

import time

# url 为你的课程link
driver.get('https://studyvideoh5.zhihuishu.com/stuStudy?recruitAndCourseId=485b5159415e4859454a5859584351425d')
# 取消界面弹窗
try:
    time.sleep(0.5)
    driver.find_element(By.CLASS_NAME, 'iconguanbi').click()
except:
    print("弹窗已经解除或者请手动关闭")

# 获取视频列表
programs = driver.find_elements(By.CLASS_NAME, 'cataloguediv-c')

解决播放可能遇到的问题

class video_play:

    def __init__(self, driver) -> None:
        self.driver = driver
        self.test_capture() # 捕捉答题窗口

    def play(self, item):
        
        # 前置准备 ------------------------------------------------------------------------------------------------
        self.item = item
        self.item.click()
        time.sleep(2)     # 切换缓冲时间
        self.test_capture() # 捕捉答题窗口

        self.video_title = self.driver.execute_script("return arguments[0].parentNode;", self.item).text.split()
        self.video_title = " ".join(self.video_title[:2])
        section = self.section_check()
        checked = self.finished_check()
        if section == True:
            print(self.video_title, "学习完成")
        elif checked == True:
            print(self.video_title, "视频学习完成")
        # 学习模式 ------------------------------------------------------------------------------------------------
        else:
            print(self.video_title, "开始学习")
            time.sleep(1)     # 切换缓冲时间
            self.click_display()
            self.speed_change(1.5) # 倍速控制
            while True:
                checked = self.finished_check()
                if checked == True:
                    print("\n" + self.video_title + ", 视频学习完成")
                    break
                # 答题检测
                self.test_capture(1)
                self.progress_bar()

    def speed_change(self, speed):

        speedTab = {0.5:'speedTab05', 1:'speedTab10', 1.5:'speedTab15'}
        self.driver.find_element(By.CLASS_NAME, 'speedBox').click()
        self.driver.find_element(By.CLASS_NAME, speedTab[speed]).click()

    def test_capture(self, option=0):

        try:
            answers = self.driver.find_elements(By.CLASS_NAME, 'item-topic')
            answers[option].click()
            diglog_footers = self.driver.find_elements(By.CLASS_NAME, 'dialog-footer')
            index = [x.text for x in diglog_footers].index('关闭')
            diglog_footers[index].click()
            self.click_display()
        except:
            pass

    def progress_bar(self):
        try:
            progress = self.item.find_element(By.CLASS_NAME, 'progress-num').text
            print(f'\r{self.video_title}, 当前进度为: {progress}', end="")
        except:
            pass

    def finished_check(self):
        try:
            self.item.find_element(By.CLASS_NAME, 'time_icofinish')
            return True
        except:
            pass

    def section_check(self):
        try:
            self.item.find_element(By.CLASS_NAME, 'small-lesson')
            return True
        except:
            pass
        
    def click_display(self):
        self.driver.find_element(By.CLASS_NAME, 'videoArea').click()

剩下的交给时间

F = video_play(driver)

for item in programs:
    F.play(item)
    time.sleep(1)

# 给程序反应时间

结果演示

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值