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

Selenium Python问题:无法用ARROW_DOWN选择自动提示下拉框指定元素

问题分析

你的代码存在几个关键问题导致ARROW_DOWN操作失效:

  • 发送ARROW_DOWN时,未等待下拉选项列表完全加载,按键可能发送到了空的列表上
  • 第二种方法中,判断"New Plymouth" in depart_from.text是错误的,输入框的文本不会随下拉选项选中而改变,应该检查下拉选项的文本
  • 循环中的break缩进错误,导致语法错误
修正方案

我们需要先等待下拉选项列表加载完成,再通过ARROW_DOWN导航到目标选项,最后按ENTER确认选择。以下是修正后的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.chrome.options import Options
from time import sleep

options = Options()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
driver = webdriver.Chrome(options=options)

driver.get('https://www.yatra.com/flights')
driver.maximize_window()
sleep(2)

wait = WebDriverWait(driver, 10)

# 处理Cookie弹窗
try:
    wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'I Agree')]"))).click()
    sleep(1)
except NoSuchElementException:
    print("无Cookie同意按钮!")

# 定位出发城市输入框并点击激活
depart_from = wait.until(EC.presence_of_element_located((By.ID, "BE_flight_origin_city")))
depart_from.click()
sleep(1)
depart_from.clear()

# 输入部分城市名
depart_from.send_keys('New')

# 等待下拉选项列表加载完成
wait.until(EC.visibility_of_element_located((By.XPATH, "//ul[@class='ac-list']")))

# 循环发送ARROW_DOWN,直到选中目标选项
target_city = "New Plymouth"
for i in range(10):
    # 发送向下箭头
    depart_from.send_keys(Keys.ARROW_DOWN)
    sleep(0.5)  # 给页面一点响应时间
    # 获取当前选中的选项文本
    selected_option = wait.until(EC.visibility_of_element_located((By.XPATH, "//ul[@class='ac-list']//li[@class='ac-selected']")))
    if target_city in selected_option.text:
        # 按ENTER确认选择
        depart_from.send_keys(Keys.ENTER)
        break

print("出发城市:", depart_from.get_attribute('value'))

driver.quit()
关键改动说明
  • 新增等待下拉选项列表(ul[@class='ac-list'])可见的步骤,确保选项已加载
  • 循环中定位当前选中的选项(li[@class='ac-selected']),检查其文本是否为目标城市
  • 选中目标后发送Keys.ENTER确认选择,而非直接点击输入框
  • 修正了原代码中的语法错误(break的缩进)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:16:13