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

如何用Selenium Python遍历列表项并点击目标项?代码异常排查

问题原因与解决方案

你的代码问题出在定位表达式错误:
(//ul[@role='listbox'])[1] 定位的是整个下拉列表的容器(<ul>元素),而非里面的单个选项。所以presence_of_all_elements_located只会返回1个元素(就是这个<ul>容器),自然无法遍历到具体的邮箱选项。

修正步骤

把定位选项的XPath改为指向<ul>下的每个列表项,根据常见的下拉列表结构,应该定位<ul>内部的<li>元素(通常选项会带有role='option'属性):

修正后的代码:

butonlista = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@id='P17_OWNER01_EMAIL_AD']")))
butonlista.click()
# 定位ul下的所有选项li元素
search_result = self.wait.until(EC.presence_of_all_elements_located((By.XPATH, "(//ul[@role='listbox'])[1]/li[@role='option']")))
print(len(search_result))
for result in search_result:
    if "bacau@otpbank.ro" in result.text:
        result.click()
        break

如果你的下拉选项<li>没有role='option'属性,也可以简化为:

search_result = self.wait.until(EC.presence_of_all_elements_located((By.XPATH, "(//ul[@role='listbox'])[1]/li")))

这样就能获取到所有下拉选项,遍历判断文本后点击目标元素即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:15:28