【问题标题】:selenium: locating an element within a WebDriver elementselenium:在 WebDriver 元素中定位元素
【发布时间】:2013-11-08 16:32:19
【问题描述】:

事实上,我可以使用这个 XPath 找到我想要的确切元素:

//table[@class="summary-table"]/tbody/tr/*/*/*/a[contains(@class, "snippet-title")]

我知道这一点是因为我有一个突出显示的 XPath 插件 检测到的元素。

我想把这个元素遍历分成两部分。首先 部分返回tr 单元的列表,第二部分在 每个感兴趣的a 中的每个tr 单元格。

返回tr 单元格的第一部分已编写并正在运行:

  @property
  def product_elements(self):
    xpath = '//table[@class="summary-table"]/tbody/tr'
    elems = self.driver.find_elements_by_xpath(xpath)
    return elems

但是,我在代码中尝试了各种 XPath 和 css 选择器 下面:

  @property
  def product_names(self):
    xpath = '//a[contains(@class, "lc-snippet-title")]'
    for product_elem in self.product_elements:
      elem = product_elem.find_element_by_css_selector('.lc-snippet-title')
      logging.debug("Found this element {0}".format(
          self.pretty_printer.pformat(elem)))
      yield elem.text

tr 中找不到我想要的a WebDriver 元素。

因为tr中有多个a标签,我必须找到 一个我想要的类属性。

【问题讨论】:

    标签: python selenium-webdriver


    【解决方案1】:

    我不太了解 CSS 选择器,但如果您有一个带有 xpath //table[@class="summary-table"]/tbody/tr 的 WebElement 并且它有一个子 //a[contains(@class, "lc-snippet-title")],那么下一个代码对我来说就可以了:

    element = driver.find_element_by_xpath("//table[@class="summary-table"]/tbody/tr")
    child = element.find_element_by_xpath(".//a[contains(@class, "lc-snippet-title")]")
    

    整个点在子元素的 XPath 定位器开头的. 中,它表示它实际上是一个子元素。试试这个

    【讨论】:

      【解决方案2】:

      给定信息: XPath://table[@class="summary-table"]/tbody/tr///*/a[contains(@class, "sn-p-title")]

      第 1 步:

      让我们将上面的 XPath 转换为 CSS 选择器以提高性能。

      XPath://table[@class="summary-table"]/tbody/tr CSS:css=table.summary-table a.sn-p-title > tbody > tr

      第 2 步: 然后我们可以通过下面给出的方法找到 CSS Count

      @属性

      def product_elements(self):

      css = 'css=table.summary-table > tbody > tr'

      elems = self.driver.find_elements_by_by_css_selector(css)

      返回元素

      @属性

      def product_names(self):

      for product_elem in self.product_elements:
        elem = product_elem.find_element_by_css_selector('.lc-snippet-title')
        logging.debug("Found this element {0}".format(
            self.pretty_printer.pformat(elem)))
        yield elem.text
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 2016-12-10
        • 2018-09-30
        • 1970-01-01
        • 2014-08-11
        • 2021-04-11
        • 1970-01-01
        相关资源
        最近更新 更多