Selenium循环遍历HTML下拉框选项报AttributeError求解
报错根因
select_by_value是Selenium内置Select类的专属方法,直接通过find_element拿到的select_box是普通WebElement实例,本身不存在这个方法,因此抛出属性错误。
原代码还存在3个隐性问题:
get_attribute("value")返回值是字符串类型,直接和整数0做判断永远无法命中关闭分支- 高版本Selenium已经废弃
find_elements_by_tag_name这类旧写法,运行会抛废弃警告甚至报错 - 如果选中选项后触发页面刷新/DOM重渲染,提前缓存的
options元素列表会失效,触发元素不存在异常
修复方案
- 先导入
Select类,将定位到的原生<select>标签元素包装为Select实例,即可调用下拉选择相关的内置方法 - 修正值判断逻辑,将拿到的value值和字符串
"0"做匹配 - 替换废弃的元素定位写法,若选中选项后页面重渲染,每次操作后重新定位下拉框元素避免失效
- 完全退出驱动使用
driver.quit(),driver.close()仅关闭当前标签页,不会彻底退出驱动进程
修正后代码
# 提前导入依赖 from selenium.webdriver.support.ui import Select from selenium.webdriver.common.by import By # 原有driver初始化逻辑保留 # 定位下拉框元素并包装为Select实例 select_element = driver.find_element(By.ID, "<ID_Name>") select_box = Select(select_element) # 获取所有选项 all_options = select_box.options for option in all_options: current_val = option.get_attribute("value") print(current_val) if current_val == "0": # 命中0值直接退出驱动 driver.quit() break # 非0值选中对应选项 select_box.select_by_value(current_val) # 在此处编写选中选项后需要执行的业务逻辑 # 注意:如果选中选项后页面刷新/下拉框DOM重绘,请取消下一行注释,重新定位下拉框避免元素失效 # select_box = Select(driver.find_element(By.ID, "<ID_Name>"))
特殊情况说明
如果目标下拉框是前端组件自定义实现的非原生<select>标签,不能使用Select类做选择,需要自行模拟点击:先点击下拉触发按钮展开选项列表,再定位到对应选项元素执行点击操作。
内容的提问来源于stack exchange,提问作者Satyam Jhawar
相关产品推荐
相关产品推荐

