Automating tasks with PyAutoGUI
Tags: python, pyautogui, programming, automation
Published: 2022-02-11 06:17:16

**Introduction**

One of the most exciting aspects of working with computers all day is the potential to automate. Unlike the most mundane real-life tasks we have to drag ourselves through each day, computers permit us to live a power fantasy, one where we dictate the terms and they do our bidding, over and over with nary a complaint. As we realize this power fantasy, let's be what's called a taskmaster.

Python is an extremely powerful language, partly due to the plethora of modules available to import and use. As taskmasters, we begin by installing and using the Python module PyAutoGUI. While this module is powerful in its own right, when used in conjunction with various other modules, anything can be automated. As programmers, UI testing is the first thing that comes to mind. For our purposes here, we will restrict ourselves to a very simple application, one that solves a gripe I have with Slack.

Now Slack is a godsend for more reasons than one. However, I find the way Slack handles status quite bothersome. I step away from my computer often during the workday. Give Slack 10 minutes and it changes my status to away. I am, however, very much available as I have my mobile phone on me. If I were to step away to take a break, I already have the ability to change my status to indicate so. We can write a simple program using PyAutoGUI to work around this issue.

PyAutoGUI is a Python automation module used to simulate a click, key press, scroll, etc. These actions can be combined in any order and in conjunction with other Python modules, they can detect and react to just about any change in the GUI of the Operating System. For instance, the dinosaur mini-game bundled with Google Chrome can be completely automated just using PyAutoGUI as it’s all about detecting change and reacting to it with key presses.

**Python - i_am_never_away**
_Dependencies:_ 
- Python3
- Modules: PyAutoGUI and Time
- Basic understanding of Python syntax

**Installation**
Windows: 
pip install pyautogui

_Linux and Mac:_
pip3 install pyautogui

_Some known issues:_
If you are running OSX El Capitan and have problems installing pyobjc, try:
MACOSX_DEPLOYMENT_TARGET=10.11 pip install pyobjc

_Linux additionally requires:_
sudo apt-get install scrot 
sudo apt-get install python3-tk
sudo apt-get install python3-dev

**Implementation**
For an easy to read and summarized document on the module and its syntax, please refer to: https://www.youngwonks.com/resources/pyautogui-cheatsheet

**Step I - Importing the Required Modules**
We start by importing PyAutoGUI and time.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a9vzlq2gzkqmatzjwhjm.png)

**Step II - Making the Program Dynamic**
The program has to work for any machine with well, Slack installed, irrespective of the display resolution. Therefore, in order to make the program dynamic, we must first obtain the display’s  resolution.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tk5mva0b0sxv34nyng0p.png)

**Step III - Clicking the Start Button**
While we can simply press the left Windows key on the keyboard to summon the start menu, it’s  not always reliable, especially when coupled with other key inputs due to conflicts between key- press time intervals and the amount of time it takes for the start menu to appear and be ready to detect key presses. Considering the start button is always on the bottom-left corner, we can simply click it.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x8doj04jyss9tess6f8l.png)

**Step IV - Opening Slack**
Now that we have the start menu up, we can type Slack and hit enter on the keyboard. This is guaranteed to open Slack as among search results, installed applications have the highest precedence. In order to quicken this process, the interval has been set to 0.1s.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2y9cgfjcima12ft8z49l.png)

**Step V - Clicking on the Screen**
A simple click anywhere within the Slack window should now ensure that the status is changed to available. In order to avoid mis-clicks, we'll click right smack at the center of the screen.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4530k7dt6alkddyenuy6.png)

**Step VI - Closing Slack**
With the status now changed, we can close the Slack window. Triggering hotkeys
straightforwardly would’ve been rather tedious, as the correct combination of key press and key release has to be simulated in the right order. Luckily, PyAutoGUI provides an easier alternative, the hotkey() function.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/il22o46d16620lcvdmhb.png)

**Step VII - Adding a Timer**
Finally, we make the program repeat this same process every 10 minutes. There are many ways to keep track of elapsing time. The easiest, however, is using the time module, more specifically, the time.time() function. We simply note down the current time at the beginning of the program and keep subtracting from it to determine elapsed time. If this happens to be a multiple of 600, it means 10 minutes or a multiple of 10 minutes has passed and each time it does, Slack is opened.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29hcx8ys0zi8cjuy2kj1.png)


For the official documentation, please refer to: https://pyautogui.readthedocs.io/en/latest

**Conclusion**
GUI Automation, in all its essence, is in line with the very spirit of programming languages; it enables us to escape the mundanity of repetitive tasks by pawning it off to not-so-smart, smart computers by letting us communicate with them. The only difference here is the level of abstraction. This variant of computer automation is very surface-level and as a result, very easy to understand. The potential, however, is boundless.


_This article has been written by Shravan Sridhar. He has worked in the fields of Cyber Security and Data Science, and is currently an experienced Python instructor at YoungWonks (https://www.youngwonks.com), a top after-school coding program for kids and teens. YoungWonks' WASC-accredited program offers kids a world-class introduction to Python. Students here get started with real syntactical computer programming and gain conceptual depth of a college level program with a kid-friendly curriculum._