前言

看公选课还是能学到很多知识的,这里是给大家提供一个selenium的使用思路(好好学公选课,我真的看了)

思路

  • 当观看者移动鼠标到某一范围时就会停止播放,就让selenium一直将鼠标悬停在视频处;

  • 视频中途会弹出问题,一旦弹出问题的元素出现,就播放音效提示用户去作答,作答完毕后继续让selenium接管(已实现自动作答,但仍存在小问题)

  • 当每节观看时间任务达成后,自动点击下一视频进行播放。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from playsound import playsound
from selenium.webdriver.support import expected_conditions as EC
import time
''' 使用前提:
使用前需要将google\chrome\application文件夹加入到环境变量中,同时下载相应的webdriver版本也将其放到application文件夹下面
然后在在cmd中键入chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"
同时需要自行登陆进入视频学习界面(暂时没有研究出不靠selenium接管直接破验证码的方式) 存在的问题:
基本上视频中的弹框,选择第一个都能解决问题,在之后的测试中遇到答案错误情况极其少,所以弹框点击部分可能存在一定问题 '''
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# chrome_driver地址
chrome_driver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
time.sleep(2)
a = driver.find_elements_by_xpath("//div[@class='ncells']//a")
title = []
element = []
tt = []
# 获取的和标题的每节的名称存在空格的区别
for i in a:
title.append(i.get_attribute("title"))
tt.append(str.strip(i.get_attribute("title"))) def do():
t = driver.find_element_by_tag_name("h1").text
print("现在正在学习的是:", t)
driver.switch_to.frame('iframe')
iframe = driver.find_element_by_tag_name("iframe")
iframe.click()
oldtime = -1
i = 1
while True:
ActionChains(driver).move_to_element(iframe).perform()
driver.switch_to.frame(iframe)
# 有时候会自动暂停,如果在x秒内,进度没有变,就进行点击行为
if i == 1:
time.sleep(3)
i = 100
process = float(driver.find_element_by_xpath("//div[@role='slider']").get_attribute("aria-valuenow"))
print("现在已经播放了:", process)
if process == oldtime:
driver.switch_to.parent_frame()
time.sleep(3)
iframe.click()
print("已经恢复播放")
driver.switch_to.frame(iframe)
time.sleep(3)
else:
oldtime = process
if process > 90:
# 当视频播放完毕后,播放音效提示
# playsound("7371.mp3")
print("该节已经播放完毕")
driver.switch_to.parent_frame()
time.sleep(3)
driver.switch_to.parent_frame()
time.sleep(5)
newt = (tt.index(str.strip(t)))+1
newt = title[newt]
driver.find_element_by_xpath("//a[@title='"+newt+"']").click()
time.sleep(3)
try:
# 对于每一章的第一个视频因为有三个选项,所以首先需要点击第二个视频部分
driver.find_element_by_xpath("//span[@title='学习目标']")
driver.find_element_by_xpath("//span[@title='视频']").click()
except:
pass
print("现在来到了新视频:", driver.current_url)
t = str.strip(driver.find_element_by_tag_name("h1").text)
print("现在正在学习的是:", t)
time.sleep(2)
driver.switch_to.frame('iframe')
iframe = driver.find_element_by_tag_name("iframe")
iframe.click()
oldtime = -1
i = 1
continue
try:
# 视频中途弹出问题就播放音效提示去作答
driver.find_element_by_xpath("//input[@name='ans-videoquiz-opt']")
# playsound("12105.mp3")
print("----------答题时间到了----------")
# 选第一个基本上都是对的
driver.find_elements_by_xpath("//input[@type='radio']")[0].click()
time.sleep(2)
driver.find_element_by_xpath("//div[@class='ans-videoquiz-submit']").click()
try:
# 可能还是存在问题,没机会测试了
alt = driver.switch_to.alert()
alt.accept()
driver.switch_to.parent_frame()
print("----------点击弹框了!----------")
driver.find_elements_by_xpath("//input[@type='radio']")[1].click()
time.sleep(2)
driver.find_element_by_xpath("//div[@class='ans-videoquiz-submit']").click()
except:
pass
print('答题已经完成')
except:
pass
time.sleep(15)
driver.switch_to.parent_frame() do()

效果展示

[python / selenium] - 用python刷公选课是一种什么体验?的更多相关文章

  1. python+selenium(python基础)

    1.编辑器的选择 好刀不误砍柴工,那么我们写代码也需要一个利器,虽然python自带有python shell ,但我们在执行代码的时候,需要开很多窗口,最重要的一点是,代码文件的管理很不方便,笔者推 ...

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

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

  3. 自动化选课(Python + selenium

    ​ 前几天听到朋友说自己选课事情,突发奇想想要搞这样一个东西,但是由于各种原因只做到以下的完成度,具体的情况也会在解释的最后留下.这个只适用于曲师大的教务系统,因为用的这个系统来进行的一个调试,对于其 ...

  4. python+selenium 浏览器的问题

    以前用selenium调用firefox是不需要驱动的,最近安装了python3.52+最新的firefox 发现调不起来了 搜索以后发现Firefox 47+需要搞个firefox的驱动 gecko ...

  5. Eclipse+Python+Selenium自动化测试框架搭建

    1.下载Eclipse:http://www.eclipse.org/downloads/ 2.下载JDK:http://www.oracle.com/technetwork/java/javaee/ ...

  6. 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...

  7. Python + Selenium 实现登录Office 365

    最近捡起之前用的Python + Selenium实现工作中需要的登录Office 365功能.(吐槽:国内网络真是卡,登录Office 365实属不易.另外Selenium这样的网站都要墙,无法理解 ...

  8. python+selenium+Robot

    准备工作: 1.下载python2.7 http://python.org/getit/ 2.下载下载setuptools [python 的基础包工具] 可以帮助我们轻松的下载,构建,安装,升级,卸 ...

  9. python+selenium运行报错UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    使用python+selenium运行自动化脚本时,打印某一段文字出现UnicodeEncodeError: 'ascii' codec can't encode characters in posi ...

随机推荐

  1. Koa中间件(middleware)级联原理

    前言 上次看到了koa-compose的代码,今天来说一下koa中间件的级联以及工作原理. 中间件工作原理 初始化koa实例后,我们会用use方法来加载中间件(middleware),会有一个数组来存 ...

  2. 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

    一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除.修改),则会抛出Concurrent Modification Exceptio ...

  3. 【玩转SpringBoot】看似复杂的Environment其实很简单

    喜欢写代码,讨厌配环境 我相信这十个字的小标题代表了大多数码农的心声. 十年前读大学时,学校开设了C语言还有C++.但是学习这两种语言,对于新手来说非常没有成就感. 于是我就在校门口买个光盘,装个VS ...

  4. CCF-CSP题解 201512-3 画图

    画图时思路应该清晰一点.我是将坐标\((x,y)\)映射到\(canvas[y][x]\)上. 连线注意\(+\)号的情况,填充写好\(dfs\)就好了. #include <bits/stdc ...

  5. CCF-CSP题解 201903-3 损坏的RAID5

    先吐槽先吐槽!因为输入太大,需要用fgets,读n个字符或读到回车终止. char *fgets(char *str, int n, FILE *stream) 因为scanf模拟考试T了10+次.因 ...

  6. 4. abp中的asp.net core模块剖析

    相关模块 AbpAspNetCoreModule AbpAspNetCoreMvcModule AbpAspNetCoreMvcContractsModule abp通过这三个模块加载并配置了 asp ...

  7. Ubuntu下交换CTRL与CAPSLOCK

    1.编辑文件 keyboard sudo vim /etc/default/keyboard 2. 添加内容 XKBOPTIONS="ctrl:swapcaps" 3. reboo ...

  8. 松软科技Web课堂:JavaScript JSON

    JSON 是存储和传输数据的格式. JSON 经常在数据从服务器发送到网页时使用. 什么是 JSON? JSON 指的是 JavaScript Object Notation JSON 是轻量级的数据 ...

  9. win10环境下为mongoDB创建用户并认证登录

    一.配置mongoDB的bin目录到环境变量中的path;例如:D:\DatabaseService\MongoDB\Server\4.0\bin 二.cmd打开控制台,然后输入mongo回车,可以进 ...

  10. Python-根据照片信息获取用户详细信息(微信发原图或泄露位置信息)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 蒙娜丽胖 PS:如有需要Python学习资料的小伙伴可以加点击下方 ...