完全机器模拟浏览器操作自动刷网课!不怕被封!!-----python基于selenium实现超星学习通刷视频网课

原谅我这个标题党,对叭起

最近没事觉得网课恶心人,“你们学计算机的,随便写个程序玩玩,很容易哒”------语出高数老师,于是我就“随便”写了个刷网课的程序,没什么nb算法,请各路大神指教

原谅我的个别函数名和变量名用了拼音,别喷我low呜呜呜(其实就是懒,打拼音顺手了,这是个坏习惯,大家别学我)

以上的都是废话

需要注意的是要安装一个浏览器驱动,去网上下载就好了,把地址添加在第四行那里,我代码里面的是谷歌浏览器,如果想要用其他的浏览器代码换成相应的就行

然后要自己在终端输入自己的账号、密码,还有登录时候的验证码(有条件的同学可以去“云打码“弄一个自动识别二维码的,也不用很多钱,贫穷大学生枯了,或者牛逼的大佬可以自己搞一个相应的机器学习模型来识别验证码)

其中大家要自己提供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])

猜你喜欢

转载自www.cnblogs.com/xhfzjbs/p/12028948.html