2017-12-14 7 views
2

Ich brauche eine Liste aller a Elemente innerhalb ListArticlesh2on this webpage, mit Python und Selen.xpath: Element im Element

Ich habe etwas versucht, wie

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

, aber es funktioniert nicht. Die xpath tester zeigt, dass der erste Teil des Ausdrucks, nämlich //*[@id='ListArticles'] bekommt den Unterabschnitt ich brauche, aber dann nicht die Liste h2 innerhalb der ListArticles und damit auch nicht auf die a Links in h2 bekommen.

Jede Hilfe wird sehr geschätzt!

Antwort

3

es sein sollte:

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

Ihre xpath nur h2 Tags erhalten, die mit id=ListArticles direkten Kinder des Tags sind, können Sie / dafür verwenden, während // jeden Nachkommen erhalten verwenden.

2

Anstelle dieser XPath,

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

Verwendung dieses XPath,

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

für eine zusätzliche div Eltern zu den h2 Elemente zu berücksichtigen.

Beachten Sie jedoch, dass es auch a Elemente unter h3 Elemente gibt. Zu holen sie zu hoch, und alle dazwischen liegenden div Elemente zu umgehen, könnten Sie ihn nur XPath verwenden,

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

um alle Nachkommen a Elemente zu erhalten, und zwar unabhängig von dazwischen liegenden Elementen, darunter die gezielten div.

-1

In diesem Fall müssen Sie XPath nicht verwenden. IMO, sollten Sie CSS-Selektoren bevorzugen, weil sie weniger kompliziert zu erstellen und daher einfacher zu lesen und zu pflegen sind. Sie werden auch besser über Browser hinweg und schneller unterstützt.

Der CSS-Selektor wäre in diesem Fall #ListArticles h2 > a. A # zeigt eine ID an. Ein Leerzeichen entspricht in XPath //, es bedeutet jeden Nachkommen. A > entspricht / in XPath, es bedeutet nur ein Kind/direkter Nachkomme.

Hier finden Sie einige Referenzen zu CSS-Selektoren, die Sie über CSS-Selektoren informieren.

CSS Selectors spec

Selenium Tips: CSS Selectors

Taming Advanced CSS Selectors