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

Selenium模拟按下向下箭头和回车键无响应如何解决?

问题原因

  • 输入搜索关键词后,站点的联想下拉列表需要异步加载渲染,输入文本后立即触发箭头按键时,下拉列表还未完全加载,按键事件无对应可交互的联想项,因此不会生效。
  • 无间隔连续触发两次按键事件,部分站点的前端事件监听逻辑无法响应过快的连续输入,会直接丢弃事件。

解决方法

优先选择直接点击联想项的方案,比模拟按键兼容性更高、稳定性更强,修改后的代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
import time

link = "https://www.bcassessment.ca/"
options = Options()
options.add_argument("start-maximized")
options.add_argument('window-size=1920x1080')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
srv=Service(ChromeDriverManager().install())
driver = webdriver.Chrome (service=srv, options=options)
waitWebDriver = WebDriverWait (driver, 10)
driver.get (link)

# 定位搜索框并输入关键词
search_input = waitWebDriver.until(EC.element_to_be_clickable((By.XPATH, "//input[@id= 'rsbSearch']")))
search_input.send_keys("106 Maple")

# 等待第一个联想项加载完成后直接点击
first_suggest_item = waitWebDriver.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "li.rsbListItem:first-child")))
first_suggest_item.click()

time.sleep(500)

如果必须使用模拟按键的实现方式,只需要在各操作之间加入短暂等待,保证前端逻辑完成渲染和事件响应即可,对应代码替换如下:

search_input.send_keys("106 Maple")
# 等待下拉列表渲染完成
time.sleep(0.5)
search_input.send_keys(Keys.ARROW_DOWN)
# 等待联想项选中状态触发
time.sleep(0.2)
search_input.send_keys(Keys.ENTER)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:36:04