Selenium Python报ElementNotInteractableException对象无尺寸位置问题
问题诱因
- 定位范围无限制导致匹配到隐藏元素:你当前的xpath是全局匹配
data-original-title为对应值的input,页面中可能存在多个符合该属性的输入框(比如卖出操作对应的同属性输入框默认隐藏),你实际定位到的是不可见的隐藏元素,因此没有有效尺寸和位置,无法交互。 - 元素状态判断逻辑缺失:你选择完买卖方向后仅使用硬
sleep等待,没有显式判断目标输入框是否已经渲染完成、处于可见可交互状态,部分场景下模态框内容重绘速度慢于硬等待时长,会导致拿到还没完成渲染的元素。 - 交互逻辑不合理:使用ActionChains移动到元素后直接发送输入内容,没有提前激活输入框焦点,也可能触发交互失败。
解决方法
你提到的「先定位外层div点击再操作输入框」的方案是可行的,更稳妥的优化方案如下:
- 限制输入框的查找范围在当前已打开的交易模态框内,避免匹配到隐藏元素
- 替换硬sleep为显式等待,等待目标输入框可见后再操作
- 先点击激活输入框、清空原有默认值,再输入目标数值
修改后的代码示例:
# 把原来的sleep(3)及之后的代码替换为以下内容 # 显式等待模态框内的输入框可见,限制查找范围为交易模态框 amount_input = wait.until(EC.visibility_of_element_located(( By.XPATH, "//div[@id='trading-modal-root' and contains(@style,'block')]//input[@data-original-title='Wie viele Stück möchten Sie kaufen?']" ))) # 先点击激活输入框,清空默认值,再输入内容 amount_input.click() amount_input.clear() amount_input.send_keys('33')
如果上述方案还是失效,可以尝试通过JS直接赋值,规避前端交互限制:
driver.execute_script("arguments[0].value = '33'", amount_input)
内容的提问来源于stack exchange,提问作者BenjaminDiLorenzo
相关产品推荐
相关产品推荐

