Webdriver提供了8種元素定位方法:id、name、class name、tag name、link text、partial link text、xpath、css selectorcss
1、以上8種元素定位,Webdriver提供兩套寫法html
1. 用By定位元素:經過By來聲明定位的方法,需引入By模塊web
find_element(By.ID,"kw")瀏覽器
find_element(By.NAME,"wd")dom
2. 直接定位函數
find_element_by_id("kw")網站
find_element_by_name("wd")ui
2、定位一組元素spa
定位一組元素通常用於如下場景:code
批量操做元素,例如勾選全部的複選框
先獲取一組元素,元素對象以列表形式返回,再從這組對象中過濾出須要操做的元素。例如定位出頁面全部的checkbox,而後選擇其中的一個進行操做
find_elements_by_id("kw")
find_elements_by_name("wd")
1 #coding=utf-8 2 from selenium import webdriver 3 import os 4 5 driver = webdriver.Firefox() 6 file_path = 'file:///' + os.path.abspath('checkbox.html') 7 driver.get(file_path) 8 9 # 選擇頁面上全部的tag name爲input的元素 10 inputs = driver.find_elements_by_tag_name('input') 11 12 #而後從中過濾出tpye爲checkbox的元素,單擊勾選 13 for i in inputs: 14 if i.get_attribute('type') == 'checkbox': 15 i.click() 16 17 driver.quit()
如何勾選一組元素中的某一個選項呢?
1 # 打印當前頁面上type爲checkbox的個數 2 print len(checkboxes) 3 4 # 把頁面上最後1個checkbox的勾給去掉
driver.find_elements_by_css_selector('input[type=checkbox]').pop().click() 5 # pop()或pop(-1) 默認獲取一組元素中的最後一個 6 #pop(0) 默認獲取一組元素中的第一個 7 #pop(1) 默認獲取一組元素中的第二個 8 #。。。。
3、8種元素定位
1. id定位
HTML規定id屬性在HTML文檔必須是惟一的。
find_element_by_id("kw")
2. name定位
name的屬性值在HTML頁面種能夠不是惟一的。
find_element_by_name("wd")
3. class定位
經過class屬性值來定位元素:
find_element_by_class_name("bg s_btn")
4. tag定位
經過<div>、<input>、<a>等tag來定位元素:
find_element_by_tag_name("input")
5. link定位
專門用來定位文本連接,經過連接文本的內容來定位元素:
find_element_by_link_text("百度新聞")
6. partial link定位
對link定位的一種補充,有些文本連接比較長,這個時候取文本的部分信息來定位元素(條件是能惟一標識這個連接)
find_element_by_partial_link_text("[百]度新[聞]")
7. xpath定位
xpath是一種在XML文檔種定位元素的語言,由於HTML頁可看做XML的一種實現。xpath定位方法實現基本能夠到99%
策略:
(1)絕對路徑定位(不建議,因對頁面的應變性太差)
(2)利用元素屬性定位(元素的任意屬性均可以,只要是惟一)
find_element_by_xpath("//input[@id='kw']")
find_element_by_xpath("//*[@maxlength='100']")
(3)屬性與層級結合
find_element_by_xpath("//span[@class='bg s_ipt_wr']/input[2]")
(4)使用邏輯運算符
find_element_by_xpath("//input[@id='kw' and @class='su']")
8. CSS定位
CSS是一種語言,它用來描述HTML和XML文檔的表現。CSS使用選擇器來爲頁面元素綁定屬性。通常狀況下定位速度要比xpath快,且定位成功率99%
驗證方法:使用網站自帶的Jquery庫能夠定位css選擇器,$就是jQuery的別稱,是jQuery庫提供的一個函數。
一、能夠經過$ () 裏的參數進行查找和選擇html文檔中的元素
如:
|
$( '#tmp' ); //這是查找dom的id等於tmp的元素
|
方法:在瀏覽器的console裏輸入:$('') 例:輸入$('.bg s_btn')即可驗證元素是否被定位到
定位策略:
(1)經過class屬性定位:
find_element_by_css_selector(".bg s_btn")
(2)經過id屬性定位:
find_element_by_css_selector("#kw")
(3)經過任意屬性定位:
find_element_by_css_selector("[autocomplete='off']")
(4)組合定位:
find_element_by_css_selector("span.bg s_btn>input#su")