【问题标题】:Xpath find node with children or grandchildren that contains attribute and text valueXpath 查找具有包含属性和文本值的子或孙的节点
【发布时间】:2017-12-10 22:49:53
【问题描述】:

我正在尝试解析具有以下结构的网站:

<div class='MarketGroup'>
  <div class='MarketGroup_GroupName'>
     <div class='MarketGroup_Name'>Partido</div>

如果您单击第一个 div 项,则会出现一个下拉菜单,所以我想找到该 div 项,它有一个子项或(在本例中)具有属性“MarketGroup Name”和文本值“Partido”的孙子项.

我的python代码如下:

find_element_by_xpath('//div[.//*[@class="MarketGroup_Name and contains(.,"Partido")]]')

但我收到一个错误,因为显然我的语法不是有效的 xpath 表达式。 那么,什么是有效的 xpath 表达式呢?

【问题讨论】:

    标签: python xpath


    【解决方案1】:

    返回任何MarketGroup,其后代MarketGroup_Name 带有文本“Partido”

    //div[@class="MarketGroup" and descendant::div[@class="MarketGroup_Name" and contains(text(),"Partido")]]

    【讨论】:

      【解决方案2】:

      XPath 中的语法错误,

      //div[.//*[@class="MarketGroup_Name and contains(.,"Partido")]]
                                         ^
      

      是由于缺少关闭"

      除此之外,您的 XPath 似乎指定了您想要的内容,但您可以稍微清理一下:

      //div[.//div[@class="MarketGroup_Name" and .="Partido"]]
      

      【讨论】:

        【解决方案3】:

        您的 xpath 缺少一个“,正如其他答案所提到的那样。但是固定的可以找到两个元素:&lt;div class='MarketGroup'&gt;&lt;div class='MarketGroup_GroupName'&gt;,这可能不是您想要的。我猜您可能想要哪个类是 MarketGroup,所以结果 xpath 是:

        //div[@class="MarketGroup"][.//div[@class="MarketGroup_Name" and text()="Partido"]]
        

        如果使用上面的 xpath 找不到元素,可能是由于 xmlns。使用这个:

        //*[local-name()="div" and @class="MarketGroup"][.//*[local-name()="div" and @class="MarketGroup_Name" and text()="Partido"]]
        

        【讨论】:

          最近更新 更多