完全機器模擬瀏覽器操作自動刷網課!不怕被封!!-----python基於selenium實現超星學習通刷視頻網課


(使用過程中有小伙伴反映如果課程的第一章是空白的頁面會報錯,我當時做的時候是根據我自己的課程,沒有第一節是空頁面的現象,這個以后有時間我再改一下吧,或者小伙伴自己修改一下也可)

原諒我這個標題黨,對叭起

最近沒事覺得網課惡心人,“你們學計算機的,隨便寫個程序玩玩,很容易噠”------語出高數老師,於是我就“隨便”寫了個刷網課的程序,沒什么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])

 禁止用於商業用途 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM