XPath 类是且文本包含

Pow*_*fee 3 python xpath

我在 XPATH 上慢慢地变得越来越好,但每次我认为我拥有它(至少在基本水平上)时,我认为显而易见的东西就会决定扔给我。

尝试单击列表项:

<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>
Run Code Online (Sandbox Code Playgroud)

有了这个:

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

我正在仔细检查所有内容是否已实际加载等...并且(根据我对 XPATH 的理解)这应该找到列表项。

任何人都可以阐明我所缺少的东西吗?

ale*_*cxe 6

我很确定你可以责怪文本内的​​额外空格。要么标准化:

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

或者,使用contains()

//li[contains(@class, 'league_check ') and contains(., '%s')]" % eachleague
Run Code Online (Sandbox Code Playgroud)

而且,由于您正在使用containsclass属性,因此您可以删除league_check.


或者,您可以依赖“联盟 ID”,例如:

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)
Run Code Online (Sandbox Code Playgroud)