pyvisauto is a Python visual automation tool. Inspired by Sikuli, pyvisauto provides Python-native easy-to-use abstractions for complex interactions with on-screen visual elements by wrapping OpenCV (specifically opencv-contrib-python-headless), pyautogui, pytesseract, and numpy.
Features include:
- OpenCV and numpy-driven image matching of on-screen elements
- TesseractOCR support
- Methods to find an image match (
find), find all matches (find_all), check if a match exists (exists), wait until an image match occurs (wait), and wait for an image match to disappear (wait_vanish) - Methods to click and hover over regions and matches (
clickandhover, respectively) with random x and y coordinates within the region - Sub-region and cached matching for faster performance
- Method to save screenshots of matches and regions to a file (
screenshot)
pyvisauto has been tested on Python 3.7. The opencv-contrib-python-headless package limits availability to Python 2.7 and 3.4 ~ 3.7. While pyvisauto should be compatible with Python 3, Python 3.8 is currently not supported.
- Install OS-specific dependencies:
- Windows: No extra dependencies needed
- Linux:
python3-xlib - OSX:
pyobjc-coreandpyobjc, in that order
- Install pyvisauto using pip:
pip install pyvisauto - Import pyvisauto:
import pyvisauto - Read the Quick Start and API docs
-
Define a full-screen region and assign it to
r:r = pyvisauto.Region() -
Define a region with the upper-left corner at x: 50px and y: 100px, with a width of 500px and height of 300px and assign it to
r:r = pyvisauto.Region(50, 100, 500, 300) -
Find the image
asset1.pngin the defined region, with a similarity score of 0.9:match1 = r.find('asset1.png', 0.8) -
If there has been no visual changes in the defined region, subsequent
findactions can be expedited by passing incached=True:match2 = r.find('asset2.png', 0.9, cached=True) -
find_allandexistscan be used in a similar fashion asfind. -
Hover over a random point in the first returned match:
match1.hover() -
Click a random point in the second returned match:
match2.click() -
One can use
waitandvanishto wait for on-screen changes, detected by the presence or disappearance of an image on-screen, respectively:r.wait('wait_asset1.png', 30, 0.8)The above code will wait for
wait_asset1.pngin the previously defined regionr, with a minimum similarity score of 0.8, waiting a maximum of 30 seconds before throwing aFindFailedexception.vanish, on the other hand, throws aVanishFailedexception. Both exceptions are defined in thepyvisautomodule.