使用Selenium获取网站下拉列表值返回空值,如何解决?
问题原因
你用Select类操作的元素并不是原生的<select>标签,这个网站的下拉是PrimeFaces框架渲染的自定义组件,j_idt31_input只是输入框样式的触发元素,实际选项是隐藏的<li>元素。所以用Select类获取options的text会为空,但能统计数量是因为框架模拟了选项结构,文本却不在这些模拟的option节点里。
修正后的代码
需要先点击下拉框展开选项,再定位实际的选项元素获取文本,同时加上显式等待确保元素加载完成:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() url = "https://vahan.parivahan.gov.in/vahan4dashboard/vahan/view/reportview.xhtml" driver.get(url) try: # 点击下拉触发元素,展开选项列表 dropdown_trigger = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "j_idt31_input")) ) dropdown_trigger.click() # 等待选项列表加载,定位所有选项元素 options = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".ui-selectonemenu-items li")) ) # 提取选项文本,过滤空内容 option_names = [option.text.strip() for option in options if option.text.strip()] print(len(option_names)) print(option_names) finally: driver.quit()
关键说明
- 用
WebDriverWait做显式等待,避免页面未加载完成就操作元素 - 自定义下拉的选项通常在展开后才会渲染,所以必须先点击触发展开
- 通过CSS选择器
.ui-selectonemenu-items li定位实际的选项元素,这是PrimeFaces下拉组件的标准选项结构
内容的提问来源于stack exchange,提问作者Ankit Bhatt
相关产品推荐
相关产品推荐

