如何根据子元素的赛事时长(含63)和比分(0:0)获取其父元素?
匹配符合特定条件的赛事父元素DOM节点
提供的DOM结构
<div class="all-ebents"> <div class="sport-base-event"> <span class="event-block-current-time__time--VEuoj">63:07</span> <span class="event-block-score">0:0</span> </div> <div class="sport-base-event"> <span class="event-block-current-time__time--VEuoj">64:07</span> <span class="event-block-score">0:1</span> </div> <div class="sport-base-event"> <span class="event-block-current-time__time--VEuoj">63:07</span> <span class="event-block-score">0:1</span> </div> </div>
现有查询代码
//*[contains(@class, "event-block-current-time--")]::text() # 获取时长文本 //*[contains(@class, "event-block-current-time--")]/following-sibling::div::text() # 获取比分文本
问题
如何跳过上述分步查询,直接获取满足「子元素赛事时长包含63且相邻子元素比分是0:0」的父元素?
解决方案
方法1:基于子元素存在性筛选
使用以下XPath直接定位目标父节点:
//div[@class="sport-base-event"] [span[contains(@class, "event-block-current-time--") and contains(text(), "63")]] [span[@class="event-block-score" and text()="0:0"]]
解释:
//div[@class="sport-base-event"]:先锁定所有赛事父节点- 第一个条件
[span[...]]:筛选出包含指定时长元素且文本含"63"的节点 - 第二个条件
[span[...]]:进一步筛选出包含"0:0"比分的节点
方法2:强调相邻子元素关系
如果需要严格确保时长元素的下一个兄弟就是目标比分元素,可使用:
//div[@class="sport-base-event"] [span[contains(@class, "event-block-current-time--") and contains(text(), "63")] /following-sibling::span[1][@class="event-block-score" and text()="0:0"]]
解释:
/following-sibling::span[1]:指定只匹配时长元素的紧邻下一个span兄弟元素,避免父节点中存在其他无关span的干扰
内容的提问来源于stack exchange,提问作者Ethical Hacking
相关产品推荐
相关产品推荐

