使用Selenium Python上传本地文件报ElementNotInteractableException如何解决
问题根因
你当前定位的元素是span类型的视觉图标,Selenium的send_keys传入本地文件路径的操作仅支持对<input type="file">类型的文件上传专用元素生效,span元素本身不支持接收文件输入,因此触发元素不可交互报错。
修复方案
- 第一步:定位页面中实际的文件上传元素,优先查找标签为
input、属性type="file"的元素,大部分场景下该元素会被前端设置为隐藏,无需提前点击唤起文件选择框。 - 第二步:如果元素处于隐藏状态,可通过执行JS脚本解除隐藏后,再传入文件路径,示例代码如下:
# 定位文件上传专用input元素,可根据实际页面的id、class或父级关系调整选择器 file_input = driver.find_element(By.CSS_SELECTOR, 'input[type="file"]') # 若元素隐藏,执行JS设置为可见 driver.execute_script("arguments[0].style.display = 'block'; arguments[0].style.opacity = '1';", file_input) # 传入本地文件路径,建议用原始字符串避免转义问题 file_input.send_keys(r"C:\Users\deepa\Downloads\deepak_1.png")
注意事项
- 若页面存在多个
type="file"的元素,可补充其他属性缩小定位范围,比如input[type="file"][name="upload_img"],避免定位到错误元素。 - 不需要额外点击span类型的上传图标,直接对file input元素传路径即可完成上传操作。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

