Problem mit pyautogui

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
S0S
User
Beiträge: 50
Registriert: Samstag 9. Februar 2013, 18:59

Nachdem ich mein anderes Problem mit pyautogui gelöst habe, tritt nun ein neues auf. Und zwar findet pyautogui zwar den Screenshot und führt auch das restliche Programm aus, allerdings landet der Cursor nicht an dem Ort, wo der Screenshot ist.

Mein Code ist folgender:

Code: Alles auswählen

import pyautogui
import time

def find_click(button):
    not_open = True
    while not_open:
        time.sleep(1)
        try:
            button_name = "Screenshots\{}.png".format(button)
            button_location = pyautogui.locateOnScreen(button_name)
            x,y = pyautogui.center(button_location)
            pyautogui.click(x,y)
            not_open = False
            #im = pyautogui.screenshot(region=button_location)
            #im.show()
        except:
            print "Looking for", button
            pyautogui.moveRel(1,0)
            not_open = True
        time.sleep(1)
        
pyautogui.hotkey("win", "r")
pyautogui.typewrite("SnippingTool.exe")
pyautogui.press("enter")

find_click("Neu")
Das Programm soll also das Snipping Tool öffnen und auf den Button "Neu" klicken, der folgendermaßen aussieht:
Bild

Aktiviert man die auskommentierten Zeilen, wird auch genau dieses Bild geöffnet; an der entsprechenden Stelle ist also offenbar schon dieser Button. Jedoch wird der Cursor zum Klicken nicht dorthin bewegt, sondern an einen Ort deutlich weiter rechts unten:
Bild

Kann sich jemand vorstellen, woran das liegen kann?
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Habe kein Windows (mehr). Versuche bitte einmal von der Kommandozeile mit der Option /? (help) zu starten. Vielleicht gibt es ja Parameter, die eine Automatisierung vereinfachen.
S0S
User
Beiträge: 50
Registriert: Samstag 9. Februar 2013, 18:59

Ist jetzt zwar keine Erklärung, aber ich habe durch Trial and Error herausgefunden, dass sich die Koordinaten um den Faktor 0,8 von denen unterscheiden, wo der Cursor sein sollte, sodass man das im Code berücksichtigen kann (siehe viewtopic.php?f=9&t=38367). Wenn sich jemand das erklären kann, fände ich das aber immer noch interessant.
Zuletzt geändert von S0S am Mittwoch 13. April 2016, 10:32, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@S0S: heutzutage bei den hohen Pixelauflösungen gibt es einen Unterschied zwischen logischen Pixelkoordinaten und physikalischen. Keine Ahnung ob das hier der Fall ist, aber Inkonsistenzen kann man damit zu Hauf einbauen. Der Faktor 0,8 wäre dann auch von Gerät zu Gerät unterschiedlich.
S0S
User
Beiträge: 50
Registriert: Samstag 9. Februar 2013, 18:59

Das klingt sinnvoll. Kann man denn irgendwie nachschauen, was man für logische und physikalische Pixelauflösung hat, sodass man nicht an jedem Gerät herumprobieren muss, was denn nun der Faktor ist? Oder noch besser, kann man es irgendwie direkt mit Python auslesen und so einbauen, dass man den Code nicht immer von Hand anpassen muss?
BlackJack

@S0S: Das ist eigentlich eine Aufgabe die `pyautogui` übernehmen sollte. Wenn ich von einer Bibliothek Koordinaten erfrage und diese Koordinaten später in einem anderen Aufruf der Bibliothek verwende, dann sollte ich doch eigentlich erwarten können, dass beide Aufrufe das selbe Koordinatensystem verwenden.
S0S
User
Beiträge: 50
Registriert: Samstag 9. Februar 2013, 18:59

Ja, das wäre schön, wenn pyautogui das täte - macht es aber offenbar nicht.
BlackJack

@S0S: Dann ist das ein Fehler in `pyautogui`. Da gibt's sicher mindestens einen Autoren. Und der sollte das dann beheben.
S0S
User
Beiträge: 50
Registriert: Samstag 9. Februar 2013, 18:59

Das Problem ist bereits bekannt. Mit der Lösung, die zlorb hier (https://github.com/asweigart/pyautogui/issues/61) vorschlägt, funktioniert es auch ohne den Faktor 0,8.
Antworten