Python mit Selenium bei Chrome

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Call
User
Beiträge: 21
Registriert: Donnerstag 25. April 2019, 22:38

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
Benutzeravatar
sparrow
User
Beiträge: 4533
Registriert: Freitag 17. April 2009, 10:28

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.
Call
User
Beiträge: 21
Registriert: Donnerstag 25. April 2019, 22:38

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, aber ich bräuchte einen direkten pfad zur neusten datei. Wie kann ich das dann einlesen?
Benutzeravatar
sparrow
User
Beiträge: 4533
Registriert: Freitag 17. April 2009, 10:28

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?
Call
User
Beiträge: 21
Registriert: Donnerstag 25. April 2019, 22:38

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?
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.
Benutzeravatar
sparrow
User
Beiträge: 4533
Registriert: Freitag 17. April 2009, 10:28

Dann schlage ich vor, eine entsprechende Recherche zu starten.
Call
User
Beiträge: 21
Registriert: Donnerstag 25. April 2019, 22:38

sparrow hat geschrieben: Sonntag 10. November 2019, 22:58 Dann schlage ich vor, eine entsprechende Recherche zu starten.
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.
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum brauchst Du Selenium? Bei einer direkten Lösung hättest Du auch direkt den Dateinamen?
Call
User
Beiträge: 21
Registriert: Donnerstag 25. April 2019, 22:38

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?
Wenn du eine direkte Lösung hast, her damit. Selenium war nur ein Versuch, da ich sowieso schon damit im Programm gearbeitet habe.

Code: Alles auswählen

latest_file = max(list_of_files, key=os.path.getctime)
Diesen codeschnippsel hab ich gefunden, ich verstehe aber zum beispiel nicht, was getctime sein soll oder wo ich das Verzeichnis eintragen soll.
Benutzeravatar
__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.
“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
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich habe keine direkte Lösung, weil ich ja gar nicht weißt, was Du genau abfragen willst.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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)
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

@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)
Antworten