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

Python Selenium按钮点击失效:为何无法选中NBA球队按钮?

问题:无法通过动态球队名称点击NBA赛事按钮

我编写了两个函数,分别用于点击指定网页中的芝加哥公牛队或迈阿密热火队按钮,但当前代码无法实现点击操作。需要通过team变量适配动态变化的球队名称,相关代码如下:

主代码

driver = startup_login('https://prolineplus.olg.ca/en-ca/event/?e177405-Basketball-NBA-USA-Miami-Heat-Chicago-Bulls')

team = "Chicago"
proline_go_to_match2(driver,team)

函数代码

def proline_go_to_match2(driver, team):
    #print(team)
    try:
        
        match = WebDriverWait(driver, 15).until(
            EC.presence_of_element_located((By.XPATH, "//ul[@class='fdjgs-markets']/li[@class='fdjgs-market']//ul[@class='fdjgs-outcomes']//descendant::li[1]//span[@class='fdjgs-outcome-wrapper' and contains(@aria-label, '"+ team +"')]/span[starts-with(., '"+ team +"')]"))        )
        match.click()
    except:
        driver.quit()


def proline_go_to_match3(driver, team):
    #print(team)
    try:
        
        match = WebDriverWait(driver, 15).until(
            EC.presence_of_element_located((By.XPATH, "//ul[@class='fdjgs-markets']/li[@class='fdjgs-market']//ul[@class='fdjgs-outcomes']//descendant::li[2]//span[@class='fdjgs-outcome-wrapper' and contains(@aria-label, '"+ team +"')]/span[starts-with(., '"+ team +"')]"))        )
        match.click()
    except:
        driver.quit()

问题分析与修复方案

  1. 硬编码列表索引问题:原代码硬编码了li[1]和li[2],但球队在列表中的位置可能动态变化,直接绑定索引会导致定位失败。
  2. 等待条件不合适:EC.presence_of_element_located仅确保元素存在,但元素可能还未处于可点击状态,应改用EC.element_to_be_clickable等待元素可交互。
  3. XPath拼接风险:直接拼接字符串容易出现语法错误,建议用f-string格式化XPath,提升可读性和稳定性。
  4. 异常处理过于粗暴:直接执行driver.quit()会导致浏览器强制关闭,不利于排查问题,应捕获具体异常并输出错误信息。

修改后的代码

将两个函数合并为一个,通过team参数直接定位目标球队,无需依赖固定列表索引:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

def proline_go_to_match(driver, team):
    try:
        # 定位包含目标球队名称的可点击元素
        match = WebDriverWait(driver, 15).until(
            EC.element_to_be_clickable(
                (By.XPATH, f"//span[@class='fdjgs-outcome-wrapper' and contains(@aria-label, '{team}')]/span[starts-with(., '{team}')]")
            )
        )
        match.click()
    except Exception as e:
        print(f"点击球队{team}失败: {str(e)}")
        # 可根据需求选择是否关闭浏览器,此处暂不直接退出
        # driver.quit()

使用方式

driver = startup_login('https://prolineplus.olg.ca/en-ca/event/?e177405-Basketball-NBA-USA-Miami-Heat-Chicago-Bulls')

# 点击芝加哥公牛队
team = "Chicago"
proline_go_to_match(driver, team)

# 点击迈阿密热火队
team = "Miami"
proline_go_to_match(driver, team)

内容的提问来源于stack exchange,提问作者jwalman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:26:16