1:引用
近期培训机构开通了一门大数据的培训课程,由于本人具有一些大数据的基础,因此前面的基础课程可以选择跳过,直接学习核心的项目课程。
但是课程设置了闯关模式,只有前面的章节学习完之后,才能进行下一步的学习,实属无奈,想起曾经基于Python语言采用selenium实现过自动化机器人测试。
于是就动作开始....
2:课程大纲
3:页面结构分析
1:章节分析
通过元素查看,可以看到每个章节的主体都有id,可以考虑使用id选择器
2:小节分析
点开大的章节,其中每一个小节,有css属性 ivu-timeline-item-content,因此考虑css选择器
3:小节内容
经过观察,每小节的内容中有“作业”,“资料”是不需要点开的,当然如果想要继续做的更完善,可以再实现自动提交作业,以及下载资料文件。
4:选择器
上面进行分析,只需要采用id选择器与css选择器即可。
1:find_element_by_id
element=driver.find_element_by_id(‘element_id’)
WebDriver提供的id定位方法就是通过元素的id属性来查找元素。上面的语句就是用于定位页面上id=element_id的元素
注意:只会返回一个元素
2:find_elements_by_class_name
elements = cd.find_elements_by_class_name('col')
上面的语句是通过class来定位元素,即 class="col"的元素
注意:会返回一个或者多个元素的集合
5:源码
废话不多说,直接上源码
#MicroHuang 20210711
from selenium import webdriver
import time
import sys
#课程的url地址
CourseUrl="https://learn.kaikeba.com/catalog/214065?type=1"
#每一章标签的Id
ListSectionId=[213136,213138,213139,213140,213145,213146,213147,213148,213149,213150,213151,213152,213153,213154,213155,213192,213193,213194,213195]
#每章下对应的小节开始的索引值
ListIndexSection=[0,7,70,139,278,371,419,506,560,615,644,676,709,758,809,842,856,916,916,916]
#某一章下的小节对应的classname
class_name="ivu-timeline-item-content";
#配置chrome浏览器驱动
driver=webdriver.Chrome()
driver.implicitly_wait(10)
#全屏浏览器窗口
driver.maximize_window()
#输入地址跳转
driver.get(CourseUrl)
#停顿10s
time.sleep(10)
lenSection=len(ListSectionId)
for j in range(lenSection):
itemSection=ListSectionId[j];
#点击展开某个章节
driver.find_element_by_id(str(itemSection)).click();
time.sleep(5)
#获取某个章节下的所有小节内容,此处采用的是class选择器
elements=driver.find_elements_by_class_name(class_name)
lenelements=len(elements)
k=0;
for i in range(ListIndexSection[j],lenelements,1):
elements=driver.find_elements_by_class_name(class_name)
if(i==ListIndexSection[j]+k):
strtext=elements[i].text
flag1="资料" in strtext
flag2="作业" in strtext
#只点击视频,资料或者作业的直接跳过
if(flag1==False|flag2==False):
elements[i].click()
time.sleep(10)
driver.back()
time.sleep(10)
k=k+1
strtext=""
6:执行效果与结果
如下图所示,现在已经可以看大数据中的内容了。
7:扩展学习
selenium常用选择器方法
1:通过id 查找
find_element_by_id()
2:通过class name 和 name 查找
find_element_by_name()
find_element_by_class_name()
根据name元素和class的名字进行定位,这两种定位方式和id定位相似,在前端代码中,id、name和class一般都至少会有其中的一种
3:通过xpth 查找
find_element_by_xpath()
xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素的路径来完成对元素的查找。HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式。
4: 通过tag_name查找
find_element_by_tag_name ()
通过标签名去定位的方式一般是这样的:find_element_by_tag_name("input")
可见仅仅通过标签名去定位时,一般一种标签在一个页面里面会出现不止一次甚至大量出现,这种定位方式的作用不是很大,所以用的也就比较少。
5:通过链接定位查询
这两种定位方式是专门用于定位超链接的
find_element_by_link_text()
find_element_by_partial_link_text()
这两种定位方式是专门用于定位超链接的,也就是对应html页面中的<a>标签,括号里传的值就是a标签中的超链接文字,两者的区别在于一个是完整的超链接文字,一个是可以只写部分超链接文字。
6:通过CSS属性定位
find_element_by_css_selector()
CSS属性定位可以比较灵活地选择控件的任意属性,定位方式也会比xpath快。
8:说明
本文主要是对自己自动化测试的一个小的总结与练手,真正的知识还是要一步步的循序渐进。