我正在尝试自动化Facebook市场帖子。但我正在努力将图片上传到它。
我已经找到了该元素。当我单击该元素时,它将显示显示文件管理器的"框",以便我可以单击文件夹,然后单击所需的图像。
ele = wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="rc.js_c"]/div/div[1]/div[5]/div[2]/div/div/div/div/div[1]/div/div/span/div/a/div[2]')))
ele.click()
但是当我尝试这个时:
ele.send_keys('/file_path/rasp.jpeg')
它引发了以下异常:
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
我还尝试使用操作系统库:
ele.send_keys(os.getcwd() + '/home/br1/Downloads/rasp.jpeg')
收到相同的异常错误。
元素可见的 html 代码(代码中使用的元素(:
<div class="_3jk">
它是(元素不可见(的父级:
<input accept="image/*" multiple="" name="composer_photo" title="Elige un archivo para subir" data-testid="add-more-photos" display="inline-block" type="file" class="_n _5f0v" id="js_wg">
如果您想尝试一下,这里是所有代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By 10
# driver protocols
options = Options()
options.add_argument('disable-notifications')
options.add_argument('start-maximized')
driver = webdriver.Chrome(options=options, executable_path='/chromedriver')
wait = WebDriverWait(driver,10)
# url
driver.get('http://facebook.com/marketplace')
driver.implicitly_wait(10)
# logging
driver.find_element_by_id('email').send_keys('username')
driver.find_element_by_id('pass').send_keys('password')
driver.find_element_by_id('u_0_2').click()
# entering marketplace
driver.find_element_by_xpath('//*[contains(text(), "Vender algo")]').click()
driver.find_element_by_xpath('//*[contains(text(), "Artículo en venta")]').click()
ele = wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="rc.js_c"]/div/div[1]/div[5]/div[2]/div/div/div/div/div[1]/div/div/span/div/a/div[2]')))
ele.send_keys('/file_path/rasp.jpeg')
任何想法和建议都会被采纳。 我是 Linux 用户。
您应该尝试使用输入来发送文件路径而不是div。
请尝试以下操作。
ele = wait.until(EC.presence_of_element_located((By.XPATH,'//input[@name="composer_photo" and @type="file"]')))
ele.send_keys("file_to_be_uploaded")