Lors du téléchargement d'un fichier avec Selenium de Python, vous pouvez sélectionner le fichier par send_keys (/ chemin / vers / fichier)
pour l'élément d'entrée avec type =" file "
[^ selenium-send-keys]. Dans la plupart des cas, l'élément d'entrée est caché dans le CSS même s'il semble manquer, donc dans de nombreux cas, c'est la voie à suivre (modifier le CSS pour permettre au webdriver d'accéder à l'élément d'entrée). Il est nécessaire.)
Cependant, certaines pages n'utilisent pas l'élément d'entrée pour la sélection de fichiers et vous devrez peut-être sélectionner des fichiers par glisser-déposer. Dans un tel cas, la méthode suivante est efficace.
Utilisez le code dans florentbr / # wd-drop-file.py --GitHub Gist.
from selenium import webdriver
from selenium.webdriver.remote.webelement import WebElement
import os.path
with open("wd-drop-file.min.js", "r") as f:
JS_DROP_FILES = f.read()
def drop_files(element, files, offsetX=0, offsetY=0):
driver = element.parent
isLocal = not driver._is_remote or '127.0.0.1' in driver.command_executor._url
paths = []
# ensure files are present, and upload to the remote server if session is remote
for file in (files if isinstance(files, list) else [files]) :
if not os.path.isfile(file) :
raise FileNotFoundError(file)
paths.append(file if isLocal else element._upload(file))
value = '\n'.join(paths)
elm_input = driver.execute_script(JS_DROP_FILES, element, offsetX, offsetY)
elm_input._execute('sendKeysToElement', {'value': [value], 'text': value})
WebElement.drop_files = drop_files
#Ci-dessous un exemple d'utilisation
driver = webdriver.Chrome()
driver.get("https://react-dropzone.js.org/")
dropzone = driver.find_element_by_css_selector("[data-preview='Basic example'] [style]")
dropzone.drop_files("C:\\temp\\image1.png ")
Si vous regardez Gist, vous pouvez tout voir, mais le code ressemble à ceci. Voir Gist pour wd-drop-file.min.js
. L'original a entré JS_DROP_FILES
directement, mais ce code lit à partir d'un fichier externe.
Recommended Posts