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 库
当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
|
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time
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") 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", '1650857/505844824' ] str = 'https://www.xxxxx.cn/v2/web/stuxxxLog/3xxxxx3' for i in arr: 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]") 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') driver.execute_script("arguments[0].scrollIntoView();", read) read.click() time.sleep(5) n+=1 print(n) except Exception as e: print(e) print('行号', e.__traceback__.tb_lineno) if n==0: print("Error, please check '"+price.text+"' for yourself") else: print(price.text+" is OK!") time.sleep(5)
driver.quit()
|