【问题标题】:Selenium: Find adjacent elementsSelenium:查找相邻元素
【发布时间】:2015-10-20 07:39:38
【问题描述】:

首先,我希望这个问题的范围不要太笼统——如果是这样,我深表歉意。

我正在为Python 2.7 使用Selenium 构建一个网络爬虫。以前,我使用“静态”XPaths 将其指向某些元素。我想实现一个可以根据上下文(相对于其他元素)查找元素的解决方案。

假设我们希望从该页面上“Issuer:”标签后面的兄弟元素中获取文本:http://etfdb.com/etf/ROBO/。在这种情况下,相邻的文本是“Exchange Traded Concepts”。

根据我收集到的信息,可以使用多种技术,包括相对 XPathCSSDOM(?)。

什么是最好的方法来解决这个问题?如果可能,请用代码演示。


当前的“静态”XPath,其中为 Firefox 标识了带有 FirePath 的 XPath:

try:
    xpath_issuer = ".//*[@id='overview']/div/div[2]/div/div[1]/ul[1]/li[1]/span[2]/a"
    find_issuer = driver.find_element_by_xpath(xpath_issuer)
    issuer = re.search(r"(.+)", find_issuer.text).group().encode("utf-8")
    print "Issuer: %s" % issuer
    break
except NoSuchElementException:
    pass

【问题讨论】:

  • 为什么你使用更复杂的xpath选择器而不是简单的driver.find_element_by_id('overview')

标签: python css selenium xpath selenium-webdriver


【解决方案1】:

你可以使用下面的xpath

//span[@class='minimal-list__title'][text()='Issuer:']//following-sibling::span[@class='minimal-list__value']

【讨论】:

    【解决方案2】:

    我会做一个可重用的函数来按键获取值:

    • “发行人”的“交易所交易概念”
    • “结构”等的“ETF”

    示例工作实现:

    from selenium.common.exceptions import NoSuchElementException
    
    def get_value(driver, key):
        key = key + ":"
        try:
            return driver.find_element_by_xpath("//span[@class='minimal-list__title' and . = '%s']/following-sibling::span" % key).text
        except NoSuchElementException:
            print "Not Found"
            return None
    

    用法:

    get_value(driver, "Issuer")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-05
      • 2016-06-10
      • 1970-01-01
      • 2012-09-10
      • 2015-11-26
      • 1970-01-01
      • 2023-04-10
      • 2020-10-16
      相关资源
      最近更新 更多