xpath定位在業界被戲稱爲元素定位的"屠龍寶刀",寶刀在手,武林我有。如今咱們就來詳解xpath定位方法。python
xpath能夠經過元素的屬性來定位,如id,name,class,type等屬性,元素的任意屬性值均可以經過xpath來定位,只要這個屬性值能惟一的標識一個元素web
咱們還以百度首頁的搜索框爲例,用xpath經過不一樣屬性來定位它。chrome
代碼:瀏覽器
# 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()
代碼:ui
# 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()
若是一個元素自己沒有可利用的屬性來定位,那麼咱們能夠先找到它的上一級(父元素),再經過上一級來找到它。以此類推,若是它的上一級也沒有能夠定位的屬性值,那麼再找上上一級,直到找到能夠定位到的那一級元素spa
代碼:code
# 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()
有時候,同一層級下有多個相同標籤的元素,那麼咱們就只能經過標籤索引來精肯定位到元素了orm
好比咱們要定位百度首頁「百度一下」按鈕,它的父級元素是標籤<form>下的第二個<span>。這裏要注意一下,這裏的索引(從1開始)與python序列中的索引(從0開始)不一樣blog
代碼:索引
# 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()