我正在Selenium
使用Python 2.7.10
。
使用XPath
,我希望找到a href
中的链接,跟随兄弟minimal-list__title
(即我在minimal-list__value
下寻找孩子)。我应该使用哪个XPath?
<span class="minimal-list__title">ETF Home Page:</span>
<span class="minimal-list__value">
<a href="http://www.robostoxetfs.com/">ROBO</a>
这是目前的尝试:
from selenium import webdriver as driver
from selenium.common.exceptions import NoSuchElementException
def get_link(driver, key):
key = key + ":"
try:
find_value = driver.find_element_by_xpath("//span[@class='minimal-list__title' and . = '%s']/following-sibling::span/*[1]::a" % key).text
except NoSuchElementException:
return None
else:
value = re.search(r"(.+)", find_value).group().encode("utf-8")
return value
website = get_link(driver, "ETF Home Page")
print "Website: %s" % website
请注意,我特别感兴趣的是一个XPath,它从以下兄弟的子节点获取链接。这是因为上面的函数在Web代码中使用"ETF Home Page:"
作为搜索内容的标识符。
答案 0 :(得分:1)
你几乎是对的:
//span[@class = "minimal-list__title" and . = "ETF Home Page:"]/following-sibling::span/a
请注意,您不必担心与定位器匹配的多个元素,因为您使用的是find_element_by_xpath()
,它会为您提供第一个匹配元素。
但是,如果它在你的情况下是有意义的,你事先知道“ROBO”标签:
driver.find_element_by_link_text("ROBO")
要获取属性值,请使用get_attribute()
:
find_value = driver.find_element_by_xpath('//span[@class = "minimal-list__title" and . = "ETF Home Page:"]/following-sibling::span/a').get_attribute("href")
答案 1 :(得分:0)
String e = driver.findElement(By.xpath("//*[contains(@class,"minimal-list__value")]/a)).getAttribute("href");
//*[contains(@class,"minimal-list__value")]/a
是xpath
,getAttribute
会为您提供所需的结果。
答案 2 :(得分:0)
基于文本ETF Home Page:
从以下同级的子节点中提取链接http://www.robostoxetfs.com/
,您可以使用以下基于xpath的Locator Strategies中的任何一个:>
使用 xpath 和following-sibling
:
print(driver.find_element_by_xpath("//span[text()='ETF Home Page:']//following-sibling::span/a").get_attribute("href"))
使用 xpath 和following
:
print(driver.find_element_by_xpath("//span[text()='ETF Home Page:']//following::span/a").get_attribute("href"))