python+selenium基礎之XPATH定位

elenium定位元素的方法有不少種,像是經過id、name、class_name、tag_name、link_text等等,可是這些方法侷限性太大,拿id屬性來講,首先必定不會每一個元素都有id屬性,其次元素的id屬性也不必定是固定不變的。因此這些方法瞭解一下便可,咱們真正須要熟練掌握的是經過xpath和css定位,通常只要掌握一種就能夠應對大部分定位工做了。css

 

下面總結一下xpath的定位方法,結合本身練習的實例加深一下了解html

1、首先須要瞭解一下xpath的概念和基本語法

網上關於xpath的教程比較少,能夠看一下菜鳥教程和w3cschool的相關資料:http://www.runoob.com/xpath/xpath-tutorial.htmlhttp://www.w3school.com.cn/xpath/index.asppython

 

2、經常使用的xpath定位方法

1.利用標籤內的屬性進行定位web

(1)經過id屬性瀏覽器

xpath = "//a[@id='start_handle']"//a 表示選取全部a元素,加上[@id='start_handle']表示選取id屬性爲'start_handle'的a元素
(2)經過name屬性定位

 

xpath = "//input[@name='custName']"

歸納ide

xpath = "//標籤名[@屬性='屬性值']"

 

屬性判斷條件:最多見爲id,name,class等等,屬性的類別沒有特殊限制,只要可以惟一標識一個元素便可。spa

當某個屬性不足以惟一區別某一個元素時,也能夠採起多個條件組合的方式,以下:3d

xpath= "//input[@type='XX' and @name='XX']"

 

2.利用text()方法定位orm

如上所示,在【上一步】按鈕的<a></a>標籤之間有一段文本「上一步」,那麼能夠經過下面這種方式來定位htm

xpath = "//a[text()='上一步']"

【開始辦理】按鈕可使用以下路徑

xpath = "//a[text()='開始辦理']"

 

3.利用contains()方法定位,也叫模糊定位

xpath = "//標籤名[contains(@屬性, '屬性值')]"

 

取href的關鍵信息'basicinfo',這樣也能夠定位到【開始辦理】按鈕
xpath = "//a[contains(@href, 'basicinfo')]"

4.若是一個元素沒法經過自身屬性直接定位到,則能夠先定位它的父(或父的父,它爺爺)元素,而後再找下一級便可

例如定位百度搜索框,能夠按照此種方式試驗一下(主要是看一下這個思路)
百度搜索框對應<input>標籤,定位<input>標籤的話,能夠先定位<form>標籤,再定位<form>標籤的子元素<span>標籤,最後找到<input>標籤
driver.find_element_by_xpath("//form[@id='form']/span[contains(@class,'s_ipt_wr')]/input").send_keys('python')

注意:在第二步定位<span>元素時,沒有用<span>的id屬性,由於在實際中發現經過webdriver打開的瀏覽器網頁中<span>標籤沒有id屬性了(因此選用<span>標籤的class屬性,而且經過contains()模糊定位),以下:

定位百度一下按鈕

driver.find_element_by_xpath().click()
或者 "//form[@id='form']//input[@id='su']"

 

總之,XPATH路徑表達式須要多寫多練,孰能生巧。還有當定位失敗時不要慌,找下緣由,眼見不必定爲實,像上面定位百度搜索框時,經過id屬性沒有定位到<span>標籤,查看經過webdriver打開的網頁元素時,發現<span>標籤的id屬性沒了,只有class屬性了,這個時候就須要換一個屬性,如class屬性(至於爲啥會消失,我也不知道,但願有高手不吝賜教)。

相關文章
相關標籤/搜索