完全机器模拟浏览器操作自动刷网课!不怕被封!!-----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 ...
随机推荐
- json提取器和beanshell处理器组合,将提取的所有id以数组返回
1.添加json提取器 2.添加beanshell处理器,并编写脚本 String str1 = vars.get("buildid_ALL"); log.info(str1); ...
- MYSQL进阶学习笔记
MySQL在Linux中的使用: 1.查看mysql在linux的安装版本 mysqladmin –version 2.mysql服务的启动与停止 (1).启动: service mysql star ...
- react 高效高质量搭建后台系统 系列 —— 请求数据
其他章节请看: react 高效高质量搭建后台系统 系列 请求数据 后续要做登录模块(主页),需要先和后端约定JSON数据格式,将 axios 进行封装,实现本地的数据模拟 mockjs. Tip:s ...
- ABP Framework 手动升级指南:从6.0.1升级到7.0.0
ABP 7.0.0 正式版已经发布,ABP-Framework-All-In-One 项目同步升级. LeptonX Lite Theme 目前还没有包含在源码解决方案中,还是以 Nuget 包提供, ...
- Maven项目中导入坐标依赖时报(Failure to transfer....)的错的问题
Maven项目中导入坐标依赖时报(Failure to transfer....)的错的问题 今天在做Spring MVC的一个项目时导入坐标依赖的时候突然网断了一下(村里网络日常不稳定),然后就 ...
- 安装pytorch-gpu的经验与教训
首先说明 本文并不是安装教程,网上有很多,这里只是自己遇到的一些问题 我是以前安装的tensorflow-gpu的,但是发现现在的学术论文大部分都是用pytorch复现的,因此才去安装的pytorch ...
- iOS Reveal 4 安装详解简单粗暴
项目在测试的时候,然后拿了公司最低配置的ipod 来装我们的项目,但是呢,我们的项目居然掉帧很厉害,然后看了一下别人的app,居然不卡,然后就想去看看,别人是怎么做到的.然后呢?就走上了Reveal之 ...
- 【3.x合批亲测】使用这个优化方案,iPhone6也能飞起来,直接拉满60帧!
大家好,我是晓衡! 上周我花了3天的时间,体验测试了一款 Creator 3.x 性能优化工具:98K动态分层合批. 它能将 DrawCall 超过 1000+ 次的 2D 界面,实现运行时节点分层排 ...
- C#Autofac依赖注入批量注入 (目前版本.netcore3.0)
上一文:C#依赖注入一看就会系列 链接:C#依赖注入(直白明了)讲解 一看就会系列 - 22222220 - 博客园 (cnblogs.com) 上一次我们知道了 为什么要依赖注入,这次我们就用使用人 ...
- 【Rust学习】内存安全探秘:变量的所有权、引用与借用
作者:京东零售 周凯 一.前言 Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月,是一种高效.可靠的通用高级语言.其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有 ...