我们熟知Webdriver有8种定位元素的方法,但是当需要定位一组元素的时候,可以使用Webdriver提供的与之对应的8种用于定位一组元素的方法,分别是:
- find_elements_by_id()
- find_elements_by_name()
- find_elements_by_class_name()
- find_elements_by_tag_name()
- find_elements_by_link_text()
- find_elements_by_partial_link_text()
- find_elements_by_xpath()
- find_elements_by_link_css_selector()
常见的定位一组元素一般用于以下场景:
- 批量操作元素,例如勾选页面上所有的复选框。
- 先获取一组元素,再从这组对象中过滤出需要操作的元素。例如定位页面上所有的checkbox,然后选择其中的一个进行操作。
手动创建一个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.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-lable" for="c1">checkbox1</label> <div class="controls"> <input type="checkbox" id="c1" /> </div> </div> <div class="control-group"> <label class="control-lable" for="c2">checkbox2</label> <div class="controls"> <input type="checkbox" id="c2" /> </div> </div> <div class="control-group"> <label class="control-lable" for="c3">checkbox3</label> <div class="controls"> <input type="checkbox" id="c3" /> </div> </div> </form> </div> </body> </html>
浏览器打开如下:
Python代码:
from selenium import webdriver import time driver = webdriver.Firefox() file_path = r'E:\python_script\Webdriver\checkbox.html' 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(1) driver.quit()
如果只想要选择所有复选框中的一个,那么可以:
driver.find_elements_by_tag_name('input')[1].click()
除此之外,还可以使用XP啊退货或CSS来直接判断属性值,从而进行单击操作
# 使用xpath找到type=checkbox的元素 chekboxes = driver.find_elements_by_xpath("//input[@type='checkbox']") # 通过CSS找到type=checkbox的元素 checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]')
选择之后,想要取消某一个复选框的操作:
# 把页面第二个checkbox的勾给去掉 driver.find_elements_by_css_selector('input[type=checkbox]').pop(1).click()
pop()方法用于获取列表中的一个元素(默认为最后一个元素)
- pop()或pop(-1):默认获取一组元素的最后一个
- pop(0): 默认获取一组元素中的第一个
- pop(1): 默认获取一组元素中的第二个
- ......