标签:播放 后退 实现 col evel 老师 handles begin body
原谅我这个标题党,对叭起
最近没事觉得网课恶心人,“你们学计算机的,随便写个程序玩玩,很容易哒”------语出高数老师,于是我就“随便”写了个刷网课的程序,没什么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])
完全机器模拟浏览器操作自动刷网课!不怕被封!!-----python基于selenium实现超星学习通刷视频网课
标签:播放 后退 实现 col evel 老师 handles begin body
原文地址:https://www.cnblogs.com/xhfzjbs/p/12028948.html