2016-04-19 6 views
2

Ich wurde langsam besser bei XPATH aber jedes Mal, wenn ich denke, dass ich es (zumindest auf einer einfachen Ebene) etwas, das ich dachte, offensichtlich war, beschließt, mich zu werfen.XPath-Klasse ist und Text enthält

Der Versuch, ein Listenelement klicken:

<li class="league_check " id="lg_chk_br_1_l_22953" onclick="BranchWindow.showLeague(1,22953);"> <img leagueid="22953" src="/i/none_v.gif" width="12" height="12" onclick="BranchWindow.switchLeague(1,22953); cancelBubble(event);">Champions League </li> 

mit diesem:

eachleague = "Champions League" 
link = Driver.find_elements_by_xpath("//li[contains(@class, 'league_check ') and text() = '%s']" % eachleague) 

Ich doppelt überprüft alles hat usw. tatsächlich geladen ... Und (zu meinem Verständnis von XPath) diese sollte den Listenpunkt finden.

Kann jemand etwas Licht auf das, was ich vermisse, werfen?

Antwort

2

Ich bin mir ziemlich sicher, dass Sie die extra Raum innerhalb des Textes beschuldigen können. Entweder normalisieren:

//li[contains(@class, 'league_check ') and normalize-space(.) = '%s']" % eachleague 

Oder verwenden :

//li[contains(@class, 'league_check ') and contains(., '%s')]" % eachleague 

Und da Sie contains für das class Attribut verwenden, können Sie entfernen, dass der Raum nach dem league_check Hinter.


Alternativ Sie sich auf die „Liga-ID“ s verlassen kann, so etwas wie:

leagues = { 
    "Champions League": 22953, 
    # more leagues 
} 
league_id = leagues[eachleague] 
link = Driver.find_elements_by_xpath("//li[contains(@class, 'league_check') and img/@leagueid = '%d']" % league_id) 
+0

Offenbar gibt es eine Grenze, wie schnell ich eine Antwort akzeptieren. Ich denke, das ist ein Zeichen, dass ich wirklich nicht fragen musste. Aber das ist perfekt, ich wünschte ich hätte es entdeckt. Danke, dass du dir die Zeit genommen hast! – PoweredByCoffee

Verwandte Themen