用selenium编的挂机脚本,可能里面有点小BUG,但是程序总体能跑起来,满足挂分需求。
无加速功能,只能挂机!!!!
时间比较短,代码比较粗糙

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument('–-incognito')
options.add_argument('--disable-infobars')
options.add_argument('--start-maximized')
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")           # 防止崩溃,规避bug

browser = webdriver.Chrome(options=options)
browser.implicitly_wait(30)
def login():
    """
    登录
    """
    browser.get("https://uat1.cqrspx.cn/portal/login")
    if browser.find_element(By.ID, 'userName'):         #用户名
        browser.find_element(By.ID, 'userName').send_keys("")
    if browser.find_element(By.ID, 'passWord'):         # 密码
        browser.find_element(By.ID, 'passWord').send_keys("")

     input("登录成功后继续...")
def courselearning():
    """
    课程学习
    """
    browser.find_element(By.XPATH, '//*[@id="image-style-1-1670463052660613113120"]/div[2]/div[3]/div/div[1]/div/div/div').click()
    windows = browser.window_handles
    browser.switch_to.window(windows[-1])
    browser.find_element(By.XPATH, '//*[@id="searchBar"]/section/div/div[2]/section/div[2]/section[1]/div/section[1]/img').click()
    while True:
        time.sleep(3)
        progress = browser.find_element(By.CLASS_NAME, 'progress-text').text
        print(f'当前学习进度【{progress}】')
        if progress == '100%':
            break
            print('学习完毕')
        browser.find_element(By.XPATH, '//*[@id="searchBar"]/section/div/div[4]/div/div[1]/div/div[3]').click()     #切换未完成课程
        course = browser.find_element(By.XPATH, '//*[@id="pane-MUST"]/div/div/div[1]/div/div[1]')        # 顺序学习
        course_name = course.text
        print(f'正在学习:{course_name}')
        course.click()
        new_window = browser.window_handles
        browser.switch_to.window(new_window[-1])
        browser.switch_to.frame('aliPlayerFrame')
        chapters = browser.find_elements(By.CLASS_NAME, 'first-line')
         print(f'共有{len(chapters)}节')
        i = 1
        for chapter in chapters:

            print(f'开始学习第{i}节')
            i += 1
            try:
                if chapter.find_element(By.CLASS_NAME, 'finish-tig'):       # 判断小节学习状态
                    print('已完成')
                    continue
            except:
                pass
            try:
                chapter.click()         # 播放未学习小节
            except:
                break

            time.sleep(10)
            current_time = browser.find_element(By.CLASS_NAME, 'current-time').text     # 当前学习进度
            end_time = browser.find_element(By.CLASS_NAME, 'duration').text     # 获取课程总时间
            if len(current_time) == 5:                  # 时间格式转换成秒
                current = int(current_time[0:2]) * 60 + int(current_time[3:5])
            else:
                current = int(current_time[0:2]) * 60 * 60 + (int(current_time[3:5]) * 60) + int(current_time[6:8])
            if len(end_time) == 5:
                end = int(end_time[0:2]) * 60 + int(end_time[3:5])
            else:
                end = int(end_time[0:2]) * 60 * 60 + (int(end_time[3:5]) * 60) + int(end_time[6:8])
            wait_time = end - current       # 计算播放时长并拆分每10分钟刷新一次
            print(f'时长:{wait_time}秒')
            rg = wait_time // 600
            # print(f'刷新:{rg}次')
            yu = wait_time % 600
            for i in range(rg):
                time.sleep(598)
                browser.refresh()       # 刷新网页防止验证
                browser.switch_to.frame('aliPlayerFrame')
                time.sleep(3)
                browser.find_element(By.CLASS_NAME, 'outter').click()

            try:
                if chapter.find_element(By.CLASS_NAME, 'finish-tig'):       # 判断小节学习状态
                    print('已完成')
                    continue
            except:
                pass
            time.sleep(yu)

        browser.close()         # 学习完成,关闭页面
        browser.switch_to.window(windows[-1])