Selenium上传文件异常:尝试传2个却上传3个及以上的问题求助
问题原因与解决方案
为什么循环两次却上传了3张?
Facebook Marketplace的图片上传控件逻辑特殊:
- 首次给
input[type=file]发送文件路径后,这个输入框不会失效,仍然可以接收新的文件路径(多个路径用换行符分隔)。 - 你的循环每次都定位到页面上第一个文件输入框,第一次上传1张;第二次再次给这个输入框发送路径时,它会把新路径追加到已有的路径列表中,导致这个输入框一次性上传2张(重复的同一张图)。
- 最终总数量就是第一次的1张 + 第二次的2张 = 3张。
两种解决方法
方法1:每次定位最新的文件输入框
上传一张图片后,页面会新增一个新的input[type=file]用于继续上传。循环时定位最后一个输入框,确保每次都用新的控件上传:
import time from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('https://www.facebook.com/marketplace/create/item') # 上传2张图片 for _ in range(2): # 获取所有文件输入框,取最后一个 file_inputs = driver.find_elements(By.XPATH, '//input[@type="file"]') file_inputs[-1].send_keys('C:/img_from_url.jpg') # 等待图片上传完成,确保页面生成新的输入框 time.sleep(2)
方法2:一次性上传多张图片
直接给同一个输入框发送多个文件路径(用换行符\n分隔),无需循环,一次完成上传:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('https://www.facebook.com/marketplace/create/item') # 多张图片路径用换行符分隔 image_paths = 'C:/img_from_url.jpg\nC:/img_from_url.jpg' driver.find_element(By.XPATH, '//input[@type="file"]').send_keys(image_paths)
内容的提问来源于stack exchange,提问作者LikeLinux
相关产品推荐
相关产品推荐

