Wyobraźmy sobie świat w którym nie musimy klikać ani wpisywać nic na klawiaturze. Codziennie używamy wielu aplikacji korzystając z myszki i klawiatury, w tym materiale nauczymy się jak zastępować takie czynności używając pythona.

Źródłem powstania bilbioteki PyAutoGui była potrzeba automatyzacji testów aplikacji przed jej ostatecznym wypuszczeniem na rynek. No bo ile razy jesteśmy w stanie my jako ludzie ręcznie przeklikać się przez 100 okien, 3 razy, 10 razy, 100 razy, 1000 razy? A co jeśli napiszemy prosty skrypt który zrobi to za nas?

Niezależnie od testowania działania aplikacji, ile razy w ciągu dnia czy tygodnia wykonujemy tą samą czynność?

Wstęp do PyAutoGUI

PyAutoGui to biblioteka w Pythonie która pozwala nam na pracę zarówno na systemie Windows, systemie firmy Apple oraz Linuxie. Dzięki niej możemy zasymulować dowolną aktywność wykonywana myszką bądź klawiaturą.

Zainstalujmy samą bibliotekę:

pip install pyautogui

po czym zaimportujmy do naszego projektu:

import pyautogui as gui

Przykład użycia

Zobaczmy ją w akcji, stwórzmy szybki skrypt. Załóżmy, że mamy zainstalowaną aplikację notatnik i chcemy zrobić prosty test sprawdzający czy możemy ją otworzyć wpisać tekst po czym zmienić rozmiar tekstu.

Pierwszą rzeczą będzie zaimportowanie biblioteki i ściągniecie wartości wielkości ekranu oraz kliknięcie „menu start” które zakładamy że będzie w lewym dolnym rogu ekranu.

import pyautogui as gui, time
screenWidth, screenHeight = gui.size()
gui.moveTo(5,screenHeight-5)
gui.click()

funkcja „moveTo” pozwala nam na przesunięcie myszki w odpowiednią część ekranu, a funkcja „click” wykonanie kliknięcia.

Powyższy kod otworzy nam konsole wyszukiwania aplikacji, więc możemy teraz wpisać jej nazwe

gui.typewrite('Notatnik', interval=0.25)
gui.press('enter')

Dzięki funkcji „typewrite”, wpisujemy tekst, dodatkowo możemy ustawić argument interval, który będzie robił krótką przerwę między wciśnięciami klawiatury tak, aby komputer miał czas zareagować.

Następnie maksymalizujemy okno aplikacji tak, aby wszystkie przyciski zawsze były w tym samym położeniu. Wykorzystamy skrót klawiszowy ALT+SPACE+X.

time.sleep(2) #damy 2 sekundy aplikacji notepad na poprawne uruchomienie
gui.keyDown('alt')
gui.press(' ')
gui.press('x')
gui.keyUp('alt')

Jesteśmy teraz w położeniu w którym możemy zacząć tworzyć dowolną sekwencje akcji które chcemy wykonać w aplikacji. Czyli na przykład wpisanie odpowiedniego tekstu oraz zmienienie jego czcionki.

Aby zrobić to efektywnie stworzymy sobie funkcje pomocniczą, która co 3 sekundy wypiszę nam pozycję naszej myszki, ze względu na to że każdy z nas może mieć większy lub mniejszy monitor oraz rozdzielczość, każdy z nas musi znależć swoje własne położenie kursora.

import pyautogui as gui, time

def identifyloc():
    while True:
        currentMouseX, currentMouseY = gui.position()
        print(currentMouseX,currentMouseY)
        time.sleep(3)
identifyloc()

Po uruchumieniu tego krótkiego skryptu nakieruj mysz na miejsce w które chciałbyś kliknąć i odczytaj jej położenie.

Otrzymasz dwie wartości, jedna jest koordynatą w poziomie, druga natomiast w pionie.

W tym wypadku zrobimy kliknięcie w pustą część notatnika oraz wpisanie tekstu

gui.click(250,22)
gui.typewrite('Automatyczny tekst')

Teraz możemy zająć się klikaniem w przycisków w aplikacji. Dlatego znajdźmy współrzędne przycisku „format”, a następnie „czcionka”. Po czym wybierzmy większą czcionkę i kliknijmy „OK”.

Połączone razem powinno wyglądać to następująco:

import pyautogui as gui, time
def test_notatnik():
    screenWidth, screenHeight = gui.size()
    gui.moveTo(5,screenHeight-5)
    gui.click()
    gui.typewrite('Notatnik', interval=0.25)
    gui.press('enter')
    time.sleep(2)
    gui.keyDown('alt')
    gui.press(' ')
    gui.press('x')
    gui.keyUp('alt')
#kliknięcie w pusty notatnik
    gui.click(250,50)
    gui.typewrite(" <a href=/"https://analityk.edu.pl/rozklad-normalny-w-python//">https://analityk.edu.pl/rozklad-normalny-w-python/</a> ")
#kliknięcie w menu format
    gui.click(250, 10)
#kliknięcie w czcionka
    gui.click(300, 30)
 #kliknięcie w wartość "26" czcionki
    gui.click(700, 350) 
  #kliknięcie w OK
    gui.click(500, 550)

test_notatnik()

Podsumowując

Dzięki bilbiotece PyAutoGui możemy zautomatyzować dowolną ilość czynności które na codzień wykonujemy myszką bądź klawiaturą, co daję nam ogromne możliwości. Musimy natomiast pamiętać o tym, że aplikację się zmieniają, przyciski się przesuwają, a dodatkowo z czasem możemy zwiększyć rozdzielczość ekranu czy jego wielkość. Dlatego należy pamiętać o tym, aby dostosować nasze rozwiązanie kiedy takie zmiany następują.

W kolejnym materiale spojrzymy na ten sam przykład zrobiony w bardziej stabilny sposób korzystając z innych metod tej samej bilbioteki.