安信工学子必备的fif课堂自动看视频(selenium框架)

在安徽信息工程学院,每名学子都需要刷一个fif课堂,这个很麻烦,于是我就写了一个代码

以上代码需要安装驱动,修改你的账户和账户密码(对于纯小白来说,这确实有点难度,不过你可以联系我,我会慢慢想你解释)

​
#测试框架:先获取题目,判断题目类型,写入文本,再向chatgpt请求,把答案填到测试页,再向文本/写下答案
#派生框架:先获取题目,直接读取文本,获取答案

#测试框架
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
import time


def pre_works():
    print("即将开始,请按提示步骤完成刷题\n")
    print("本王比较懒,只写了edge的兼容,若edge请立即下载,并登录到刷题界面")
    wd=webdriver.Edge(service=Service(r'D:\python\edgedriver_win64'))   #等待安装:(注意,每个人的驱动不同)
    print("请完整复制开始刷题的路径\n")
    print("建议路径:https://www.fifedu.com/iplat/fifLogin/index.html?v=5.2.2\n")
    moocurl=input()
    wd.get(moocurl)
    print("请在60秒内完成你的账号和密码输入\n")
    print("请输入你的账户")
    account="aiit账号写这里"
    print("请输入你的密码")
    password="密码写这里"
    accountinput=wd.find_element(By.XPATH,"//*[@id='userName']")
    accountinput.send_keys(account)
    passwordinput=wd.find_element(By.XPATH,"//*[@id='passWord']")
    passwordinput.send_keys(password)
    login=wd.find_element(By.XPATH,"//*[@id='userLogin']/div[1]/div/div[2]/div[3]/div[2]/button")
    time.sleep(1)
    login.click()
    print("请立刻转到视频界面\n")
    print("当前页面的全部应用,找到fif在线课程\n")
    time.sleep(80)
    before=wd.current_window_handle
    print("窗口为:",before,"\n")
    all_windows=wd.window_handles
    target_window=None

    for window in all_windows:
        wd.switch_to.window(window)
        if "练习题-学生答题" in wd.title:
            target_window=window
            break
    if target_window is not None:
        wd.switch_to.window(target_window)
    now=wd.current_window_handle
    print("窗口为:", now)
    while True:
        time.sleep(5)
        video_element=wd.find_element(By.XPATH, "/html/body/div[2]/div[2]/div[1]/div/div/video")
        while not video_element.is_displayed():
            pass
        #上一段代码指的是目标元素没有完全展示就一直等待
        while True:
            is_ended = video_element.get_attribute('ended')
            if is_ended:
                wd.find_element(By.XPATH, "/html/body/div[2]/div[1]/div[2]/button[2]").click()
                break
        #死循环,如果视频放到最后,那么就点击下一页
    wd.quit()

if __name__=='__main__':
    pre_works()

​

本篇代码看着还不是很好,毕竟我写c和c++写的更多,而且很多代码并不是用的很好,比如说延时,我用的是time.sleep。

selenium注意:在这里记录一下报错日志:find_element(By.XPATH, 'xpath')这是新版的写法,老版会报错。然后就是选择到视频是否到了结尾,可以这是这个video标签的属性,所以说要get_attribute('ended'),来实现,这个报错我找了好久,我的js基础确实不是很好,往后还得多练练

结束:感觉我代码的方法还是太冗长,以后还要多看看大佬们的好代码,共勉!

你可能感兴趣的:(音视频,selenium,python)