You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XPath中使用多个变量定位元素并点击?

如何在XPath中使用多个变量定位元素并点击?

嘿,我来帮你搞定这个问题!你之前的XPath写法有两处关键错误,咱们一步步来修正:

问题出在哪?

你写的XPath里用了@span='"+ oddstype +"' and @span='"+ oddsnumber +"',这相当于在找同一个元素同时拥有两个span属性,且值分别是Barcelona和1.18——但实际页面里这两个值是属于两个不同的<span>标签,而且它们的属性是class不是span,这就导致定位完全不对啦。

正确的定位方式

根据你给出的页面结构,这两个<span>是同一个<div>的子元素,咱们可以通过父元素关联这两个条件,或者直接通过兄弟元素来定位。这里给你两种靠谱的写法:

写法1:通过父div同时匹配两个子span

先找到包含目标名称和赔率的父div,再点击它(因为通常这种投注项的点击区域是整个div):

oddsnumber = "1.18"
oddstype = "Barcelona"

# 等待元素可点击,定位到符合条件的父div
target_element = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable(
        (By.XPATH, f"//div[contains(@class, 'gl-Participant') and .//span[@class='gl-Participant_Name' and text()='{oddstype}'] and .//span[@class='gl-Participant_Odds' and text()='{oddsnumber}']]")
    )
)
target_element.click()

写法2:通过兄弟span关联定位

也可以先找到赔率的span,再通过它的兄弟名称span反向定位到父div:

oddsnumber = "1.18"
oddstype = "Barcelona"

target_element = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable(
        (By.XPATH, f"//span[@class='gl-Participant_Odds' and text()='{oddsnumber}']/preceding-sibling::span[@class='gl-Participant_Name' and text()='{oddstype}']/parent::div")
    )
)
target_element.click()

小提示

  • 用Python的f-string来拼接XPath字符串比加号更清晰,也不容易出错;
  • 确保text()的内容和页面上的完全一致(比如有没有空格、大小写问题),如果有动态空格,可以用contains(text(), '{oddstype}')替代精确匹配。

备注:内容来源于stack exchange,提问作者JakeM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:42:43