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

Python-Selenium:输入值后无法选择自动生成的下拉菜单选项

解决Selenium无法操作AJAX自动补全下拉框的问题

问题原因

你遇到的UnexpectedTagNameException是因为**Select类仅支持HTML原生的<select>标签**,但你要操作的是一个<input>类型的搜索自动补全框(从HTML的data-completer="AJAXTableCompleter"和role="combobox"能看出,这是ServiceNow风格的AJAX动态生成下拉菜单),所以不能用Select来处理。

解决方案

这类自定义下拉框的处理逻辑是:输入关键词触发下拉加载 → 等待下拉菜单可见 → 定位并点击目标选项。

修改后的代码

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

# 定位输入框并输入关键词
input_box = driver.find_element(By.CSS_SELECTOR, '#sys_display.sn_vul_vulnerable_item.cmdb_ci')
input_box.clear()
input_box.send_keys("server_name")

# 等待自动补全下拉容器加载并可见(对应HTML中aria-owns属性指定的ID)
wait = WebDriverWait(driver, 10)
dropdown_menu = wait.until(EC.visibility_of_element_located((By.ID, 'AC.sn_vul_vulnerable_item.cmdb_ci')))

# 定位并点击目标选项(精确匹配文本)
target_option = wait.until(EC.element_to_be_clickable(
    (By.XPATH, '//*[@id="AC.sn_vul_vulnerable_item.cmdb_ci"]//*[text()="server_name"]')
))
target_option.click()

补充说明

  1. 模糊匹配选项:如果选项文本不是完全和输入值一致,可以用contains来模糊定位:
    //*[@id="AC.sn_vul_vulnerable_item.cmdb_ci"]//*[contains(text(), "server_name")]
    
  2. 按属性定位:部分ServiceNow的补全选项会带有data-value或data-id属性,也可以用CSS选择器直接定位:
    target_option = wait.until(EC.element_to_be_clickable(
        (By.CSS_SELECTOR, '#AC.sn_vul_vulnerable_item.cmdb_ci .ac_item[data-value="你的服务器ID"]')
    ))
    
  3. 等待策略:用visibility_of_element_located确保下拉菜单完全可见,element_to_be_clickable确保选项可以点击,避免因元素未加载完成导致的点击失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:05:43