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

如何使用Selenium和Python通过input标签上传文件及加载文件链接?

Python + Selenium 文件上传问题解决

问题背景

你需要通过页面中的input[type="file"]标签上传文件,对应的HTML代码如下:

<input type="file" id="filArquivo" class="infraInputFile" name="filArquivo" size="50" onchange="objUpload.executar();" tabindex="1000">

尝试了以下两段代码均未成功:

WebDriverWait(navegador, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="filArquivo"]'))).send_keys("Doc.pdf")
WebDriverWait(navegador, 20).until(EC.element_to_be_clickable((By.ID, 'filArquivo'))).send_keys("Doc.pdf")

常见失败原因及解决办法

1. 文件路径错误(最常见)

你只传入了文件名"Doc.pdf",Selenium无法定位到文件——必须传入文件的绝对路径,除非文件和你的Python脚本在同一目录下(这种情况极少)。

示例路径写法:

  • Windows系统:C:\\Users\\你的用户名\\Documents\\Doc.pdf 或用原始字符串避免转义:r"C:\Users\你的用户名\Documents\Doc.pdf"
  • Linux/macOS系统:/home/你的用户名/Documents/Doc.pdf

2. 等待条件不合适

element_to_be_clickable要求元素可见且可点击,但很多自定义上传组件会把原生的input[type="file"]隐藏(比如设置display: none或opacity: 0),这时候该等待条件会失效。

可以换成以下两种更合适的等待条件:

  • visibility_of_element_located:等待元素可见(即使是透明但占位置的状态也能识别)
  • presence_of_element_located:只要元素在DOM中存在即可,无需管是否可见

修改后的代码示例:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 替换成你的文件绝对路径
file_path = r"C:\Users\你的用户名\Documents\Doc.pdf"

# 用visibility_of_element_located等待元素
upload_elem = WebDriverWait(navegador, 20).until(
    EC.visibility_of_element_located((By.ID, 'filArquivo'))
)
upload_elem.send_keys(file_path)

3. 原生input被完全隐藏

如果上述方法仍无效,说明input被CSS完全隐藏(比如display: none),可以通过JavaScript修改元素样式让它临时可见,再执行上传:

upload_elem = WebDriverWait(navegador, 20).until(
    EC.presence_of_element_located((By.ID, 'filArquivo'))
)
# 用JS修改display属性,让元素可见
navegador.execute_script("arguments[0].style.display = 'inline-block';", upload_elem)
upload_elem.send_keys(file_path)

额外注意事项

  • 不需要点击原生的file input标签!直接用send_keys传入路径即可,点击会触发系统文件选择框,Selenium无法控制这个框。
  • 如果input标签在iframe里,需要先切换到iframe再定位元素:navegador.switch_to.frame("iframe的id或name"),操作完成后切回主文档:navegador.switch_to.default_content()

内容的提问来源于stack exchange,提问作者Filipe L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:01:06