XPath在兄弟之后找到孩子

时间:2015-08-05 14:50:36

标签: python selenium xpath selenium-webdriver

我正在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:"作为搜索内容的标识符。

3 个答案:

答案 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")]/axpathgetAttribute会为您提供所需的结果。

答案 2 :(得分:0)

基于文本ETF Home Page:从以下同级的子节点中提取链接http://www.robostoxetfs.com/,您可以使用以下基于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"))