(使用過程中有小伙伴反映如果課程的第一章是空白的頁面會報錯,我當時做的時候是根據我自己的課程,沒有第一節是空頁面的現象,這個以后有時間我再改一下吧,或者小伙伴自己修改一下也可)
原諒我這個標題黨,對叭起
最近沒事覺得網課惡心人,“你們學計算機的,隨便寫個程序玩玩,很容易噠”------語出高數老師,於是我就“隨便”寫了個刷網課的程序,沒什么nb算法,請各路大神指教
原諒我的個別函數名和變量名用了拼音,別噴我low嗚嗚嗚(其實就是懶,打拼音順手了,這是個壞習慣,大家別學我)
以上的都是廢話
需要注意的是要安裝一個瀏覽器驅動,去網上下載就好了,把地址添加在第四行那里,我代碼里面的是谷歌瀏覽器,如果想要用其他的瀏覽器代碼換成相應的就行
然后要自己在終端輸入自己的賬號、密碼,還有登錄時候的驗證碼(有條件的同學可以去“雲打碼“弄一個自動識別二維碼的,也不用很多錢,貧窮大學生枯了,或者牛逼的大佬可以自己搞一個相應的機器學習模型來識別驗證碼)
對了,第六行的url是自己學校的學習通登錄網址
其中大家要自己提供2次XPATH,第一個是在level_1st函數中,這個xpath是進入首頁后選擇的你要刷的那門課程的xpath
第二個在into_vedio_window函數中,是進入相應課程之后,想從哪個章節開始,“那個章節的xpath”,添加進去
然后電腦掛着就好了,出去玩或者上課他就自己放視頻,也不用自己手動切換
貼上代碼:
1 from selenium import webdriver # 導入庫 2 import time 3 4 browser = webdriver.Chrome(executable_path="") # 雙引號內添加瀏覽器驅動的地址 5 6 url = "http://passport2.hut.edu.cn/login?fid=&refer=http://i.mooc.hut.edu.cn" #這里改成自己學校的學習通登錄地址 7 browser.get(url) 8 9 10 def input_usename_and_password(): 11 inp=input("請輸入賬號:") 12 inp_2=input("請輸入密碼:") 13 #inp_3=input("請輸入驗證碼:") 14 inp_3 = input("請輸入驗證碼:") 15 username = browser.find_element_by_id("unameId") 16 password = browser.find_element_by_id("passwordId") 17 verycode = browser.find_element_by_id("numcode") 18 username.send_keys(inp) 19 password.send_keys(inp_2) 20 verycode.send_keys(inp_3) 21 sbm = browser.find_element_by_class_name("zl_btn_right") 22 time.sleep(1) 23 sbm.click() 24 25 26 # 一級頁面跳轉,進入首頁,開始選擇課程 27 def level_1st(): 28 browser.switch_to.frame("frame_content") 29 # 進入首頁,開始選擇課程 30 time.sleep(1) 31 #引號內添加要刷的相應那門課程的xpath 32 c_click = browser.find_element_by_xpath("") 33 c_click.click() 34 35 # li_click = browser.find_element_by_xpath("") 36 # browser.execute_script("window.scrollT0(0,3000)") 37 # browser.back()#向后退 前進是forward() 38 time.sleep(1) 39 browser.switch_to.window(browser.window_handles[-1]) 40 41 42 # 判斷是否有通知 43 def if_tongzhi(): 44 time.sleep(1) 45 judge = 1 46 while judge: 47 try: 48 cloes_widow = browser.find_element_by_xpath("/html/body/div[9]/div/a") 49 cloes_widow.click() 50 print(111) 51 except: 52 print("沒有通知彈窗") 53 judge = 0 54 pass 55 56 57 # 進入視頻並且播放 58 def into_vedio_window(): 59 time.sleep(1) 60 browser.find_element_by_xpath("").click()#引號內添加從“哪節課開始”的那節課的XPATH 61 time.sleep(2) 62 63 64 # 播放課 65 def play_vedio(): 66 time.sleep(1) 67 browser.switch_to.frame("iframe") 68 # 這里有一個嵌套iframe 69 browser.switch_to.frame(0) 70 begin_vedio = browser.find_element_by_xpath("//*[@id='video']/button").click() 71 time.sleep(3) 72 print("課程已經開始播放") 73 74 75 # 判斷是否有答題框,其實這個邏輯挺簡單的,只不過我不知道怎么觸發答題框, 76 # 選擇題的話依次選擇ABCD直到對了就可以 77 def if_question(): 78 pass 79 80 81 # 判斷視頻是否完成 82 def if_vedio_finished(): 83 time.sleep(1) 84 try: 85 vedio_stat_time = browser.find_element_by_xpath("//*[@id='video']/div[4]/div[2]/span[2]").get_attribute( 86 "textContent") 87 vedio_end_time = browser.find_element_by_xpath("//*[@id='video']/div[4]/div[4]/span[2]").get_attribute( 88 'textContent') 89 print("開始時間和結束時間是:", vedio_stat_time, vedio_end_time) 90 time.sleep(10) # 每10秒檢測一次視頻是否完成 91 92 return vedio_stat_time, vedio_end_time 93 except: 94 pass 95 96 97 # 判斷有第二節課嗎有就播放 98 def if_have_2nd_class(vedio_stat_time, vedio_end_time): 99 if vedio_stat_time == vedio_end_time: 100 try: 101 # 開始播放第二個視頻 102 browser.switch_to.default_content() 103 browser.switch_to.frame("iframe") 104 browser.switch_to.frame(1) 105 browser.find_element_by_xpath("//*[@id='video']/button").click() 106 time.sleep(3) 107 108 except: 109 pass 110 print("沒有第二節課了") 111 112 113 def start_next(vedio_stat_time, vedio_end_time): 114 if vedio_stat_time == vedio_end_time: 115 try: 116 browser.switch_to.default_content() 117 print("開始點下一頁") 118 browser.find_element_by_xpath("/html/body/div[3]/div/div[2]/div[1]/div[8]").click() 119 time.sleep(0.5) 120 browser.find_element_by_xpath("/html/body/div[3]/div/div[2]/div[1]/div[4]").click() 121 time.sleep(0.5) 122 browser.find_element_by_xpath("/html/body/div[3]/div/div[2]/div[1]/div[6]").click() 123 time.sleep(0.5) 124 browser.find_element_by_xpath("/html/body/div[3]/div/div[2]/div[1]/div[8]").click() 125 time.sleep(0.5) 126 except: 127 print("開始點沒有小節的下一頁") 128 browser.switch_to.default_content() 129 browser.find_element_by_xpath("//*[@id='mainid']/div[1]/div[2]").click() 130 time.sleep(1) 131 pass 132 133 134 if __name__ == '__main__': 135 input_usename_and_password() 136 level_1st() 137 if_tongzhi() 138 into_vedio_window() 139 while True: 140 play_vedio() 141 time_tuple = if_vedio_finished() 142 while time_tuple[0] != time_tuple[1]: 143 time_tuple = if_vedio_finished() 144 try: 145 if_have_2nd_class(time_tuple[0], time_tuple[1]) 146 if time_tuple[0] == time_tuple[1]: 147 print("開始測試第二節課時間") 148 time_tuple_2 = if_vedio_finished() 149 while time_tuple_2[0] != time_tuple_2[1]: 150 time_tuple_2 = if_vedio_finished() 151 start_next(time_tuple_2[0], time_tuple_2[1]) 152 except: 153 start_next(time_tuple[0], time_tuple[1])
禁止用於商業用途