【问题标题】:How to get first layer sub elements only in python selenium如何仅在 python selenium 中获取第一层子元素
【发布时间】:2018-06-16 07:05:07
【问题描述】:

如何获取 selenium python 中仅包含第一层子元素的列表?

我想要类似于此处描述的内容:Selenium Python get all children elements

但是,我只想要第一层的子元素。我附上一张图片来解释一下。

sub list problem

如果我按照其他条目中的说明进行操作,我将获得所有 sub 和 sub sub....... 元素。我只想要图像中显示的 4 个 div 元素而不是 8 个子子元素的第一层。

【问题讨论】:

  • find_elements_by_xpath("/*")
  • 我不知道 find_element_by_xpath 如何处理空的 xpath 字符串,但我写的是:/* - 斜杠表示根,星号表示该级别上的任何元素。
  • 你在哪里尝试编码?从您标记的屏幕截图中,您不想要第一层......您想要第二层。 alecxe 的回答向您展示了如何做到这一点。您可能应该花一些时间阅读 CSS 选择器和/或 XPath。这是一个非常基本的问题。

标签: python selenium selenium-webdriver


【解决方案1】:

是的,您需要指定一个直接父子关系,这可以在 XPath 中通过单个 / 和在 CSS 选择器中通过 > 完成:

driver.find_elements_by_xpath("//section[@id = 'irq']/div/div[@eid]")
driver.find_elements_by_css_selector("section#irq > div > div[eid]")

请重新检查irqeid,如果我从屏幕截图中得到它们(有点模糊)。

【讨论】:

    【解决方案2】:

    这看起来像你要找的东西:

    >>> elements = driver.find_elements_by_xpath('//div[@id="first"]/div')
    >>> [i.get_attribute('id') for i in elements]
    ['second-1', 'second-2', 'second-3']
    

    示例 html:

    <html>
      <body>
        <div id="first">
          <div id="second-1"></div>
          <div id="second-2">
            <div id="third-1"></div>
          </div>
          <div id="second-3"></div>
        </div>
      </body>
    </html>
    

    【讨论】:

      【解决方案3】:

      它是: elem.find_elements_by_xpath("./*")

      当您输入".//*" 时,它会在树中获得所有可能的孩子,但用一个斜线"./*" 只会获得下一级的孩子。

      【讨论】:

        猜你喜欢
        • 2017-08-22
        • 2022-06-14
        • 2022-01-11
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        相关资源
        最近更新 更多