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

Selenium使用send_keys上传多文件路径问题求助

解决type=file输入框重复添加文件的问题

问题场景

向type=file类型的输入框添加文件路径时出现重复添加:第一次添加文件1,第二次会同时添加文件1和文件2,以此类推。尝试过多种方式均未解决:

  • 循环逐个调用send_keys传入路径
  • 将所有路径用换行符拼接后一次性调用send_keys
  • 手动尝试清空输入框也无效

尝试的代码

代码1:循环逐个调用send_keys

new_images = modify_images(ad['images_url'])
time.sleep(4)
add_images = driver.find_element(By.XPATH, image_add_xpath)
time.sleep(2)
for i in range(len(new_images)):
    print("image " + str(index) + " " + new_images[i])
    time.sleep(3)
    url = r"C:\\Users\\33651\Documents\Documents\\facebook-automate\\facebook-automate\\"+new_images[i]
    print(url)
    print("uploading")
    add_images.send_keys(url)
    print("Image uploadé")
    time.sleep(2)

代码2:拼接路径一次性传入

add_images = driver.find_element(By.XPATH, image_add_xpath)
time.sleep(2)
all_path_images = ""
for i in range(len(new_images)):
    all_path_images += new_images[i] + ' \n '
    
add_images.send_keys(all_path_images)
print("Image uploadé")
time.sleep(2)

问题原因

type=file输入框的send_keys默认行为是追加文件,而非覆盖已有选择。循环调用会不断把新路径加到已选列表后,导致重复;拼接代码中多余的空格也会导致路径识别错误,无法正确拆分多个文件。

解决方案

方案1:一次性传入正确格式的所有路径

直接用换行符\n连接所有绝对路径,不要添加多余空格,确保每个路径都是完整的本地路径:

add_images = driver.find_element(By.XPATH, image_add_xpath)
time.sleep(2)
# 用列表推导式拼接所有绝对路径,换行符分隔
all_path_images = "\n".join([
    r"C:\Users\33651\Documents\Documents\facebook-automate\facebook-automate\" + img 
    for img in new_images
])
add_images.send_keys(all_path_images)
print("图片上传完成")
time.sleep(2)

方案2:逐个添加时确保每次操作有效输入框

部分网站在文件选择后会替换原始input元素,或需要手动清空value属性,所以每次循环重新定位元素并清空:

new_images = modify_images(ad['images_url'])
time.sleep(4)
for i in range(len(new_images)):
    print(f"image {index} {new_images[i]}")
    time.sleep(3)
    # 每次循环重新定位输入框
    add_images = driver.find_element(By.XPATH, image_add_xpath)
    # 通过JS清空输入框的value属性
    driver.execute_script("arguments[0].value = '';", add_images)
    # 简化路径写法,原始字符串单斜杠即可
    url = r"C:\Users\33651\Documents\Documents\facebook-automate\facebook-automate\" + new_images[i]
    print(url)
    print("上传中")
    add_images.send_keys(url)
    print("图片已上传")
    time.sleep(2)

注意事项

  • 路径用原始字符串r"..."可以避免转义错误,无需写双斜杠
  • 尽量用WebDriverWait显式等待替代time.sleep,提升脚本稳定性
  • 若网站上传控件有动态DOM变化,必须每次重新定位元素

内容的提问来源于stack exchange,提问作者Théo Pantecouteau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:10:25