Xpath查找包含属性和文本值的子节点或孙子节点

时间:2017-12-10 22:49:54

标签: python xpath

我正在尝试使用以下结构解析网站:

<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表达式是什么?

3 个答案:

答案 0 :(得分:0)

返回具有文字“Partido”的后代MarketGroup的所有MarketGroup_Name

  

// div [@ class =“MarketGroup”和descendant :: div [@ class =“MarketGroup_Name”并包含(text(),“Partido”)]]

答案 1 :(得分:0)

XPath中的语法错误

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

是由于缺少关闭"

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

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

答案 2 :(得分:-1)

你的xpath缺少一个“,正如其他答案所提到的那样。但是固定的xpath可以找到两个元素:<div class='MarketGroup'><div class='MarketGroup_GroupName'>,这可能不是你想要的。我猜你可能想要类是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"]]