python+selenium基礎之XPATH定位(第一篇)


世界上最遠的距離大概就是明明看到一個頁面元素站在那里,但是我卻定位不到!!

selenium定位元素的方法有很多種,像是通過id、name、class_name、tag_name、link_text等等,但是這些方法局限性太大,拿id屬性來說,首先一定不會每個元素都有id屬性,其次元素的id屬性也不一定是固定不變的。所以這些方法了解一下即可,我們真正需要熟練掌握的是通過xpath和css定位,一般只要掌握一種就可以應對大部分定位工作了。

 

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

一、首先需要了解一下xpath的概念和基本語法

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

 

二、常用的xpath定位方法

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

(1)通過id屬性

xpath = "//a[@id='start_handle']"
//a 表示選取所有a元素,加上[@id='start_handle']表示選取id屬性為'start_handle'的a元素
(2)通過name屬性定位

 

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

概括

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

 

屬性判斷條件:最常見為id,name,class等等,屬性的類別沒有特殊限制,只要能夠唯一標識一個元素即可。

當某個屬性不足以唯一區別某一個元素時,也可以采取多個條件組合的方式,如下:

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

 

2.利用text()方法定位

如上所示,在【上一步】按鈕的<a></a>標簽之間有一段文本“上一步”,那么可以通過下面這種方式來定位

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("//form[@id='form']/span[@class='bg s_btn_wr']/input").click()
或者 "//form[@id='form']//input[@id='su']"

 

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

 


2018-05-06 16:37:51


免責聲明!

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



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