完全机器模拟浏览器操作自动刷网课!不怕被封!!-----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 ...
随机推荐
- 手把手教你玩转 Excel 数据透视表
1. 什么是数据透视表 数据透视表是一种可以快速汇总.分析大量数据表格的交互式分析工具.使用数据透视表可以按照数据表格的不同字段从多个角度进行透视,并建立交叉表格,用以查看数据表格不同层面的汇总信息 ...
- 6、SQL模糊查询LIKE concat用法
concat用来拼接查询的字符串: SELECT * FROM `page_demo` WHERE name LIKE concat('%',#{name},'%') 模糊查询: 1.%代表零个或多个 ...
- 手撕AVL树(C++)
阅读本文前,请确保您已经了解了二叉搜索树的相关内容(如定义.增删查改的方法以及效率等).否则,建议您先学习二叉搜索树.本文假定您对二叉搜索树有了足够的了解. 效率? 众所周知,在平衡条件下,对二叉搜索 ...
- Aspose的jar破解文档
Aspose的jar破解文档 1.引入jar包 方式一: 1.在pom.xml配置aspose的jar包仓库 <repositories> <repository> <i ...
- vue/cli子组件style中如何使用全局图片路径
- LinkedList集合-Vector集合
LinkedList集合 java.util.LinkedList集合数据存储的结构是链表结构.方便元素添加.删除的集合.LinkedList是一个双向链表,那么双向链表是什么样子的呢,我们用个图了解 ...
- 【分析笔记】全志方案通过命令行操作 GPIO 口(带源码分析)
前言说明 在项目开发初期,很经常会需要临时操作某个GPIO来验证某些功能,可以通过编写一个简单的驱动程序来操作,但更方便的是可以通过命令行直接操作 GPIO ,这样不需要经过编写代码.编译驱动.推入文 ...
- Html5 canvas创意特效合集
Canvas就像一块画布,我们可以通过调用脚本在Canvas上绘制任意形状,甚至是制作动画.本文就是收集了很多非常富有创意的一些canvas动画特效例子,这些例子都非常适合大家学习.更多源码可在在这里 ...
- FineUI通过js事件条用后台方法实现弹窗
一.html标签的onclick事件 <button type="button" class="btnUpdate" onclick="< ...
- 郁金香 fs寄存器
为什么我们在追eax要挂主线程呢,这是因为它的数据来源在fs中 004D1000 为什么是这个呢 $ ==> 0392FFDC 指向SEH链表指针 $+4 03930000 线程堆栈顶部(地址最 ...