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

使用Python+Selenium无法将本地文件拖拽上传到网页指定区域如何解决

问题根因

send_keys()传入文件路径的方法仅对<input type="file">类型的元素生效,你当前定位的元素是前端自定义的拖拽交互DIV容器,因此只能触发拖拽进入的高亮效果,无法完成实际的文件上传。

解决方案

方案1:操作内置隐藏文件输入框(稳定性最高)

绝大多数拖拽上传组件都会内置一个隐藏的<input type="file">元素来承接文件数据,按以下步骤操作即可:

  • 打开浏览器F12调试工具,在元素面板搜索type="file",定位到和当前上传区域对应的input元素
  • 直接对该input元素调用send_keys()传入本地文件路径即可,无需额外处理元素隐藏属性,示例代码如下:
# 替换为你实际定位到的file input元素的选择器
file_input = driver.find_element_by_xpath("//input[@type='file']")
file_path = '/home/new/Desktop/CT_filters/Braid-s.png'
file_input.send_keys(file_path)

如果运行时报元素不可交互的错误,可以先通过JS修改元素属性解除隐藏后再操作:

file_input = driver.find_element_by_xpath("//input[@type='file']")
# 执行JS修改元素可见性
driver.execute_script("arguments[0].style.display = 'block'; arguments[0].style.opacity = 1; arguments[0].style.position = 'static';", file_input)
file_path = '/home/new/Desktop/CT_filters/Braid-s.png'
file_input.send_keys(file_path)

方案2:模拟完整拖拽交互流程(适用于必须走拖拽逻辑的场景)

如果组件做了限制,必须通过拖拽动作才能触发上传逻辑,可以通过ActionChains模拟完整的拖拽事件流:

from selenium.webdriver import ActionChains

# 定位拖拽区域和file input元素
drag_drop_area = driver.find_element_by_xpath("//*[@id='root']/main/div[3]/section[2]/div[2]/div[2]/div/div/div")
file_input = driver.find_element_by_xpath("//input[@type='file']")
file_path = '/home/new/Desktop/CT_filters/Braid-s.png'

file_input.send_keys(file_path)
# 模拟拖拽动作:按住文件→移动到目标区域→松开
ActionChains(driver).click_and_hold(file_input)\
    .move_to_element(drag_drop_area)\
    .release(drag_drop_area)\
    .perform()

内容的提问来源于stack exchange,提问作者Michał_M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:54:03