You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium在maketime.io上传文件遇ElementNotInteractableException问题

解决Selenium上传文件时的ElementNotInteractableException问题

嘿,我帮你分析下这个问题——你遇到的ElementNotInteractableException完全是因为目标上传元素被隐藏了!看你提供的元素代码,它带有ng-show="false"和class="ng-hide"属性,这意味着页面把这个文件输入框给隐藏起来了,Selenium的键盘交互(比如send_keys)自然没法直接操作隐藏元素。

下面给你几个实用的解决方案:

方案1:先让元素可见,再执行上传

你可以通过JavaScript脚本移除元素的隐藏属性,让它变成可见状态,之后再正常调用send_keys:

# 定位目标元素
attach = driver.find_element_by_id('part_input_3d_10262')
# 执行JS脚本移除隐藏相关的属性和类
driver.execute_script("""
    arguments[0].removeAttribute('ng-show');
    arguments[0].classList.remove('ng-hide');
    arguments[0].style.display = 'block'; // 额外确保元素显示
""", attach)
# 现在可以正常上传文件了
attach.send_keys("你的文件绝对路径")

方案2:直接用JavaScript触发文件上传(更稳妥)

如果修改元素可见性后还是有问题,你可以直接用JS脚本模拟文件上传的整个流程,绕开元素可见性的限制:

file_path = "你的文件绝对路径"
# 执行JS完成文件设置和上传触发
driver.execute_script("""
    var input = document.getElementById('part_input_3d_10262');
    input.style.display = 'block';
    input.value = arguments[0];
    // 触发change事件,让页面识别到文件已选择
    var changeEvent = new Event('change');
    input.dispatchEvent(changeEvent);
""", file_path)

额外提醒

  • 一定要用文件的绝对路径,相对路径很容易导致Selenium找不到文件
  • 如果页面是动态加载的,建议先等待元素完全加载完成再操作,可以用WebDriverWait来确保元素存在:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待元素出现,超时时间10秒
attach = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located(('id', 'part_input_3d_10262'))
)
# 之后再执行上面的上传操作

内容的提问来源于stack exchange,提问作者deep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:37:03