完全机器模拟浏览器操作自动刷网课!不怕被封!!-----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])
禁止用于商业用途
完全机器模拟浏览器操作自动刷网课!不怕被封!!-----python基于selenium实现超星学习通刷视频网课的更多相关文章
- 孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1
孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1 (完整学习过程屏幕记录视频地址在文末) 要模拟进行浏览器操作,只用requests是不行的,因此今天了解到有专门的解决方案 ...
- 浏览器与服务器交互原理以及用java模拟浏览器操作v
浏览器应用服务器JavaPHPApache * 1,在HTTP的WEB应用中, 应用客户端和服务器之间的状态是通过Session来维持的, 而Session的本质就是Cookie, * 简单的讲,当浏 ...
- C# 模拟浏览器并自动操作
本文主要讲解通过WebBrowser控件打开浏览页面,并操作页面元素实现自动搜索功能,仅供学习分享使用,如有不足之处,还请指正. 涉及知识点 WebBrowser:用于在WinForm窗体中,模拟浏览 ...
- python3 scrapy 使用selenium 模拟浏览器操作
零. 在用scrapy爬取数据中,有写是通过js返回的数据,如果我们每个都要获取,那就会相当麻烦,而且查看源码也看不到数据的,所以能不能像浏览器一样去操作他呢? 所以有了-> Selenium ...
- 用Python模拟浏览器操作
两种思绪三种要领: 用pamie.建议不要使用,因为pamie为小我私人开发,里面的bug比力多,并且是直接使用win32com体式格局的,如果ie不警惕修改了,后果很严重.另外,pamie3使用的是 ...
- python基于selenium实现自动删除qq空间留言板
py大法好,让你解放双手. 脚本环境 python环境,selenium库,Chrome webdriver驱动等. 源码 # coding=utf-8 import datetime import ...
- python下selenium模拟浏览器基础操作
1.安装及下载 selenium安装: pip install selenium 即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...
- 从零开始学Python网络爬虫PDF高清完整版免费下载|百度网盘
百度网盘:从零开始学Python网络爬虫PDF高清完整版免费下载 提取码:wy36 目录 前言第1章 Python零基础语法入门 11.1 Python与PyCharm安装 11.1.1 Python ...
- 人人贷网的数据爬取(利用python包selenium)
记得之前应同学之情,帮忙爬取人人贷网的借贷人信息,综合网上各种相关资料,改善一下别人代码,并能实现数据代码爬取,具体请看我之前的博客:http://www.cnblogs.com/Yiutto/p/5 ...
- Python对Selenium调用浏览器进行封装包括启用无头浏览器,及对应的浏览器配置文件
""" 获取浏览器 打开本地浏览器 打开远程浏览器 关闭浏览器 打开网址 最大化 最小化 标题 url 刷新 Python对Selenium封装浏览器调用 ------b ...
随机推荐
- 从源码层面深度剖析Spring循环依赖
作者:郭艳红 以下举例皆针对单例模式讨论 图解参考 https://www.processon.com/view/link/60e3b0ae0e3e74200e2478ce 1.Spring 如何创建 ...
- VC实例和VM实例的区别!!!
1.内置关系是什么 VueComponent.prototype.__proto__ === Vue.prototype 2.为什么要有这个关系 让组件实例对象可以访问到 Vue原型上的属性.方法.
- 基于 Traefik 的激进 TLS 安全配置实践
前言 Traefik是一个现代的HTTP反向代理和负载均衡器,使部署微服务变得容易. Traefik可以与现有的多种基础设施组件(Docker.Swarm模式.Kubernetes.Marathon. ...
- 从Spring中学到的【2】--容器类
容器类 我们在实际编码中,常常会遇到各种容器类,他们有时叫做POJO,有时又叫做DTO,VO, DO等,这些类只具有容器的作用,具有完全的get,set方法,作为信息载体,作数据传输用. 其实,很多地 ...
- java8新特性学习笔记
目录 1.速度更快 2.Lambda表达式 2.1.匿名内部类的Lambda转换 2.2.java8内置的四大核心函数式接口 2.3.方法引用和构造器 2.3.1.方法引用 2.3.2.构造器引用 2 ...
- [python] python-pinyin库
python-pinyin库是一个汉字拼音转换工具,其主要功能有: 根据词组智能匹配最正确的拼音. 支持多音字. 简单的繁体支持, 注音支持. 支持多种不同拼音风格. 安装命令为:pip instal ...
- 一文了解华为FusionInsight MRS HBase的集群隔离方案RSGroup
摘要: RSGroup是集群隔离方案. 本文分享自华为云社区<华为FusionInsight MRS HBase的集群隔离--RSGroup>,作者: MissAverage. 一.HBa ...
- 拜占庭将军问题与CAP
1.拜占庭将军问题 拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都.由于当时拜占庭罗马帝国国土辽阔,为了达到防御目的,每个军队都分隔很远,将军与将军之间只能靠信差传消息.在战争的时候,拜占庭军 ...
- JavaScript 内存管理及垃圾回收
一.内存管理 JavaScript 是一种自动垃圾回收语言,这意味着 JavaScript 引擎会自动监测和清理无用的内存. JavaScript 中的内存管理主要由 JavaScript 引擎负责, ...
- (19)go-micro微服务filebeat收集日志
目录 一 Filebeat介绍 二 FileBeat基本组成 三 FileBeat工作原理 四 Filebeat如何记录文件状态: 五 Filebeat如何保证事件至少被输出一次 六 安装Filebe ...