(使用过程中有小伙伴反映如果课程的第一章是空白的页面会报错,我当时做的时候是根据我自己的课程,没有第一节是空页面的现象,这个以后有时间我再改一下吧,或者小伙伴自己修改一下也可)

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

最近没事觉得网课恶心人,“你们学计算机的,随便写个程序玩玩,很容易哒”------语出高数老师,于是我就“随便”写了个刷网课的程序,没什么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])

禁止用于商业用途

最新文章

  1. Gerrit增加SSL证书
  2. 【高级功能】使用 Ajax(续)
  3. .netcore跨平台 之 windows上编译,ubuntu上运行
  4. 负载均衡之Haproxy配置详解(及httpd配置)
  5. Debian中编译内核
  6. Javascript手记-基本类型和引用类型
  7. php把时间格式化
  8. Java 开发@ JDBC链接SQLServer2012
  9. Android_adb使用
  10. How to build UDK2015?
  11. 百度SMS SDK for .Net
  12. 使用JavaScript将图片保存至本地
  13. 除了使用new关键字,还有什么方法可以创建Java对象呢?
  14. python 获取文件目录位置
  15. docker上安装elasticsearch和ik分词器插件和header,实现分词功能
  16. shell 学习笔记一
  17. ELKF安装使用教程。elasticsearch+logstash+kibana+filebeta。
  18. laravel注册行为的方法和逻辑
  19. gunicorn结合django启动后台线程
  20. mac系统终端sudo免输入密码技能get

热门文章

  1. css实习滤镜效果(背景图模糊)
  2. go语言的切片特性
  3. 多项式 I:拉格朗日插值与快速傅里叶变换
  4. 【集成开发环境 (IDE)】Dev-Cpp下载与安装 [ 图文教程 ]
  5. python 之路 37 Navicat 可视化软件使用、 pymysql模块使用
  6. 问一个 Windows 窗口的 Capture 问题
  7. Java基础篇——Gui编程
  8. [Unity]Update()与FixedUpdate()
  9. 震网(Stuxnet)病毒深度解析:首个攻击真实世界基础设施的病毒
  10. Python解释器下载与安装