Python+Selenium xpath 定位遇到相同元素時的解決方法父節點找子節點
阿新 • • 發佈:2018-12-31
1、#先定位到父節點,再從父節點找指定節點
例如: 注意不能直接用
driver.find_element_by_xpath('//*[@id="branch_inquiry"]').find_element_by_class_name('city-picker-span')
用法
# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoAlertPresentException import unittest, time, re driver = webdriver.Chrome() driver.get("http://intl.sit.sf-express.com:8980/") from selenium.webdriver import ActionChains import time driver.find_element_by_xpath('/html/body/div[3]/div[2]/a[5]').click() time.sleep(1) service_coverage = driver.find_element_by_xpath('//*[@id="range_inquiry"]').find_element_by_class_name('city-picker-span') print(service_coverage.text) service_coverage.click()
2、不是同一級的xpath 定位方法
driver.find_element_by_xpath("//input[@id='cityAddress1']/following-sibling::span").click()
3、由父節點定位子節點
4、由子節點定位父節點# 1.串聯尋找 print driver.find_element_by_id('B').find_element_by_tag_name('div').text # 2.xpath父子關係尋找 print driver.find_element_by_xpath("//div[@id='B']/div").text # 3.css selector父子關係尋找 print driver.find_element_by_css_selector('div#B>div').text # 4.css selector nth-child print driver.find_element_by_css_selector('div#B div:nth-child(1)').text # 5.css selector nth-of-type print driver.find_element_by_css_selector('div#B div:nth-of-type(1)').text # 6.xpath軸 child print driver.find_element_by_xpath("//div[@id='B']/child::div").text
# 1.xpath: `.`代表當前節點; '..'代表父節點
print driver.find_element_by_xpath("//div[@id='C']/../..").text
# 2.xpath軸 parent
print driver.find_element_by_xpath("//div[@id='C']/parent::*/parent::div").text
5、由弟弟節點定位哥哥節點
# 1.xpath,通過父節點獲取其哥哥節點
print driver.find_element_by_xpath("//div[@id='D']/../div[1]").text
# 2.xpath軸 preceding-sibling
print driver.find_element_by_xpath("//div[@id='D']/preceding-sibling::div[1]").text
6、由哥哥節點定位弟弟節點
# 1.xpath,通過父節點獲取其弟弟節點
print driver.find_element_by_xpath("//div[@id='D']/../div[3]").text
# 2.xpath軸 following-sibling
print driver.find_element_by_xpath("//div[@id='D']/following-sibling::div[1]").text
# 3.xpath軸 following
print driver.find_element_by_xpath("//div[@id='D']/following::*").text
# 4.css selector +
print driver.find_element_by_css_selector('div#D + div').text
# 5.css selector ~
print driver.find_element_by_css_selector('div#D ~ div').text
7、其他Xapth定位方法
第一種方法:通過絕對路徑做定位(相信大家不會使用這種方式)
By.xpath("html/body/div/form/input")
By.xpath("//input")
第三種方法:通過元素索引定位
By.xpath("//input[4]")
第四種方法:使用xpath屬性定位(結合第2、第3中方法可以使用)
By.xpath("//input[@id='kw1']")
By.xpath("//input[@type='name' and @name='kw1']")
第五種方法:使用部分屬性值匹配(最強大的方法)
By.xpath("//input[start-with(@id,'nice')
By.xpath("//input[ends-with(@id,'很漂亮')
By.xpath("//input[contains(@id,'那麼美')]")