一.絕對路徑(不要使用,除非已經(jīng)使用了所有方式仍然無法定位)
方法:根據(jù)實際目錄甘有,逐層輸寫诉儒。
例子: find_element_by_xpath("/html/body/div[2]/form/span/input") #div[2]指第2個元素
二.相對路徑(建議使用)
方法:首先找目錄元素是否有”精準元素“即唯一能標識的屬性,找到亏掀,則用此屬性定位忱反;
1. 通過元素本身的唯一屬性定位
? ?方法:找到目標元素所在的”精準元素“即唯一標識屬性,使用此屬性定位
1.1 通過id屬性定位
? ? ? 例:find_element_by_xpath("http://input[@id='input']")? ? ? ? #@后跟屬性滤愕,可以是任何屬性
1.2 通過name屬性定位
? ? ? 例:find_element_by_xpath("http://div[@name='q']")
2. 通過上一級目錄的唯一屬性定位
? ? 方法:目標元素沒有唯一屬性温算,則去找到與目標元素相近的上級目錄中”唯一元素“作為起始位置,然后根據(jù)此相對位置逐層往子目錄編寫到目標位置
例: find_element_by_xpath("http://span[@id='input-container']/input")?
? ? ? ? ?find_element_by_xpath("http://div[@id='hd']/form/span/input")
? ? ? ? ?find_element_by_xpath("http://div[@name='q']/form/span/input")
3.? xpath做布爾邏輯運算
例子:find_element_by_xpath("http://div[@id='hd' or @name='q']")
4. 雙條件同時過濾
? ? ? find_element_by_xpath("http://div[@id='hd'][@name='q'")
5.目錄元素存在層級關(guān)系
例1: find_element_by_xpath("http://ul[@class='app-list']/li[contains(@class,'safe')]/div")
例2:定位上一層再定位目標元素(定位dl再定位dt)
find_element_by_xpath("http://form[@id='J_login_form]/dl/dt/input[@id='J_password']")
6. 模糊定位
6.1 contains 方法(包含)
find_element_by_xpath("http://a[contains(@name,'trnews')]")
6.2 start-with方法(以XX開頭)
find_element_by_xpath("http://a[start-with(@href,'http')]")
6.3 text方法
find_element_by_xpath("http://a[contains(text(),'新聞')]")? 查找超鏈接元素的文本內(nèi)容
find_element_by_xpath("http://*[text()='新聞']")? 查找所有內(nèi)容為退出二字的元素
注意:元素屬性值有空格時间影,盡量不使用帶空格注竿,可用contains等其他方法,避開空格