Python+Selenium Webdriver无法选择点击搜索框下拉结果如何解决
Selenium自动化搜索操作解决方案
方案1:按回车键直接获取搜索结果(更稳定)
该方案不需要处理下拉框加载逻辑,稳定性更高,不会出现下拉框消失的问题,实现代码如下:
# 导入必要依赖 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # 初始化驱动、打开目标网站 driver = webdriver.Chrome() driver.get("https://paytmmall.com") driver.maximize_window() # 定位搜索框、输入关键词后按回车触发搜索 search = driver.find_element(By.ID, 'searchInput') search.send_keys("flowers") search.send_keys(Keys.ENTER)
提示:如果你使用的Selenium版本低于4.0,可将find_element(By.ID, 'searchInput')替换为find_element_by_id('searchInput')使用
方案2:点击下拉联想词实现搜索
你原有代码报错、下拉框消失主要有两个原因:
- 定位XPATH使用了精确文本匹配,实际下拉项的文本前后存在空白字符、或者文本存储在子节点中,导致无法匹配到元素触发超时
- 你使用了
presence_of_element_located判断条件,该条件仅验证元素存在于DOM树中,不验证元素可见,未完全渲染的元素操作会触发下拉框失焦消失
修正后的代码如下:
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() driver.get("https://paytmmall.com") driver.maximize_window() search = driver.find_element(By.ID, 'searchInput') search.send_keys("flowers") # 改用可见性判断+模糊文本匹配定位下拉项 dropdown = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.XPATH, "//li[contains(text(),'flowers')]"))) dropdown.click()
如果你需要使用CSS选择器定位,可以替换定位方式为:
EC.visibility_of_element_located((By.CSS_SELECTOR, "ul[role='listbox'] li"))
即可匹配到下拉列表的第一个联想项。
注意:输入关键词后不要执行点击页面空白处、切换窗口等操作,否则会触发下拉框失焦自动隐藏
内容的提问来源于stack exchange,提问作者MohitK
相关产品推荐
相关产品推荐

