Seite 1 von 1

Problem mit pyautogui

Verfasst: Donnerstag 7. April 2016, 20:34
von S0S
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?

Re: Problem mit pyautogui

Verfasst: Freitag 8. April 2016, 08:10
von hans
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.

Re: Problem mit pyautogui

Verfasst: Mittwoch 13. April 2016, 10:15
von S0S
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.

Re: Problem mit pyautogui

Verfasst: Mittwoch 13. April 2016, 10:25
von Sirius3
@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.

Re: Problem mit pyautogui

Verfasst: Mittwoch 13. April 2016, 10:31
von S0S
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?

Re: Problem mit pyautogui

Verfasst: Mittwoch 13. April 2016, 11:02
von 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.

Re: Problem mit pyautogui

Verfasst: Mittwoch 13. April 2016, 11:39
von S0S
Ja, das wäre schön, wenn pyautogui das täte - macht es aber offenbar nicht.

Re: Problem mit pyautogui

Verfasst: Mittwoch 13. April 2016, 11:42
von BlackJack
@S0S: Dann ist das ein Fehler in `pyautogui`. Da gibt's sicher mindestens einen Autoren. Und der sollte das dann beheben.

Re: Problem mit pyautogui

Verfasst: Donnerstag 14. April 2016, 09:39
von S0S
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.