【问题标题】:xpath: element in elementxpath:元素中的元素
【发布时间】:2017-12-14 16:36:35
【问题描述】:

我需要使用 python 和 selenium 列出 ListArticles h2 on this webpage 中所有 a 元素的列表。

我尝试过类似的东西

results = driver.find_element_by_xpath("//*[@id='ListArticles']/h2/a")

但它不起作用。 xpath tester 表明表达式的第一部分,即 //*[@id='ListArticles'] 到达了我需要的小节,但是它没有在 ListArticles 中获得 h2 的列表,因此它也无法到达h2 中的 a 链接。

【问题讨论】:

    标签: python xml selenium xpath


    【解决方案1】:

    应该是:

    "id('ListArticles')//h2/a"
    

    您的xpath 仅获得h2 标记,这些标记是id=ListArticles 标记的直接子代,您为此使用/,而使用// 获取所有后代。

    【讨论】:

      【解决方案2】:

      而不是这个 XPath,

      //*[@id='ListArticles']/h2/a
      

      使用这个 XPath,

      //div[@id='ListArticles']/div/h2/a
      

      考虑到h2 元素的额外div 父元素。

      但请注意,a 元素下也有 h3 元素。要同时获取它们,并绕过任何介入的 div 元素,您可以只使用这个 XPath,

      //div[@id='ListArticles']//a
      

      获取目标div下方的所有后代a元素,无论中间元素如何。

      【讨论】:

        【解决方案3】:

        在这种情况下,您不需要使用 XPath。 IMO,您应该更喜欢 CSS 选择器,因为它们创建起来不那么复杂,因此更易于阅读和维护。它们还得到更好的跨浏览器支持,速度更快。

        本例中的 CSS 选择器将是 #ListArticles h2 > a# 表示一个 ID。空格相当于 XPath 中的//,表示任何后代。 > 等价于 XPath 中的 /,它只是一个子/直接后代。

        以下是一些 CSS 选择器参考资料,可帮助您了解 CSS 选择器。

        CSS Selectors spec

        Selenium Tips: CSS Selectors

        Taming Advanced CSS Selectors

        【讨论】:

          猜你喜欢
          • 2018-07-09
          • 1970-01-01
          • 2015-11-24
          • 1970-01-01
          • 1970-01-01
          • 2023-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多