如何用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
相关产品推荐
相关产品推荐

