selenium定位元素--XPATH
世界上最遠的距離大概就是明明看到一個頁面元素站在那裡,但是我卻定位不到!!
selenium定位元素的方法有很多種,像是通過id、name、class_name、tag_name、link_text等等,但是這些方法侷限性太大,拿id屬性來說,首先一定不會每個元素都有id屬性,其次元素的id屬性也不一定是固定不變的。所以這些方法瞭解一下即可,我們真正需要熟練掌握的是通過xpath和css定位,一般只要掌握一種就可以應對大部分定位工作了。
下面總結一下xpath的定位方法,結合自己練習的例項加深一下了解
一、首先需要了解一下xpath的概念和基本語法
網上關於xpath的教程比較少,可以看一下菜鳥教程和w3cschool的相關資料:
二、常用的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']"
引自:https://www.cnblogs.com/hanmk/p/8997786.html