Hallo Leute, ich versuche gerade von einer Exceldatei, die immer einen neuen Namen hat, wobei ich den Namen nicht vorhersagen kann, den Dateinamen zu bekommen. Das Problem hierbei ist, dass ich keine Möglichkeit finde. Ich leite Selenium zu den "chrome://downloads/" wo die Datei tatsächlich als einzige immer angezeigt würde. Das Problem ist nur, dass ich leider keine geeignete ID finde, um es mit find element by id zu finden, um davon das attribut class zu entnehmen, worin hierbei der dateiname einsichtlich wäre. Zweiter Versuch war dann jetzt mit paar anderen elements by selector,xpath usw. leider auch net geklappt. Dritter Versuch diesmal mit auf "Im Ordner Anzeigen" klicken und Dateiname kopieren. Die Frage ist nur, wie man den Dateinamen hier kopieren kann. Wäre echt dankbar, wenn jemand mir hier helfen könnte.
MfG Call
Python mit Selenium bei Chrome
Wenn du die Datei heruntergeladen hast (so verstehe ich dich), dann schau in den Download-Ordner auf der Platte und such dir die neueste Datei.
Zuletzt geändert von sparrow am Sonntag 10. November 2019, 22:44, insgesamt 1-mal geändert.
ja, aber ich bräuchte einen direkten pfad zur neusten datei. Wie kann ich das dann einlesen?sparrow hat geschrieben: Sonntag 10. November 2019, 22:22 Wenn du die Datei heruntergeladen hast (so verstehe ich dich), dann schau in den Download-Ordner auf der Platte und such die die neueste Datei.
Ja klar, den Download-Order kann ich auch als Konstante definieren. Aber der Download ordner ist weder komplett leer noch soll und wird er nach jedem Durchgang geleert werden. Wie man mit Python die neuste Datei in einem Verzeichnis findet - davon habe ich leider keine Ahnung.sparrow hat geschrieben: Sonntag 10. November 2019, 22:47 Ich verstehe die Frage nicht.
Den Download-Ordner kannst du als Konstante definieren. Der ändert sich ja nicht.
Und wie man mit Python die neueste Datei in einem Verzeichnis findet, hast du wie probiert?
Tja, wenn man mit seiner Recherche nicht fündig wird kommt man aus genau diesem Grund zu diesem Forum. So wie ich das sehe braucht man os zu benutzen. Aber ich finde keine Dokumentation dafür.sparrow hat geschrieben: Sonntag 10. November 2019, 22:58 Dann schlage ich vor, eine entsprechende Recherche zu starten.
Wenn du eine direkte Lösung hast, her damit. Selenium war nur ein Versuch, da ich sowieso schon damit im Programm gearbeitet habe.Sirius3 hat geschrieben: Sonntag 10. November 2019, 23:28 Warum brauchst Du Selenium? Bei einer direkten Lösung hättest Du auch direkt den Dateinamen?
Code: Alles auswählen
latest_file = max(list_of_files, key=os.path.getctime)
- __blackjack__
- User
- Beiträge: 14013
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Call: Was `os.path.getctime()` macht kann man in der Dokumentation nachlesen. Ebenso die `max()`-Funktion. `list_of_files` ist ein bisschen unglücklich benannt weil da keine Dateiobjekte drin sein müssen, sondern Dateinamen, eventuell inklusive Pfad zu den Dateien von denen man die mit der Grössten „ctime“ haben möchte.
Ich würde in neuem Code eher mit `pathlib` statt mit `os.path` arbeiten.
Ich würde in neuem Code eher mit `pathlib` statt mit `os.path` arbeiten.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
So kommst du an den Namen der Datei, die als letztes im Ordner erstellt wurde:
Code: Alles auswählen
import glob
import os
PATH = r'C:\Temp\*' #Wenn z.B. nur .xlsx Dateien gesucht werden, dann *.xlsx
all_filenames = glob.glob(PATH)
latest_filename = max(all_filenames, key=os.path.getctime)
print(latest_filename)
@Jankie: `os` und `glob` sind veraltet. Heutzutage benutzt man pathlib.
Code: Alles auswählen
from pathlib import Path
DOWNLOAD_PATH = Path('~/Downloads').expanduser()
all_filenames = DOWNLOAD_PATH.glob('*.xlsx')
latest_filename = max(all_filenames, key=lambda p: p.stat().st_ctime)