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

切换至Players标签后Selenium无法提取下拉选项文本求助

解决Selenium切换Players标签后获取赛季下拉为空的问题

我明白你遇到的困惑了——切换到Players标签后,明明页面显示了赛季下拉,Selenium却输出空字符串,这大概率是因为你定位到了隐藏的旧元素,而不是Players标签下的新下拉菜单。

问题根源

当你切换标签时,页面并没有完全刷新,Teams标签下的selTeamSeason下拉元素其实还留在DOM里(只是被CSS隐藏了)。你用原来的XPath //*[@id="selTeamSeason"] 查找时,Selenium会优先找到这个隐藏的旧元素,而它的选项内容已经被清空或者和Players标签的下拉无关,所以输出空文本。

解决方案

我们需要做两件事:

  1. 用更精确的定位,限定只查找Players标签内容区域内的下拉菜单
  2. 用Selenium的显式等待替代time.sleep(),确保元素真正加载完成

修改后的代码

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

driver = webdriver.Chrome(executable_path=r'D:\ChromeDriver\chromedriver.exe')
driver.get('http://www.afl.com.au/stats')

# 等待Players标签可点击并点击
players_tab = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//*[@id="stats_tab"]/ul/li[2]'))
)
players_tab.click()

# 等待Players标签下的赛季下拉加载完成
dropdown_element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//div[@id="players-stats"]//select[@id="selTeamSeason"]'))
)

# 转为Select对象并遍历选项
select_menu = Select(dropdown_element)
for option in select_menu.options:
    print(option.text)

driver.quit()

关键改动说明

  • 精确定位:用//div[@id="players-stats"]//select[@id="selTeamSeason"] 替代原来的XPath,这个路径限定了只在Players标签对应的容器(players-stats)下查找下拉菜单,避免定位到隐藏的旧元素。
  • 显式等待:WebDriverWait会等待元素满足条件(比如可点击、已加载)后再执行操作,比固定的time.sleep()更可靠,能适应不同的页面加载速度。

这样修改后,你应该就能正常获取2001到2018的赛季列表了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:18:08