Moin Python-User,
ich bin noch etwas unerfahren und nutze python 3.8.10 auf Windows 10. Ich habe folgende pip installationen über die cmd ausgeführt:
pip install pywin32
pip install keyboard
pip install pyautogui
pip install opencv-python
Ich habe mein Skript soweit fertig geschrieben und wenn die Funktion pyautogui.locateOnScreen(img_path) aufgerufen wird, dann kommt die unten aufgelistete Fehlermeldung.
Ich würde gerne wissen, woran das Problem genau liegt. Kann mir dabei jemand weiterhelfen?
--FEHLERMELDUNG--
Traceback (most recent call last):
File "D:\User\Python\Install\python_scripts\Flüge\skript\gui_handler.py", line 153, in <module>
pyautogui.locateOnScreen('D:/User/Python/Flüge/pictures/firefox.PNG',confidence=0.9)
File "D:\User\Python\Install\lib\site-packages\pyautogui\__init__.py", line 175, in wrapper
return wrappedFunction(*args, **kwargs)
File "D:\User\Python\Install\lib\site-packages\pyautogui\__init__.py", line 213, in locateOnScreen
return pyscreeze.locateOnScreen(*args, **kwargs)
File "D:\User\Python\Install\lib\site-packages\pyscreeze\__init__.py", line 373, in locateOnScreen
retVal = locate(image, screenshotIm, **kwargs)
File "D:\User\Python\Install\lib\site-packages\pyscreeze\__init__.py", line 353, in locate
points = tuple(locateAll(needleImage, haystackImage, **kwargs))
File "D:\User\Python\Install\lib\site-packages\pyscreeze\__init__.py", line 207, in _locateAll_opencv
needleImage = _load_cv2(needleImage, grayscale)
File "D:\User\Python\Install\lib\site-packages\pyscreeze\__init__.py", line 170, in _load_cv2
raise IOError("Failed to read %s because file is missing, "
OSError: Failed to read D:/User/Python/Flüge/pictures/firefox.PNG because file is missing, has improper permissions, or is an unsupported or invalid format
pyautogui.locateOnScreen(img_path) funktioniert nicht
@ __deets__
Ja die Datei gibt es da, wo er sie sucht. Ich habe den Pfad händisch eingetragen und lasse ihn sowohl über das glob-Modul suchen. Und im Ordner befindet sich die gewünschte Datei.
Den Screenshot habe ich über Snippingtool gemacht und als png abgespeichert. es ist einfach nur das Firefox-icon unten Windows Taskleiste.
Wie kann ich das Problem beheben?
Ja die Datei gibt es da, wo er sie sucht. Ich habe den Pfad händisch eingetragen und lasse ihn sowohl über das glob-Modul suchen. Und im Ordner befindet sich die gewünschte Datei.
Den Screenshot habe ich über Snippingtool gemacht und als png abgespeichert. es ist einfach nur das Firefox-icon unten Windows Taskleiste.
Wie kann ich das Problem beheben?
Jo, ich habe meinen Namen für dieses Forum herausgenommen und durch User ersetzt.
Also kann ich den Fehler nicht beheben?
Ich hätte mal nach gelesen, dass das Pillow package nicht mehr Bilder importieren kann. Ist das korrekt? Kann es an den Paketen liegen?
Also kann ich den Fehler nicht beheben?
Ich hätte mal nach gelesen, dass das Pillow package nicht mehr Bilder importieren kann. Ist das korrekt? Kann es an den Paketen liegen?
Am Pfad kann es aber nicht liegen. Ich kann dir gern den Skriptschnipsel schicke, indem ich mir den dateipfad raussuche. Am Pfad sollte es definitiv nicht liegen.
Vor ca. einem Jahr hat das Skript unter einer anderen Python Version funktioniert.
Warum sollte es jetzt nicht mehr funktionieren? Warum sollten die Dateien jetzt ein nicht unterstütztes Format oder eine falsche Berechtigung aufweisen?
Vor ca. einem Jahr hat das Skript unter einer anderen Python Version funktioniert.
Warum sollte es jetzt nicht mehr funktionieren? Warum sollten die Dateien jetzt ein nicht unterstütztes Format oder eine falsche Berechtigung aufweisen?
Ich kann dir nur sagen, was die Fehlermeldung sagt. Die kommt von hier https://github.com/asweigart/pyscreeze/ ... __.py#L169
Wenn ist es ein OpenCV-Problem, wie man da sieht. Das die aber keine PNG-Dateien laden können, kann ich mir schwer vorstellen.
Was ergibt denn ein
open(pfad, “rb”).read()
mit dem gleichen Pfad? Das umgeht alle Bibliotheken & zeigt, ob der Zugriff an sich geht.
Wenn ist es ein OpenCV-Problem, wie man da sieht. Das die aber keine PNG-Dateien laden können, kann ich mir schwer vorstellen.
Was ergibt denn ein
open(pfad, “rb”).read()
mit dem gleichen Pfad? Das umgeht alle Bibliotheken & zeigt, ob der Zugriff an sich geht.
Ich habe ein für mich komisches Verhalten fest gestellt.
Ich habe einen Skript-Ordner
- Ordner "Eigene Python skripte"
- Dateien "Skript"
- Ordner "Pictures"
Wenn ich die Bilder aus Ordner "Pictures" lade, dann zeigt mir die folgende Methode:
import cv2
im = cv2.imread(path)
print(im)
None an
Wenn ich ein anderes Dateiverzeichnis, was nichts mit "Eigene Python Skripte" zu tun hat, dann kommt bei dem Print-Befehl ein numpy-array.
Darauf versuche ich jetzt auf zu bauen.
Ich habe einen Skript-Ordner
- Ordner "Eigene Python skripte"
- Dateien "Skript"
- Ordner "Pictures"
Wenn ich die Bilder aus Ordner "Pictures" lade, dann zeigt mir die folgende Methode:
import cv2
im = cv2.imread(path)
print(im)
None an
Wenn ich ein anderes Dateiverzeichnis, was nichts mit "Eigene Python Skripte" zu tun hat, dann kommt bei dem Print-Befehl ein numpy-array.
Darauf versuche ich jetzt auf zu bauen.
- __blackjack__
- User
- Beiträge: 13079
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Baustein: Was denn nun "Eigene Python skripte" oder "Eigene Python Skripte"? Ja, ich weiss, Windows ist das egal, aber eventuell nicht jeder Software die darauf läuft und nicht Windows-Only ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Das klingt nach einem Windows Rechteproblem. Das hat ja eine Vielzahl von solchen Ecken, da sieht dann ein Prozess bestimmte Verzeichnisse nicht und was weiß ich. Wobei das es dann wieder nur opencv betrifft komisch ist.
@ __blackjack__:
ein schreibfehler, beide Ordner hießen gleich -> "Eigene Python Skripte".
Aber ich fasse es mal kurz anders zusammen:
Python und dessen Packages sind unter C:\... installiert. Ich arbeite auf dem Ordner D:\Users\Scripts\ um meine eigenen Skripte zu sammeln (Habe zwei Festplatten im PC). Zusätzlich gibt es einen Unterordner namens D:\Users\Scripts\Pics\ um meine Screenshots zu speichern und per Skript zu zugreifen.
Da ich gerne mit eigenen geschriebenen Klassen und Modulen aus D:\Users\Scripts\ arbeiten möchte, mache ich folgenden Befehl in meinen Skripten:
>>> import sys
>>> sys.path.append('D:\Users\Scripts')
>>> import script_example ## Skript-Import aus dem Ordner D:\Users\Scripts\
Meine Vermutung ist jetzt, dass es aufgrund des importes unter Path nicht funktioniert. Denn wenn ich den Ordner D:\Users\Scripts\Pics\ zu D:\Users\New Folder\Pics\ verschiebe (sodass D:\Users\New Folder\Pics\ nicht mehr im Path gelistet ist), dann kann pyautogui mit den Bildern arbeiten (viel mehr opencv kann darauf zugreifen und gibt mir kein None-Wert zurück). Aber ob das so ist, das kann ich nicht beurteilen. Vielleicht liegt es aber auch daran, dass ich den absoluten Pfad bei der pyautogui.locateOnScreen(img_path) angegeben habe, obwohl ich ja schon einen Path habe.
Aber ich kann Damit erst mal weiter arbeiten und bedanke mich für eure Unterstützung.
ein schreibfehler, beide Ordner hießen gleich -> "Eigene Python Skripte".
Aber ich fasse es mal kurz anders zusammen:
Python und dessen Packages sind unter C:\... installiert. Ich arbeite auf dem Ordner D:\Users\Scripts\ um meine eigenen Skripte zu sammeln (Habe zwei Festplatten im PC). Zusätzlich gibt es einen Unterordner namens D:\Users\Scripts\Pics\ um meine Screenshots zu speichern und per Skript zu zugreifen.
Da ich gerne mit eigenen geschriebenen Klassen und Modulen aus D:\Users\Scripts\ arbeiten möchte, mache ich folgenden Befehl in meinen Skripten:
>>> import sys
>>> sys.path.append('D:\Users\Scripts')
>>> import script_example ## Skript-Import aus dem Ordner D:\Users\Scripts\
Meine Vermutung ist jetzt, dass es aufgrund des importes unter Path nicht funktioniert. Denn wenn ich den Ordner D:\Users\Scripts\Pics\ zu D:\Users\New Folder\Pics\ verschiebe (sodass D:\Users\New Folder\Pics\ nicht mehr im Path gelistet ist), dann kann pyautogui mit den Bildern arbeiten (viel mehr opencv kann darauf zugreifen und gibt mir kein None-Wert zurück). Aber ob das so ist, das kann ich nicht beurteilen. Vielleicht liegt es aber auch daran, dass ich den absoluten Pfad bei der pyautogui.locateOnScreen(img_path) angegeben habe, obwohl ich ja schon einen Path habe.
Aber ich kann Damit erst mal weiter arbeiten und bedanke mich für eure Unterstützung.