webdriver中有8中定位方法是针对单个元素定位的,同时也提供了8种用于定位一组元素的方法,单个元素定位和一组元素定位的其区别就在于多了s,有某有发现,来个复数就可以表示组了~~~~~~下边就罗列了8种用于定位一组元素的方法:
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
今天学习了用tag name,xpath,css来定位组元素的一些应用实例,以我这三天打鱼两天晒网的学习态度,主要是担心忘记,特此记录一下~~~之前在单个元素定位的方法中学习过,tag是用标签来定位元素,标签就是我们说的html页面上的<a></a>,<input/>,<img/>........
先上一段html页面的代码,以复选框为例,为了显示区别页面上除了复选框按钮,也加上了文本框,代码如下:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>Checkbox</title>
<link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js"></script>
</head>
<body>
<h3>checkbox</h3>
<div class="well">
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="cl">checkbox1</label>
<div class="controls">
<input type="checkbox" id="c1"/>
</div>
</div>
<div class="control-group">
<label class="control-label" for="c2">checkbox2</label>
<div class="controls">
<input type="checkbox" id="c2"/>
</div>
</div>
<div class="control-group">
<label class="control-label" for="c3">checkbox3</label>
<div class="controls">
<input type="checkbox" id="c3"/>
</div>
</div>
<input type="text" id="username"/>
</form>
</div>
</body>
</html>
接下来就通过python+selenium来对页面上的复选框进行操作,由于我们的html页面是静态页面,在本地保存,所以需要引入os类来读取html文件存放的路径,os.path.abspath("文件名")可以读取文件的绝对路径的地址。
利用find_elements_by_tag_name("input")读取所有的input标签的元素,根据get_attribute("type")方法判断对应的元素类型,对所有的复选框按钮进行勾选,代码如下:(PS:sleep()方法用的时候也可以用from time import sleep sleep(5)来实现哦~)
# coding="utf-8"
from selenium import webdriver
import os,time
driver = webdriver.Firefox()
#path.abspath()方法用于获取当前路径下的文件
file_path = "file:///" + os.path.abspath("checkbox.html")
print(file_path)
driver.get(file_path)
#选择页面上所有的tag name为input的元素
inputs = driver.find_elements_by_tag_name("input")
#然后从中过滤出type为checkbox的元素,单击勾选
for i in inputs:
if i.get_attribute("type") == "checkbox":
i.click()
time.sleep(5)
driver.quit()
上边的代码就可以实现页面上所有复选框的勾选了,
遗留问题:
html存放在本地的时候打印出来的结果如下:
实际在页面中解析出来的地址是下边这样的,浏览器是如何解析地址的,后续查到原因再更新,有懂得前辈也可以帮忙解析下