Python Selenium选择下拉列表项报MoveTargetOutOfBoundsException如何解决
解决方案
报错原因
- 使用绝对XPath定位元素稳定性极差,页面结构发生微小变动就会定位到错误元素
- 未展开下拉框时option元素处于不可见状态,ActionChains无法将鼠标移动到不在可视区域的元素上,因此抛出超出边界错误
- 填写的option索引错误,Riyadh选项的位置与你写的
option[5]不符,也会导致定位失败
正确实现代码
Selenium内置了专门处理原生<select>下拉框的Select工具类,不需要用ActionChains手动操作,实现逻辑更稳定:
首先导入依赖:from selenium.webdriver.support.ui import Select
核心实现代码:
wait = WebDriverWait(driver, 10) # 优先用id定位下拉框,稳定性远高于绝对XPath dropdown = wait.until(EC.element_to_be_clickable((By.ID, "cityId"))) # 实例化Select对象 select = Select(dropdown) # 三种选择方式任选其一即可,推荐用value或可见文本,索引容易随着选项增减失效 # 方式1:按option的value属性值选择 select.select_by_value("Riyadh - الرياض") # 方式2:按option显示的文本选择(注意文本前有空格,和HTML里的内容保持一致) # select.select_by_visible_text(" Riyadh - الرياض") # 方式3:按索引选择(索引从0开始计数,默认禁用选项是0,Riyadh对应索引为12) # select.select_by_index(12)
注意事项
只有非原生的自定义下拉框(用div、ul等标签模拟的下拉框)才需要先点击展开下拉框,再点击对应选项。当前场景是标准的原生<select>标签,直接用Select类处理即可,不会出现边界相关报错。
内容的提问来源于stack exchange,提问作者raptorzee
相关产品推荐
相关产品推荐

