我們熟知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): 默認獲取一組元素中的第二個
- ......