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

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

最近没事觉得网课恶心人,“你们学计算机的,随便写个程序玩玩,很容易哒”------语出高数老师,于是我就“随便”写了个刷网课的程序,没什么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实现超星学习通刷视频网课的更多相关文章

  1. 孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1

    孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1 (完整学习过程屏幕记录视频地址在文末) 要模拟进行浏览器操作,只用requests是不行的,因此今天了解到有专门的解决方案 ...

  2. 浏览器与服务器交互原理以及用java模拟浏览器操作v

    浏览器应用服务器JavaPHPApache * 1,在HTTP的WEB应用中, 应用客户端和服务器之间的状态是通过Session来维持的, 而Session的本质就是Cookie, * 简单的讲,当浏 ...

  3. C# 模拟浏览器并自动操作

    本文主要讲解通过WebBrowser控件打开浏览页面,并操作页面元素实现自动搜索功能,仅供学习分享使用,如有不足之处,还请指正. 涉及知识点 WebBrowser:用于在WinForm窗体中,模拟浏览 ...

  4. python3 scrapy 使用selenium 模拟浏览器操作

    零. 在用scrapy爬取数据中,有写是通过js返回的数据,如果我们每个都要获取,那就会相当麻烦,而且查看源码也看不到数据的,所以能不能像浏览器一样去操作他呢? 所以有了-> Selenium ...

  5. 用Python模拟浏览器操作

    两种思绪三种要领: 用pamie.建议不要使用,因为pamie为小我私人开发,里面的bug比力多,并且是直接使用win32com体式格局的,如果ie不警惕修改了,后果很严重.另外,pamie3使用的是 ...

  6. python基于selenium实现自动删除qq空间留言板

    py大法好,让你解放双手. 脚本环境 python环境,selenium库,Chrome webdriver驱动等. 源码 # coding=utf-8 import datetime import ...

  7. python下selenium模拟浏览器基础操作

    1.安装及下载 selenium安装: pip install selenium  即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...

  8. 从零开始学Python网络爬虫PDF高清完整版免费下载|百度网盘

    百度网盘:从零开始学Python网络爬虫PDF高清完整版免费下载 提取码:wy36 目录 前言第1章 Python零基础语法入门 11.1 Python与PyCharm安装 11.1.1 Python ...

  9. 人人贷网的数据爬取(利用python包selenium)

    记得之前应同学之情,帮忙爬取人人贷网的借贷人信息,综合网上各种相关资料,改善一下别人代码,并能实现数据代码爬取,具体请看我之前的博客:http://www.cnblogs.com/Yiutto/p/5 ...

  10. Python对Selenium调用浏览器进行封装包括启用无头浏览器,及对应的浏览器配置文件

    """ 获取浏览器 打开本地浏览器 打开远程浏览器 关闭浏览器 打开网址 最大化 最小化 标题 url 刷新 Python对Selenium封装浏览器调用 ------b ...

随机推荐

  1. vscode下无法使用fresh的问题

    使用了go get github.com/pilu/fresh ,需要 go install github.com/pilu/fresh. 在带用go.mod的版本中,go get只是下载代码和帮助修 ...

  2. $_GET方法踩坑

    背景 写代码时,遇到一个奇怪的问题:小程序卡券解码接口老是报解码失败,苦寻了一个小时,发现原来是url参数经过thinkphp的I方法被过滤掉,而且涉及到PHP原生的$_GET 原因 I方法底层是原生 ...

  3. P5683 [CSP-J2019 江西] 道路拆除

    简要题意 给你一个 \(m\) 条边 \(n\) 个点的无向图.你需要去掉一些边,使得 \(1 \to s_1,1 \to s_2\) 连通,且 \(1 \to s_1\) 的最短路径长度小于 \(t ...

  4. for循環,逗號運算符,其他(+= -= *= /=)

  5. day10-AOP-03

    AOP-03 7.AOP-切入表达式 7.1切入表达式的具体使用 1.切入表达式的作用: 通过表达式的方式定义一个或多个具体的连接点. 2.语法细节: (1)切入表达式的语法格式: execution ...

  6. Docker使用阿里云拉取配置源也无法拉取的镜像-github镜像镜像gcr.io

    我搞了一天都没搞好,最后用了这个办法解决了拉取镜像的问题 对于大部分镜像来说,我们配置源就可以,但是对于较新的镜像,没得搞啊,铁子们,真的崩溃... 最终发现可以通过Aliyun的自动构建来处理被墙镜 ...

  7. Coolify系列01- 从0到1超详细手把手教你上手Heroku 和 Netlify 的开源替代方案

    什么是Coolify 一款超强大的开源自托管 Heroku / Netlify 替代方案 coolLabs是开源.自托管和以隐私为中心的应用程序和服务的统称 为什么使用Coolify 只需单击几下即可 ...

  8. strapi系列-如何创建一个定时任务-Cron Jobs

    Cron 是什么? Cron 有多种用途. Cron Jobs 用于安排服务器上的任务运行.它们最常用于自动化系统管理或维护.然而,它们也与 Web 应用程序的构建相关. Web 应用程序可能需要在各 ...

  9. vue3和百度地图关键字检索 定位 点击定位

    效果图 在index.html中引入 百度地图开放平台 去申请你的ak 非常的简单可以自己百度 一下 <!-- 这个用官网给的有好多警告 更具百度的把 https://api.map.baidu ...

  10. SSM中PageHelper的使用方法

    SSM中PageHelper的使用方法 转载于for dream 第一步.导包(或者导入坐标) <!-- https://mvnrepository.com/artifact/com.githu ...