Wenn Sie eine Datei mit Selenium of Python hochladen, können Sie die Datei mit "send_keys (/ path / to / file)" für das Eingabeelement mit "type =" file "" [^ selenium-send-keys] auswählen. In den meisten Fällen ist das Eingabeelement im CSS ausgeblendet, obwohl es zu fehlen scheint. In vielen Fällen kann dies durchgeführt werden (ändern Sie das CSS, damit der Web-Treiber auf das Eingabeelement zugreifen kann). Es ist notwendig.)
Einige Seiten verwenden das Eingabeelement jedoch nicht für die Dateiauswahl, und Sie müssen möglicherweise Dateien durch Ziehen und Ablegen auswählen. In einem solchen Fall ist das folgende Verfahren wirksam.
Verwenden Sie den Code in 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
#Unten finden Sie ein Anwendungsbeispiel
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 ")
Wenn Sie sich Gist ansehen, können Sie alles sehen, aber der Code sieht so aus. Siehe Gist für wd-drop-file.min.js
. Das Original hat direkt "JS_DROP_FILES" eingegeben, aber dieser Code liest aus einer externen Datei.
Recommended Posts