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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:10:26