一、脚本简介

知到刷课脚本是一款基于Python开发的自动刷知到课程的脚本。该脚本可以自动登录知到网站,自动选择需要学习的课程,并自动完成视频观看和答题,最终获得学分。该脚本具有高度的自动化程度,能够较大程度地提高知识学习效率。

二、环境配置

为了正常运行知到刷课脚本,需要在本地环境中进行相关配置。

1、安装Python环境;

sudo apt install python3

2、安装必要的Python库,包括Selenium和Pillow。

sudo pip3 install selenium
sudo pip3 install Pillow

三、核心代码

3.1 自动登录

def login_knowbox(username, password, driver):
    url = "https://www.knowbox.cn/ssologin?v=4&return_url=https%3A%2F%2Fwww.knowbox.cn%2Fcourse%2Flearning-center%2F"
    driver.get(url)
    #获取用户名输入框和密码输入框
    element_user = driver.find_element_by_name("userName")
    element_password = driver.find_element_by_name("password")
    #向用户名、密码输入框分别输入用户名、密码
    element_user.send_keys(username)
    element_password.send_keys(password)
    #点击登录按钮
    driver.find_element_by_css_selector(".submit").click()
    #等待登录成功
    WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located((By.CLASS_NAME, "nav-list")))

3.2 自动选择课程

def select_class(driver):
    # 点击进入学习页面
    driver.find_element_by_css_selector(".studyBtn").click()
    # 延时等待
    time.sleep(2)
    # 点击所有课程
    driver.find_element_by_css_selector(".all-course").click()
    # 延时等待
    time.sleep(2)
    # 点击进入第一个课程
    driver.find_element_by_css_selector(".single-course a").click()
    # 延时等待
    time.sleep(2)

3.3 自动观看视频

def watch_video(driver):
    # 获取视频元素标签
    video = driver.find_element_by_tag_name("video")
    # 获取视频总时长
    total_time = driver.execute_script("return arguments[0].duration;", video)
    # 开始播放视频
    driver.execute_script("arguments[0].play();", video)
    start_time = time.time()
    # 循环观看视频直至播放完毕
    while time.time() - start_time < total_time:
        # 间隔时间为5秒
        time.sleep(5)
    # 暂停视频播放
    driver.execute_script("arguments[0].pause();", video)

3.4 自动答题

def answer_questions(driver):
    # 获取题目元素标签
    questions = driver.find_elements_by_css_selector(".question")
    # 循环答题
    for question in questions:
        # 获取题目类型
        q_type = question.get_attribute("data-type")
        if q_type == "single_choice":  # 单选题
            # 获取选项元素标签
            choices = question.find_elements_by_css_selector(".choice-item")
            # 随机选择一个选项
            random.choice(choices).click()
        elif q_type == "multi_choice":  # 多选题
            # 获取选项元素标签
            choices = question.find_elements_by_css_selector(".choice-item")
            # 随机选择两个选项
            random_choices = random.sample(choices, 2)
            for choice in random_choices:
                choice.click()
        elif q_type == "judge":  # 判断题
            # 获取选项元素标签
            choices = question.find_elements_by_css_selector(".choice-item")
            # 随机选择一个选项
            random.choice(choices).click()
        else:  # 填空题
            # 获取填空文本框元素标签
            input = question.find_element_by_css_selector(".freetext-input")
            # 输入随机字符串
            input.send_keys("".join(random.choices(string.ascii_letters + string.digits, k=10)))

四、脚本运行

在运行脚本之前,需要在代码中添加如下信息:

  • 需要学习的课程名称;
  • 知到网站的用户名和密码。

配置完成后即可运行脚本,自动完成知到刷课任务。

if __name__ == '__main__':
    #更换成你的学校课程
    course_name = "理综物理课程"
    #更改成你的知到网站账号密码
    username = "your_username" 
    password = "your_password"
    #启动Chrome浏览器
    driver = webdriver.Chrome()
    #登录知到网站
    login_knowbox(username, password, driver)
    #选择课程并观看视频
    select_class(driver)
    watch_video(driver)
    #答题
    answer_questions(driver)
    #关闭浏览器
    driver.quit()