学校最近让看什么网课,智慧树网站的,太无聊了,写个脚本刷下,这里是用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. Could not write JSON: Infinite recursion (StackOverflowError);

    转自:https://blog.csdn.net/east123321/article/details/80435051 在controller返回数据到统一json转换的时候,出现了json inf ...

  2. 欧拉-拉格朗日方程 The Euler-Lagrange Equation

    在 paper: Bounded Biharmonic Weights for Real-Time Deformation 中第一次接触到 Euler-Lagrange 方程,简单记录一下. 泛函的定 ...

  3. 【转】Hibernate面试问题集锦: 概述

    ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. Q.怎么配置Hibernate? A.Configuration类使用配 ...

  4. Ubuntu16安装NVIDIA驱动后重复登录 简单粗暴

    第一步 卸载所有NVIDIA的东西 第二步 开机,应该能进入默认驱动的桌面了,在设置里关闭开机密码,开机自动登录 第三步 安装英伟达驱动

  5. Spring学习记录4——Spring对DAO的支持

    Spring对DAO的支持 随着持久化技术的持续发展,Spring对多个持久化技术提供了集成支持,包括Hibernate.MyBatis.JPA.JDO:此外,还提供了一个简化JDBC API操作的S ...

  6. 区间dp - 不连续的回文串

    Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon, they plann ...

  7. 如何高效实用 Git

    Git 工作流 只要项目是多人参与的,那么就需要使用正确的 Git 工作流程. 下面介绍一个简单有效的工作流程. 场景 假设有一个项目,要开发下一代的 Facebook,你就是这个项目的技术 lead ...

  8. Android studio 连接真机

    首先用数据线连接真机 1.打开开发者模式(小米手机mix2s为例 设置->我的设备->全部参数->连续点击MIUI版本——开启成功) 2.在更多设置中找到系统安全设置——允许安装未知 ...

  9. vwmare 十月第 1 弹

    step one 不管 是 ubuntu 还是 win vm tools 都是需要在虚拟的系统里面的去安装的. 这一点是相同的.

  10. 使用Async方法 Using Async Methods 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-32.