如何在 Linux 上使用 python 使用 Selenium 上传文件(图像)?
How to upload a file (image) with Selenium using python on Linux?
我想自动上传一个文件到这个网站(这不是我的网站)但是这个网站是在一些 js 框架中创建的(我认为它是反应)。现在我在上传文件时遇到问题,我尝试过的所有方法都不起作用。我使用 Linux(发行版 Manjaro),但无法使用 AutoIT。
这是我试过的。
file_image = 'image.jpg'
#this
uplod_image = browser.find_element_by_xpath('//input[@qa-id="selectFile"]').send_keys(file_image)
#and this
upload_image = browser.find_element_by_class_name("fileUploadBtn_dropzoneElement_38Gmm").send_keys(file_image)
这是经过检查的代码,主要问题是上传是像 div
我经常遇到这个错误...
selenium.common.exceptions.ElementNotInteractableException: Message: Element <div class="fileUploadBtn_dropzoneElement_38Gmm"> is not reachable by keyboard
Stacktrace:
WebDriverError@chrome://remote/content/shared/webdriver/Errors.jsm:183:5
ElementNotInteractableError@chrome://remote/content/shared/webdriver/Errors.jsm:293:5
webdriverSendKeysToElement@chrome://remote/content/marionette/interaction.js:624:13
interaction.sendKeysToElement@chrome://remote/content/marionette/interaction.js:600:11
sendKeysToElement@chrome://remote/content/marionette/actors/MarionetteCommandsChild.jsm:497:24
receiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.jsm:151:31
知道如何解决这个问题吗?
通常使用 Selenium 上传文件是通过以下方式完成的:
browser.find_element_by_xpath('//input[@type="file"]').send_keys(file_location)
其中 file_location
是本地 PC 上文件的实际绝对路径。
喜欢C:/path_to_file/image.jpg
如果您检查 input
元素,样式属性显示为 display: none;
这就是即使使用有效定位器也无法交互的原因。
您需要将元素的样式更改为 display: block;
,然后尝试使用 send_keys()
上传文件
使用java脚本执行器改变样式。
fileupload=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div[qa-id='dropZone']>input[type='file']")))
driver.execute_script("arguments[0].style.display = 'block';",fileupload)
fileupload.send_keys(path/to/file)
希望此代码对您有用。
您需要导入以下库。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
我想自动上传一个文件到这个网站(这不是我的网站)但是这个网站是在一些 js 框架中创建的(我认为它是反应)。现在我在上传文件时遇到问题,我尝试过的所有方法都不起作用。我使用 Linux(发行版 Manjaro),但无法使用 AutoIT。
这是我试过的。
file_image = 'image.jpg'
#this
uplod_image = browser.find_element_by_xpath('//input[@qa-id="selectFile"]').send_keys(file_image)
#and this
upload_image = browser.find_element_by_class_name("fileUploadBtn_dropzoneElement_38Gmm").send_keys(file_image)
这是经过检查的代码,主要问题是上传是像 div
我经常遇到这个错误...
selenium.common.exceptions.ElementNotInteractableException: Message: Element <div class="fileUploadBtn_dropzoneElement_38Gmm"> is not reachable by keyboard
Stacktrace:
WebDriverError@chrome://remote/content/shared/webdriver/Errors.jsm:183:5
ElementNotInteractableError@chrome://remote/content/shared/webdriver/Errors.jsm:293:5
webdriverSendKeysToElement@chrome://remote/content/marionette/interaction.js:624:13
interaction.sendKeysToElement@chrome://remote/content/marionette/interaction.js:600:11
sendKeysToElement@chrome://remote/content/marionette/actors/MarionetteCommandsChild.jsm:497:24
receiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.jsm:151:31
知道如何解决这个问题吗?
通常使用 Selenium 上传文件是通过以下方式完成的:
browser.find_element_by_xpath('//input[@type="file"]').send_keys(file_location)
其中 file_location
是本地 PC 上文件的实际绝对路径。
喜欢C:/path_to_file/image.jpg
如果您检查 input
元素,样式属性显示为 display: none;
这就是即使使用有效定位器也无法交互的原因。
您需要将元素的样式更改为 display: block;
,然后尝试使用 send_keys()
使用java脚本执行器改变样式。
fileupload=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div[qa-id='dropZone']>input[type='file']")))
driver.execute_script("arguments[0].style.display = 'block';",fileupload)
fileupload.send_keys(path/to/file)
希望此代码对您有用。
您需要导入以下库。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By