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
相关产品推荐
相关产品推荐

