Selenium无可见input[type='file']元素时如何实现图片上传
解决方案
remove.bg 页面的文件上传 input 被设置了隐藏属性,默认不可交互,你不需要找到页面上可见的上传按钮,直接操作隐藏的 input 元素即可,操作步骤如下:
- 先添加元素等待逻辑,避免页面未加载完成就定位元素导致报错
- 通过 JS 脚本修改 input 元素的可见属性,解除隐藏限制
- 直接给 input 元素传入本地图片的绝对路径完成上传
完整可运行代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox() driver.get("https://www.remove.bg/upload") # 等待文件上传input加载完成 upload_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, '//input[@type="file"]')) ) # 用JS修改元素属性,解除隐藏 driver.execute_script(""" arguments[0].style.display = 'block'; arguments[0].style.visibility = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1; """, upload_input) # 替换为你本地图片的绝对路径 upload_input.send_keys("/Users/xxx/Downloads/test.jpg")
注意事项
- 图片路径请使用绝对路径,Windows 系统注意路径分隔符转义,或者直接用原生字符串
- 如果你使用的是旧版本 Selenium,也可以保留原来的
find_element_by_xpath写法,不需要引入 By 类 - 不需要手动点击页面上的上传按钮,直接给 input 传值即可触发上传流程
内容的提问来源于stack exchange,提问作者ppxx
相关产品推荐
相关产品推荐

