Python Selenium如何点击选择无select标签的下拉列表li选项
问题根因
Selenium 内置的 Select 类仅支持原生 <select> 标签实现的下拉菜单,你当前遇到的是基于 ul/li 自定义实现的下拉组件,所以Select类的所有方法都不适用,send_keys对非输入类元素也无效。
可行解决方案
点击展开下拉菜单后,直接定位到对应选项的li元素并触发点击即可,有两种常用定位方式:
- 按选项可见文本定位
- 按
li的data-value属性定位
修改后的完整代码
from selenium import webdriver import time edge_options = { "executable_path": "/edgedriver_mac64/msedgedriver", "capabilities": { "platformName": 'mac os x', } } browser = webdriver.Edge(**edge_options) browser.get('https://kstory.hangame.com/en/index') time.sleep(2) # 点击展开下拉 select_server = browser.find_element_by_css_selector("span[class='js-selected-text']") select_server.click() time.sleep(1) # 等待下拉选项完全渲染 # 方式1:按可见文本选择Conquest(US) target_option = browser.find_element_by_xpath("//ul[contains(@class,'js-select-form')]/li[text()='Conquest(US)']") # 方式2:按data-value属性选择,对应Conquest(US)的data-value是4 # target_option = browser.find_element_by_xpath("//ul[contains(@class,'js-select-form')]/li[@data-value='4']") # 点击选中选项 target_option.click()
优化建议
可以把硬等待time.sleep()替换为Selenium的显式等待,避免网络波动导致元素未加载完成报错,示例如下:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 最多等待10秒,直到下拉展开按钮可点击 wait = WebDriverWait(browser, 10) select_server = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.js-selected-text"))) select_server.click() # 等待目标选项可点击后再点击 target_option = wait.until(EC.element_to_be_clickable((By.XPATH, "//li[text()='Conquest(US)']"))) target_option.click()
内容的提问来源于stack exchange,提问作者Wing
相关产品推荐
相关产品推荐

