Faites glisser et déposez un fichier local avec Selenium (Python)

introduction

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.

Méthode

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

Faites glisser et déposez un fichier local avec Selenium (Python)
Grattage avec Python, Selenium et Chromedriver
[GUI en Python] PyQt5-Glisser-déposer-
Lire et écrire des fichiers JSON avec Python
Pratiquer le web scraping avec Python et Selenium
Essayez d'exécuter Google Chrome avec Python et Selenium
ScreenShot avec Selenium (édition Python)
Grattage avec du sélénium [Python]
La lecture et l'écriture s'adaptent aux fichiers avec Python (mémo)
Serveur local avec python
Installez le sélénium sur votre Mac et essayez-le avec python
Suivi automatique sur Twitter avec python et sélénium! (RPA)
Lire et écrire des fichiers avec Slackbot ~ Développement de bot avec Python ~
Automatisez Chrome avec Python et Selenium sur votre Chromebook
Traduisez automatiquement DeepL en anglais avec Python et Selenium
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Grattage au sélénium en Python
Python et matériel - Utilisation de RS232C avec Python -
Grattage avec Selenium + Python Partie 1
Python: travailler avec Firefox avec du sélénium
Tri des fichiers image avec Python (2)
Grattage avec du sélénium en Python
Trier de gros fichiers avec python
Tri des fichiers image avec Python (3)
Tri des fichiers image avec Python
Intégrez des fichiers PDF avec Python
Lire des fichiers .txt avec Python
Grattage avec Selenium + Python Partie 2
python avec pyenv et venv
Défiez Python3 et Selenium Webdriver
Fonctionne avec Python et R
Communiquez avec FX-5204PS avec Python et PyUSB
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Extraire récursivement des fichiers zip avec python
Scraping avec Selenium en Python (Basic)
Manipuler des fichiers et des dossiers en Python
[Python] Fichiers wav POST avec requêtes [POST]
Lire et utiliser des fichiers Python à partir de Python
Décrypter les fichiers cryptés avec OpenSSL avec Python 3
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
Lire et écrire NetCDF avec Python
Enregistrer et récupérer des fichiers avec Pepper
Gérer les fichiers Excel CSV avec Python
J'ai joué avec PyQt5 et Python3
Lire des fichiers en parallèle avec Python
Exporter et exporter des fichiers en Python
Lire et écrire du CSV avec Python
Sélénium et python pour ouvrir Google
Intégration multiple avec Python et Sympy
Coexistence de Python2 et 3 avec CircleCI (1.0)
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python