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

使用Selenium实现高尔夫赛事页面所有选手轮次统一选择的技术求助

解决所有选手轮次选择一致的问题

嘿,我明白你的问题啦——你已经成功实现了打开所有选手的记分卡,但目前只能修改第一个选手的轮次选择,想要让所有选手的轮次保持统一对吧?别担心,咱们一步步来调整代码解决这个问题~

问题分析

你的现有代码只是循环点击打开了每个选手的记分卡,但没有在打开记分卡后对轮次选择框进行操作;另外,打开记分卡后元素需要一点加载时间,直接查找元素容易出现找不到的错误,所以得加上等待逻辑。

修改后的代码

下面是调整后的完整代码,我会在关键部分加注释说明:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

PATH = "C:\\Program Files (x86)\\Chrome\\chromedriver_win32\\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.espn.com/golf/leaderboard?tournamentId=401353233")
xpath_number = 1
# 定义要选择的目标轮次,比如这里选"Round 2",你可以根据实际需求修改
target_round = "Round 2"

while True:
    try:
        # 找到当前选手的触发元素并点击打开记分卡
        element = driver.find_element(By.XPATH, f'//*[@id="fittPageContainer"]/div[3]/div/div/section[3]/div/div/div/div[2]/div[3]/div/div/div/div[2]/table/tbody/tr[{xpath_number}]/td[1]')
        xpath_number += 1
        action = ActionChains(driver)
        action.click(element)
        action.perform()

        # 等待轮次选择下拉框加载完成(最多等10秒)
        wait = WebDriverWait(driver, 10)
        round_select_element = wait.until(EC.presence_of_element_located((By.XPATH, '//select[@data-id="round"]')))
        
        # 实例化Select对象,操作下拉框
        round_select = Select(round_select_element)
        # 选择目标轮次,这里用可见文本,你也可以用select_by_value("2")这种方式(需要对应option的value值)
        round_select.select_by_visible_text(target_round)

        # 可选:关闭当前打开的记分卡,方便处理下一个选手(如果页面有关闭按钮的话,根据实际元素调整xpath)
        close_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[contains(@class, "close")]')))
        close_button.click()

    except NoSuchElementException:
        # 没有更多选手时退出循环
        break

# 最后关闭浏览器
driver.quit()

关键说明

  • 等待逻辑:用WebDriverWait配合expected_conditions确保轮次选择框加载完成后再操作,避免因元素未加载导致的报错。
  • Select操作:Selenium的Select类专门用于处理下拉框,你可以根据实际需求选择不同的选择方式:
    • select_by_visible_text("文本内容"):通过下拉框显示的文本选择
    • select_by_value("值"):通过option标签的value属性值选择
    • select_by_index(索引):通过选项的索引(从0开始)选择
  • 关闭记分卡:如果不关闭当前记分卡,可能会影响下一个选手的点击操作,所以加上关闭步骤,你需要根据页面实际的关闭按钮元素调整xpath。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:24:11