使用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
相关产品推荐
相关产品推荐

