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

Selenium如何遍历并点击HTML ul列表中匹配文本的可见<li>元素

解决Selenium操作CardMarket自定义下拉列表的问题

别担心,你遇到的问题很常见——因为Selenium的Select类只支持原生的<select>标签,而CardMarket这个下拉列表是用<ul>和<li>做的自定义组件,所以用Select肯定行不通。下面给你一个简单可行的方案:

核心思路

输入关键词后,等待下拉列表的选项加载出来,然后遍历所有可见的<li>元素,找到文本匹配的那个点击即可。这里需要注意等待元素加载,避免因为页面渲染慢导致找不到元素的问题。

完整代码示例

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

# 初始化浏览器
driver = webdriver.Chrome(executable_path="C:/Windows/chromedriver.exe")
driver.get("https://www.cardmarket.com/en/Magic/AdvancedSearch")

# 定位输入框并输入关键词
expansion_input = driver.find_element_by_name("expansionTempInput")
expansion_input.send_keys("Ultimate Masters")

# 等待下拉列表的选项加载完成(最多等10秒)
# 这里定位的是包含所有选项的<ul>,你可以根据实际HTML调整xpath
wait = WebDriverWait(driver, 10)
option_list = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="ExpansionSection"]/div[2]/div/div/div[2]/ul')))

# 获取所有<li>选项元素
options = option_list.find_elements_by_tag_name("li")

# 遍历选项,找到匹配文本的并点击
for option in options:
    # 处理文本,去掉前后空格并统一小写,避免大小写或空格导致匹配失败
    option_text = option.text.strip().lower()
    if "ultimate masters" in option_text:
        option.click()
        break  # 找到后点击就退出循环

关键说明

  • 等待元素加载:用WebDriverWait和EC.visibility_of_element_located确保下拉列表已经显示出来,这能解决大部分“元素不可见”或“找不到元素”的问题。
  • 遍历
  • 元素:通过find_elements_by_tag_name("li")获取所有选项,然后逐个检查文本。
  • 文本匹配优化:用strip()去掉前后空格,lower()统一转小写,避免因为页面文本有空格或者大小写不一致导致匹配失败。

如果运行时还是有问题,可以检查一下xpath是否正确(你可以右键浏览器里的选项元素,复制xpath),或者调整等待时间(比如把10改成15)。

内容的提问来源于stack exchange,提问作者Damian Szarik Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:57:31