1. 程式人生 > 其它 >Python-元素定位API之XPATH

Python-元素定位API之XPATH

1、通過絕對路徑定位 絕對路徑的開頭是一個斜線(/),從網頁的根節點html開始,逐層去查詢需要的定位元素。 此方案缺點顯而易見,當頁面元素位置發生改變時,都需要修改,因此,並不推薦使用 舉例:百度搜索框絕對路徑定位 #絕對路徑 '/' 遇到同層級多個元素用下標表示,下標從1開始 自頂向下寫 # driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div[1]/div[1]/form/span/input').send_keys('部落格園') 備註: 當同一層有多個相同的元素時,使用下標區分,下標從1開始 2、通過相對路徑定位 相對路徑的開頭是兩個斜線(//),表示檔案中所有符合模式的元素都會被選出來,即使是處於樹中不同的層級也會被選出來 舉例:百度搜索框相對路徑定位 #相對路徑 '//' 經驗 自低向上嘗試 # driver.find_element_by_xpath('//span[1]/input').send_keys('部落格園') # driver.find_element_by_xpath('//form/span[1]/input').send_keys('部落格園') 備註:
以上都可以定位到百度搜索框,相對路徑的長度和開始位置並不受限制,可以採用從後往前逐層定位直到定位到即可的方式去定位 3、通過元素索引定位 遇到同層級相同標籤元素時,可以使用索引(下標)表示,索引的初始值為1 舉例:定位百度hao123連結 #通過元素索引定位,遇到同層級相同標籤元素時,可以使用索引(小標)表示,索引初始值為1 # driver.find_element_by_xpath('//div[1]/div[1]/div[5]/div[1]/div[1]/form/span/input').send_keys('部落格園') 4、使用元素屬性定位 元素屬性定位要求屬效能夠定位到唯一一個元素,如果存在多個相同條件的標籤,預設定位第一個,具體格式 //標籤名[@屬性=“屬性值”] 支援使用and 和 or關鍵字,多個屬性一起定位元素 舉例: #屬性定位 //標籤名[@屬性=“屬性值”] # driver.find_element_by_xpath('//input[@id="kw"]').send_keys('部落格園') # driver.find_element_by_xpath('//input[@maxlength="255"]').send_keys('部落格園') #多屬性定位 and or # driver.find_element_by_xpath('//input[@id="kw" and @maxlength="255"]').send_keys('部落格園') # driver.find_element_by_xpath('//input[@is="kw" or @maxlength="255"]').send_keys('部落格園') 備註:
Xpath支援萬用字元*號,通過屬性定位還可以如下寫法: #支援萬用字元 * # driver.find_element_by_xpath('//*[@*="kw"]').send_keys('部落格園') 5、使用部分屬性值匹配(也成為模糊方法定位) 屬性值如果太長或網頁中的元素屬性動態變化,可以使用此方法 元素屬性值開頭包含內容:starts-with() #模糊定位、稱為部分屬性值定位 #starts-with() 字串以特定值開頭 下方a表示標籤名 # driver.find_element_by_xpath('//a[starts-with(@href,"http://news")]').click #報錯原因ends-with() 是xpath語言2.0版本的函式 而當前xpath是xpath1.0版本的語言 #//a[ends-with(@href,"news.baidu.com")]' is not a valid XPath expression. # driver.find_element_by_xpath('//a[ends-with(@href,"news.baidu.com")]').click() 元素屬性值結尾包含內容:substring() #substring() 元素屬性值結尾包含內容 http://news.baidu.com # driver.find_element_by_xpath('//a[substring(@href,8)="news.baidu.com"]').click() 元素屬性值結尾包含內容:contains() #contains() 包含 # driver.find_element_by_xpath('//a[contains(@href,"news.baidu")]').click() #應用 1、元素資訊過長 2、動態屬性元素 訂單 取第一個訂單點選 order_001 order_002 order_003 備註:
Xpath1.0沒有ends-with函式,2.0有,現在瀏覽器實現的都是1.0 6、使用元素文字定位 元素文字在xpath中可以通過text()函式獲取,也可以用其來進行元素定位。 #元素文字定位 #text() # driver.find_element_by_xpath('//a[text()="新聞"]').click() #元素模糊定位 # driver.find_element_by_xpath('//a[contains(text(),"新")]').click()