上一篇博文中写到了用tag name来定位一组元素,本篇文章中用XPath和css实现定位一组元素,两者的区别在于用tag name找到一组标签之后,用for循环来进行遍历,在遍历的过程中通过get_attribute("type")对type属性进行判断,通过XPath和CSS可以直接判断属性值,还是以checkbox.html为例
checkbox.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>
checkbox_css_xpath.py,代码中涉及到len()方法读取长度,python中的pop()方法可以读取列表中的一个元素,默认是最后一个元素,相当于pop(-1),读取第一个元素可以用pop(1),以此类推,下边代码中用while循环来实现对所有的复选框去勾选
# coding="utf-8"
from selenium import webdriver
import os,time
driver = webdriver.Firefox()
file_path = "file:///" + os.path.abspath("checkbox.html")
print(file_path)
driver.get(file_path)
#通过XPath找到type=checkbox的元素
checkboxs = driver.find_elements_by_xpath("//input[@type='checkbox']")
#通过css找到type=checkbox的元素
#checkboxs = driver.find_elements_by_css_selector("input[type=checkbox]")
for checkbox in checkboxs:
checkbox.click()
time.sleep(5)
#打印当前页面上type为checkbox的个数
print(len(checkboxs))
#把页面上最后一个checkbox的勾选去掉,pop()方法用于获取列表中的一个元素(默认为最后一个元素),对任意元素进行操作的话可以利用pop(0),pop(1)来进行操作
##driver.find_elements_by_css_selector("input[type=checkbox]").pop().click()
##driver.find_elements_by_css_selector("input[type=checkbox]").pop(0).click()
#用while循环语句对所有的复选框去勾选
i = 0
while i < len(checkboxs):
driver.find_elements_by_css_selector("input[type=checkbox]").pop(i).click()
i = i + 1
time.sleep(2)
driver.quit()