Selenium 詳解xpath定位


xpath定位在業界被戲稱為元素定位的"屠龍寶刀",寶刀在手,武林我有。現在我們就來詳解xpath定位方法。

一、xpath通過元素屬性定位


xpath可以通過元素的屬性來定位,如id,name,class,type等屬性,元素的任意屬性值都可以通過xpath來定位,只要這個屬性值能唯一的標識一個元素

我們還以百度首頁的搜索框為例,用xpath通過不同屬性來定位它。

代碼:

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動文件路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打開百度首頁
driver.get(r'https://www.baidu.com/')

# 用xpath通過id屬性來定位搜索框
# driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium')

# 用xpath通過name屬性來定位搜索框
# #driver.find_element_by_xpath("//*[@name='wd']").send_keys('selenium')

# 用xpath通過class屬性來定位搜索框
# driver.find_element_by_xpath("//*[@class='s_ipt']").send_keys('selenium')

# 用xpath通過maxlength屬性來定位搜索框
# driver.find_element_by_xpath("//*[@maxlength='255']").send_keys('selenium')

# 用xpath通過autocomplete屬性來定位搜索框
driver.find_element_by_xpath("//*[@autocomplete='off']").send_keys('selenium')

# 等待5秒
sleep(5)
# 退出
driver.quit()

二、xpath通過限定元素標簽定位


 

  • * 表示從當前頁面所有的標簽(tag)中來尋找元素
  • 有時候一個元素的屬性值與其他元素是相同的,我們可以通過限定標簽(tag)來定位

代碼:

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動文件路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打開百度首頁
driver.get(r'https://www.baidu.com/')
# 用xpath限定標簽名為input並通過id屬性來定位搜索框
driver.find_element_by_xpath("//input[@id='kw']").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

三、層級與屬性結合定位


 

如果一個元素本身沒有可利用的屬性來定位,那么我們可以先找到它的上一級(父元素),再通過上一級來找到它。以此類推,如果它的上一級也沒有可以定位的屬性值,那么再找上上一級,直到找到可以定位到的那一級元素

代碼:

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動文件路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打開百度首頁
driver.get(r'https://www.baidu.com/')
# 用xpath通過上上一級來定位搜索框
driver.find_element_by_xpath("//*[@id='form']/span/input").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

四、標簽索引定位


 

有時候,同一層級下有多個相同標簽的元素,那么我們就只能通過標簽索引來精確定位到元素了

比如我們要定位百度首頁“百度一下”按鈕,它的父級元素是標簽<form>下的第二個<span>。這里要注意一下,這里的索引(從1開始)與python序列中的索引(從0開始)不同

代碼:

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動文件路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打開百度首頁
driver.get(r'https://www.baidu.com/')
driver.find_element_by_id('kw').send_keys('selenium')
# 用xpath通過標簽索引定位"百度一下"按鈕
driver.find_element_by_xpath("//*[@id='form']/span[2]/input").click()
# 等待5秒
sleep(5)
# 退出
driver.quit()

五、邏輯運算


 

如果一個屬性不能唯一地區分一個元素,需要兩個或者兩個以上的屬性才能定位到元素,那么我們可以用邏輯運算符來連接兩個或多個屬性來定位元素,支持與(and),或(or),非(not)

代碼:

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動文件路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打開百度首頁
driver.get(r'https://www.baidu.com/')
# 用xpath通過通過邏輯運算and來定位搜索框
driver.find_element_by_xpath("//*[@id='kw' and @name='wd']").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

 


免責聲明!

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



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