学校最近让看什么网课,智慧树网站的,太无聊了,写个脚本刷下,这里是用Python+selenium实现的,也可以用js脚本,更简单,但是我这里刚好最近在学python,就顺便练习下,说下有几个点,

1.这里为了练习顺便把登陆功能也做了,注意有一个自动联想元素,需要定位并点击它

2.有两个弹窗,只解决了一个,另一个不知为什么定位不到,所以这里需要手动点击一次,

3.视频中间会有问题弹窗出现,不处理弹窗不会继续播放,这里使用循环不断判断能否定位到弹窗,定位到了就对弹窗进行处理,获取网页源代码并定位问题的name,之后定位并随便选择一个答案作答,

4.这里设置了1.5倍速播放,注意需要先控制鼠标移动到播放窗口处,才能定位到速度按钮

5.其实也可以直接启动浏览器之后,自己进行登录操作,然后运行指定代码,

6.注意需要更改代码中的学校,学号,密码为自己的信息

网站的url:     http://study.zhihuishu.com/learning/videoList;       具体到个人可能会有一些其他的参数,不过不影响

欢迎交流。。

具体代码如下:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchFrameException
import time
from selenium.webdriver.common.action_chains import ActionChains
from bs4 import BeautifulSoup if __name__ == '__main__':
print('stART')
url = 'http://study.zhihuishu.com/learning/videoList;jsessionid=075B1012EC3EFA6EB79A19B1FF96EA44;jsessionid=709212495C7D26BCC1F884A2D4EEC2D9?recruitAndCourseId=4b585c5f4252415846425e5150'
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
browser.get(url)
wait.until(EC.element_to_be_clickable((By.LINK_TEXT, '学号'))).click()
wait.until(EC.presence_of_element_located((By.ID, 'quickSearch'))).send_keys('学校名字')
wait.until(EC.presence_of_element_located((By.ID, 'clCode'))).send_keys('学号')
wait.until(EC.presence_of_element_located((By.ID, 'clPassword'))).send_keys('密码')
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#schoolListCode > li:nth-child(2)'))).click()
wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'wall-sub-btn'))).click()
wait.until(EC.presence_of_element_located((By.LINK_TEXT, '确定'))).click()
# 这块手动点下我已统一
flag = 0
i = 1
k = 1
time.sleep(5)
while True:
if k == 1:
print("播放地", i, '个视频')
a = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'videoArea')))
ActionChains(browser).move_to_element(a).perform()
speed = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#vjs_mediaplayer > div.controlsBar > div.speedBox')))
speed.click()
speed_15 = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'speedTab15')))
speed_15.click()
k = 0
while True:
try:
a = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'videoArea')))
ActionChains(browser).move_to_element(a).perform()
isFinsh = (browser.find_element_by_class_name('passTime').get_attribute('style') == 'width: 100%;')
if isFinsh:
break
browser.switch_to.frame('tmDialog_iframe')
print("弹窗出现")
flag = 1
break
except NoSuchFrameException:
pass
if flag == 1: # 关闭弹窗
print("关闭弹窗")
soup = BeautifulSoup(browser.page_source)
name = soup.find(class_='answerOption').input.attrs['name']
a = wait.until(EC.presence_of_element_located((By.NAME, name)))
a.click()
#browser.find_element_by_name('question561294').click()
browser.switch_to.default_content()
browser.find_element_by_link_text('关闭').click()
print("关闭成功")
flag = 0
else: # 播放下一个视频
print("播放完了第", i, '个视频')
i += 1
browser.find_element_by_link_text('下一节').click()
isFinsh = False
k = 1
time.sleep(2)

用Python来自动刷智慧树网站的网课的更多相关文章

  1. 利用svn自动同步更新到网站服务器 -- 网摘

    首先在服务器上安装VisualSVN Server ,根据提示选好安装的路径,一路确定.安装好后运行VisualSVN Server ,在Repositories上点击右键,选择create New ...

  2. 智慧树刷网课python脚本

    0x00 写在前面 疫情期间肯定有很多小伙伴需要上网课,但是有些网课我们感觉十分的鸡肋,自己不感兴趣,又必须要学 所以我写了这个刷网课的小程序,一方面是锻炼自己的爬虫技术,另一方面也给同学们节约宝贵的 ...

  3. python网课自动刷课程序-------selenium+chromedriver

    python的强大之处就在于有许多已经写好的功能库提供,这些库强大且易用,对于写一些有特定功能的小程序十分方便. 现在就用pyhton的selenium+谷歌游览器写一个可以自动刷课的程序,以智慧树上 ...

  4. CSDN不限积分代下载,知网、万方、sci、IEEE论文代下载,智慧树、超星尔雅刷课

    下载内容: 1.CSDN不限积分代下载. 2.知网.万方.sci.IEEE论文代下载. 3.超星尔雅,智慧树刷课. 注:由于本人手抖买一个CSDN会员,想挽回一点损失,所以创立了一个下载群,绝对不是骗 ...

  5. 网课应该这么刷(油猴Tampermonkey脚本自动刷课)

    懒人福利 首先有些人不想学怎么用脚本,满足你们,压缩包解压之后直接登录即可.戳我下载 脚本已经集成好了,登录即可刷课.章节测试还会自动答题呦,正确率高达97%呦. 油猴及脚本安装 油猴的脚本不知可以刷 ...

  6. 利用python完成大学刷课(从0到完成的思路)

    i春秋作家:tllm 原文来自:利用python完成大学刷课(从0到完成的思路) 最近刚刚开学,学校总是有很多让人无语的课要修,还不能不修.然后我想写一个自动修课的脚本.大佬们不要笑我 是边面向百度学 ...

  7. python通过代理刷网页点击量

    python通过代理刷网页点击量 更新异常处理情况 @time 2013-0803 更新循环里计数问题和随机等待时间问题 #!/usr/bin/python #-*- coding:utf-8 -*- ...

  8. 使用node自动刷房源并发送可入住房源到邮箱

    因为住的地方离公司太远,每天上下班都要坐很久的班车,所以最近想搬到公司旁边的皖水公寓住.去问了一下公寓的客服,客服说房源现在没有了,只能等到别人退房,才能在网站上申请到. 如果纯靠手动F5刷新浏览器, ...

  9. Python-王者荣耀自动刷金币+爬取英雄信息+图片

    前提:本文主要功能是 1.用python代刷王者荣耀金币 2.爬取英雄信息 3.爬取王者荣耀图片之类的. (全部免费附加源代码) 思路:第一个功能是在基于去年自动刷跳一跳python代码上面弄的,思路 ...

随机推荐

  1. 小白学 Python 爬虫(38):爬虫框架 Scrapy 入门基础(六) Item Pipeline

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  2. Spring Cloud Alibaba Nacos

    1. Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 为分布式应用程序开发提供了一站式解决方案.它包含了开发分布式应用程序所需的所有组件,使得你可以轻松地使用 ...

  3. 【Java基础总结】GUI

    GUI(Graphical User Interface),图形用户接口 CLI(Command Line User Interface),命令行用户接口 1. 容器 Container GUI主要位 ...

  4. js去除字符串的前后空白

    使用gravatar生成邮箱的头像时需要对邮箱地址哈希化,其中需要去除邮箱地址的首尾空白,查找了一些资料,总结一下 使用 js 提供的函数 trim() trim() 方法会删除一个字符串两端的空白字 ...

  5. docker学习1--dockerfile

    记录docker学习过程 实践启动一个redis server 命令之前 要弄懂 dockfile 镜像 容器 三者概念以及三者之间的关系 dockerfile格式 # Comment 注释 INST ...

  6. Cannot create PoolableConnectionFactory (Could not create connection to database server.)

    是由于mysql驱动版本太低导致. 本人 jdk版本是1.8.0_211,mysql版本是8.0.17,mysql-connector-java版本是5.1.39, 后来把mysql-connecto ...

  7. python3函数进阶

    1.命名空间和作用域 命名空间     加载         内置命名空间             python解释器自带的变量和函数             开启python解释器自动加载内置命名空 ...

  8. Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name

    目前有发现的两种情况 第一种:是在继承jpa的时候检查实体类@id和@Entity引进的包是否是 import javax.persistence.Id imprt javax.persistence ...

  9. .net core webapi搭建(1)

    创建一个webapi项目 修改launchSettings.json 将launchSettings.json中的IIS启动删掉.别问我为啥  原因就是IISEXPRESS有时候需要我手动重启.我嫌麻 ...

  10. HUAWEI MateBook Fn 功能键/热键切换、设置方法

    原文地址:https://club.huawei.com/thread-13130964-1-1.html HUAWE MateBook E/X/D的F1.F2 等键默认是热键优先.在热键模式下,要想 ...