我正在尝试在“主要列表”下找到此站点的XPATH XPath。我到目前为止:
//div[starts-with(@class, ('sm-CouponLink_Label'))]
然而,这找到了32场比赛......
`//div[starts-with(@class, ('sm-CouponLink_Label'))]`[contains(text(),'*')or[contains(Style(),'*')]
不幸的是,在这种情况下,我想要使用XPath而不是CSS。
这是site,我的code就在这里,这是我所追求的XP image。
我也尝试过:
CSS:div:nth-child(1) > .sm-MarketContainer_NumColumns3 > div > div
Xpath equiv ...://div[1]//div[starts-with(@class, ('sm-MarketContainer_NumColumns3'))]//div//div
虽然它似乎不起作用。
已更新
工作CSS:div.sm-Market:has(div >div:contains('Main Lists')) * > .sm-CouponLink_Label
Xpath://div[Contains(@class, ('sm-Market'))]//preceding::('Main Lists')//div[Contains(@class, ('sm-CouponLink_Label'))]
尚未正常工作..
虽然我不确定Selenium是否具有以下内容:has
...替代地
类似的东西:
//div[contains(text(),"Main Lists")]//following::div[contains(@class,"sm-Market")]//div[contains(@class,"sm-CouponLink_Label")]//preceding::div[contains(@class,"sm-Market_HeaderOpen ")]
(错误的区域)
答案 0 :(得分:2)
您可以使用以下代码获取所有必需元素:
league_names = [league for league in driver.find_elements_by_xpath('//div[normalize-space(@class)="sm-Market" and .//div="Main Lists"]//div[normalize-space(@class)="sm-CouponLink_Label"]') if league.text]
这应该只返回非空节点列表
答案 1 :(得分:1)
如果我理解正确,您希望进一步缩小第一个XPath的结果,只返回具有内部文本或具有属性div
的{{1}}。在这种情况下,您可以使用以下XPath:
style
<强>更新强>
当您进一步澄清时,您希望获得//div[starts-with(@class, ('sm-CouponLink_Label'))][@style or text()]
课程&#39; sm-CouponLink_Label&#39;位于“主要列表”中的#39;部分。为此,您应该尝试合并主要列表&#39;以某种方式在XPath中。这是一种可能的方式(为便于阅读而格式化):
div
注意//div[
div/div/text()='Main Lists'
]//div[
starts-with(@class, 'sm-CouponLink_Label')
and
normalize-space()
]
如何用于从结果中过滤掉空normalize-space()
。这应该按预期返回5个元素,这是我在Chrome中测试时的结果: