Warning 本文章内容仅作学习记录,请勿传播以及用于非法用途

分析

事情的起因嘛其实很简单,特殊时期只能窝在家里,然后老师又在某课堂上放了一堆ppt,还是必须要看的那种,不看就扣平时分~~(委屈)~~
而那个ppt呢,又多又没意思,每页至少就得4、5秒才能成功打卡,贼耗时间。于是乎,出于高效学(wan)习(shua)的目的,决定来写一个脚本去自动跑ppt

要写脚本首先就要分析相关链接的特点,点击多个ppt后可以发现url中之后最后两块是不一样的,前面都是一样的,这意味着我们可以通过修改最后两个区域来进行ppt的跳转

接下来我们看看有ppt的页面,点击去以后可以发现并不是ppt直接出来的,二十还需要再点一次(页面上有个ppt的首页,点击后ppt会弹出在页面上)
在ppt出来以后我们可以发现他有两种状态:已读和未读。那么我们是否可以用这个来寻找我们还没有播放的ppt呢

ok,基本的分析就到这儿,接下来我们来考虑如何实现自动“过”ppt

实现

脚本的实现我们借助python来写。
python里边有个库叫做selenium,它可以在python的控制下启动一个浏览器,这样的话,我们就可以一边测试一边来写我们的脚本

selenium安装

首先我们需要有python,最好是3.x的,毕竟这个时候2.x已经停止维护了~~(无疑是废话,手动狗头)~~
其次,安装 selenium 库

pip install selenium

当selenium升级到3.0之后,对不同的浏览器驱动进行了规范。
如果想使用selenium驱动不同的浏览器,我们还必须单独下载并设置不同的浏览器驱动

Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedriver , taobao备用地址
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs

代码

隔了一天继续来写果然兴致不高了呢,我就直接把代码放上来了,有问题的阔以留言讨论哦

#-*- coding:utf8 -*-
# 导入selenium2中的webdriver库
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# 实例化出一个浏览器 
#driver = webdriver.Firefox()       ## 火狐浏览器
driver = webdriver.Chrome()         ## 谷歌浏览器

# 设置浏览器窗口的位置和大小
driver.set_window_position(20,40)
driver.set_window_size(1100,700)

# 打开一个页面
driver.get("https://www.xxxxx.cn/v2/web/stuxxxLog/3xxxxx3")       ## 部分地方以用xxx隐藏
driver.find_element_by_class_name('changeImg').click()
driver.find_element_by_name('loginname').send_keys('xxxxxxxxxxx')     ## 雨课堂登陆账号(手机号)
driver.find_element_by_name('password').send_keys('xxxxxxxxx')        ## 登陆密码
driver.find_element_by_class_name('submit-btn').click()
time.sleep(3)

arr = [
    "1676766/512342833",     ## 此处存放各个ppt页面url中的最后两个区域的数字,用逗号分隔
    '1650857/505844824'
    ]
str = 'https://www.xxxxx.cn/v2/web/stuxxxLog/3xxxxx3'  ## 和登陆的url一样呢,目的是为了和ppt的url拼接构成完整的ppt页面url
for i in arr:   ## ppt循环
    n = 0
    driver.get(str+i)
    time.sleep(5)
    try:
        price=driver.find_element_by_xpath("//*[@id='app']/div[2]/div/section/main/div[1]/div[1]/div/div[2]/div[1]/p/span[1]") ## 跳出查看ppt的窗口模块
        print("Start : "+price.text)
        driver.find_element_by_class_name('ppt_img_box').click()
        time.sleep(3)
        while True:
            read = driver.find_element_by_css_selector('.noRead')   ## 查找未看的ppt页面
            driver.execute_script("arguments[0].scrollIntoView();", read)  ## 将找到的ppt放到页面可视位置(不可视的时候不能过ppt哦)
            read.click()
            time.sleep(5)
            n+=1
            print(n)
    except Exception as e:
        print(e)
        print('行号', e.__traceback__.tb_lineno) ## 显示try错误位置,若为查找 **.noRead** 位置报错说明当前ppt已成功观看完毕
        if n==0:
            print("Error, please check '"+price.text+"' for yourself")
        else:
            print(price.text+" is OK!")
    time.sleep(5)


# 退出窗口
driver.quit()

Q.E.D.


来都来了,点个广告再走吧(=・ω・=)