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 库

1
pip install selenium

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

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

代码

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#-*- 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()