selenium的基本定位方式總結


Selenium提供了8種定位方式。
  • id
  • name
  • class name
  • tag name
  • link text
  • partial link text
  • xpath
  • css selector
這8種定位方式在Python selenium中所對應的方法為:
  • find_element_by_id()
  • find_element_by_name()
  • find_element_by_class_name()
  • find_element_by_tag_name()
  • find_element_by_link_text()
  • find_element_by_partial_link_text()
  • find_element_by_xpath()
  • find_element_by_css_selector()
 
百度頁面查看元素屬性,頁面如下
 

 

 
 
通過id定位
find_element_by_id("kw")
find_element_by_id("su")
 
通過name定位:
find_element_by_id("wd")
 
通過class name 定位
find_element_by_class_name("s_ipt")
 
通過tag name定位
find_element_by_tag_name("input")
可見僅僅通過標簽名去定位時,一般一種標簽在一個頁面里面會出現不止一次甚至大量出現,這種定位方式的作用不是很大,所以用的也就比較少
 
通過xpath定位
 
絕對路徑定位
find_element_by_xpath("/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input")
 
 
find_element_by_xpath("//input[@id='kw']")
find_element_by_xpath("//*[@name='wd']")
其中的標簽名input也可以用*來代替,而且只要是在該標簽內,任意屬性都可以,比如搜索框的maxlength屬性:
find_element_by_xpath("//input[@maxlength='255']")
 
查找搜索框的時候發現其上級元素form又唯一的id方便定位,就可以先查找到form元素然后依次往下寫路徑
find_element_by_xpath("//form[@id='form']/span/input")
 
如果元素的單個屬性無法確定其唯一性,可以用and連接多個屬性去確定
find_element_by_xpath("//input[@id='kw' and @name='wd']")
 
通過css定位
 
一般class是用.標記,id是用#標記,標簽名直接寫具體標簽名就好
find_element_by_css_selector("#su")
find_element_by_css_selector(".s_ipt")
find_element_by_css_selector("[name=wd]")
 
 
css定位里面也可以通過屬性或者組合方式定位:
find_element_by_css_selector("input[autocomplete='off']")
find_element_by_css_selector("span.bg.s_btn_wr>input#su")
具體說一下百度一下那個按鈕的組合定位方式,這樣寫的定位順序是這樣的,先定位到一個class名為bg s_btn_wr的span標簽,在這個標簽下面有一個id為su的input標簽,這樣就定位到了
 
值得注意的是,在css里面下級標簽元素用>連接,如果class里面有空格,空格用.進行連接。
 
 
find_element_by_link_text()
find_element_by_partial_link_text()
這兩種定位方式是專門用於定位超鏈接的,也就是對應html頁面中的<a>標簽,括號里傳的值就是a標簽中的超鏈接文字,兩者的區別在於一個是完整的超鏈接文字,一個是可以只寫部分超鏈接文字。
比如點擊百度首頁中右上角的新聞超鏈接,可以這樣去定位:

 

driver.find_element_by_link_text("新聞").click()
driver.find_element_by_partial_link_text("聞").click()
 
 
 

elements復數定位

在上面的例舉的八中基本定位方式種,都有對應的復數形式,分別是下面:
id復數定位find_elements_by_id()
name復數定位find_elements_by_name()
這些復數定位方式每次取到的都是具有相同類型屬性的一組元素,所以返回的是一個list隊列,我們也可以利用這個去定位單個的元素。比如百度首頁種,右上角有新聞、視頻、地圖、貼吧等一些鏈接,我們通過f12查看源碼可以發現,這些鏈接都有共同的class, class="mnav"。

 

舉個例子,比如定位排在第六個的學術,可以這樣定位:driver.find_elements_by_class_name("mnav")[5].click()
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM