xpath:元素中的元素

时间:2017-12-14 16:36:35

标签: python xml selenium xpath

我需要ListArticles h2 by changing中所有results = driver.find_element_by_xpath("//*[@id='ListArticles']/h2/a") 元素的列表,包含python和selenium。

我尝试了类似

的内容
//*[@id='ListArticles']

但它不起作用。 on this webpage显示表达式的第一部分,即h2到达我需要的子部分,但是它不会获得ListArticlesa的列表因此,它也无法访问h2中的groupingBy个链接。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

它应该是:

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

您的xpath仅使用h2获得标记的直接子标记id=ListArticles,您使用/,同时使用//获取每个后代。

答案 1 :(得分:2)

而不是这个XPath,

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

使用此XPath,

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

考虑div个元素的额外h2个父级。

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

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

在目标a下方获取所有后代div元素,无论其他元素如何。

答案 2 :(得分:-1)

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

在这种情况下,CSS选择器将是#ListArticles h2 > a#表示ID。在XPath中,空格相当于//,它表示任何后代。 >相当于XPath中的/,它只表示子/直系后代。

以下是一些CSS选择器引用,可帮助您了解CSS选择器。

CSS Selectors spec

Selenium Tips: CSS Selectors

Taming Advanced CSS Selectors