• This repository has been archived on 01/Oct/2019
  • Stars
    star
    221
  • Rank 179,773 (Top 4 %)
  • Language
    Python
  • License
    MIT License
  • Created about 11 years ago
  • Updated about 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A pure python windows automation library loosely modeled after Java's Robot Class.

pyrobot

Hear ye, hear ye!

PyRobot was written for fun over a long weekend. Development on this stopped long ago. If you're looking for a pure Python automation library that is actively developed and works on Windows, OSX, and linux, checkout PyAutoGui!

What is it?

PyRobot is a lightweight, pure Python Windows automation library loosely modeled after Java's Robot Class. It can be used to drive applications that don't provide an API or any way of hooking into them programatically. Good for when you can't (or don't want to) install the great, but a bit hefty, pywin32 libraries.

You can check out a couple of use cases for PyRobot here

Installation

PyRobot is a single Python file. So, you can either download it directly from this github page, or clone the repo:

git clone https://github.com/chriskiehl/pyrobot

Usage

Similar to Java, everything is controlled via a single class.

# Import the robot class from the pyrobot module
from pyrobot import Robot

# create an instance of the class
robot = Robot()

# Launch a program
robot.start_program('program_name') 

# Do cool stuff
location_of_field = (340, 400)
expected_color = (255,255,255)

pixel = robot.get_pixel(location_of_field)
if pixel == (expected_color): 
   robot.set_mouse_pos(location_of_field)
   robot.click_mouse(button='left')
   robot.add_to_clipboard('Hello world! How are ya!')
   robot.paste()


# etc.. 

# If you need to take screengrabs, and have PIL Installed, 
# PyRobot extends the default behavior of PIL by 
# allowing the entire virtual screen to be targeted (rather 
# than just the primary). 

# returns a list of screen rects for all attached devices
monitors_coords = robot.get_display_monitors() 

# Takes a screenshot of the desktop and returns a PIL Image object
im = robot.take_screenshot(monitors_coords[-1]) # Coordinates of last monitor

# You can also do arbitrarily sized boxes
left = 100
top = 430
width = 1000
height = 750

im = robot.take_screenshot((left, top, width, height))

# Save the PIL Image to disk
im.save('my_awesome_screenshot.png', 'png')

# and so on

Updates

  • Added ability to read data from the clipboard.

      my_var = robot.get_clipboard_data()
    
  • convenience method press_and_release

       robot.press_and_release('caps_lock')
    
  • Added Key class

      from pyrobot import Robot, Keys
      robot = Robot() 
      
      robot.press_and_release(Keys.forward_slash)
    

Doc

Mouse

Method Summary
get_mouse_pos() Returns tuple of current mouse coordinates
set_mouse_pos(x, y) Moves mouse pointer to given screen coordinates.
click_mouse(button) Simulates a full mouse click. One down event, one up event.
button can be 'Left', 'right', or 'middle'
double_click_mouse(button) Two full mouse clicks. One down event, one up event.
move_and_click(x,y,button) convenience function: Move to coordinates and click mouse
mouse_down(button) Presses one mouse button.
button can be 'Left', 'right', or 'middle'
mouse_up(button) Releases mouse button.
button can be 'Left', 'right', or 'middle'
scroll_mouse_wheel(direction, clicks) Scrolls the mouse wheel either 'up' or 'down' X number of 'clicks'.                                

Keys

Method Summary
key_press(key) Presses a given key.
Input: string or Keys.* constant
key_release(key) Releases a given key.
Input: string or Keys.* constant
press_and_release() Simulates pressing a key: One down event, one release event                                                                            

Clipboard

Method Summary
add_to_clipboard(string) Copy text into clip board for later pasting.
clear_clipboard() Clear everything out of the clipboard
get_clipboard_data() Retrieves text from the Windows clipboard as a String
paste() Pastes the contents of the clipboard                                                                                                                                                                                         

Screen

Method Summary
get_display_monitors() Enumerates and returns a list of virtual screen coordinates for the attached display devices
output = [
    (left, top, right, bottom), # Monitor 1
    (left, top, right, bottom) # Monitor 2
    # etc...
]
get_pixel(x, y) Returns the pixel color tuple(R,G,B) of the given screen coordinate
take_screenshot(bounds=None) NOTE: REQUIRES PYTHON IMAGE LIBRARY
Takes a screenshot of the entire desktop and returns it as a PIL Image object.

Use with get_display_monitors to target a specific screen, or pass in a tuple consisting of (left, top, width, height).                                                                                             

Misc

Method Summary
sleep(duration) Pauses the robot for duration number of seconds.
start_program(full_path) Launches a windows application.
Input type: string
type_backwards(input_string, delay=.05) Types right to left. Because why not!
type_string(input_string, delay=.005) Convenience function for typing out strings.
delay = time between keystrokes                                                                                                                                                                           

Special take_snapshot Note

Being that Python has no built in Image library (that I know of), it seemed of little use to include a snapshot method which simply saves the picture to disk. For 90% of program automation, I find that querying pixels works fairly well (e.g. robot.get_pixel). However, if you need to do more advanced display searching, or want to do template matching, you'll need an external library. So there is a method in there to contruct a PIL Image object. It just, of course, requires that PIL be installed. Other than that, dependency free! :-)

TODO

  • Allow specific window/program targeting so that relative coordinates can be used while scripting.

Contact

Feature request? Bug? Hate it?
Drop me a line at [email protected], or on Twitter @thechriskiehl

More Repositories

1

Gooey

Turn (almost) any Python command line program into a full GUI application with one line
Python
20,574
star
2

GooeyExamples

Example programs to Demonstrate Gooey's functionality
304
star
3

re-wx

A library for building modern declarative desktop applications in WX.
Python
132
star
4

Burrito-Bot

Python bot to play Burrito Bison
Python
86
star
5

home-theater-calculator

Set yo shiz up right
PureScript
79
star
6

Deoplice

Very spicy additions to Lombok's annotations
Java
52
star
7

Dropler

A drag and drop Image upload plugin for CKEditor
JavaScript
34
star
8

Clever-Skype

Turing test (or troll) your friends! CleverSkype connects the output of Skype's chat to cleverbot.com
Python
19
star
9

ArgDoc

A documentation generator (of the aesthetic variety) for command line programs
18
star
10

GooeyVideo

A small collection of FFMPEG tools which I use while working on Gooey
Python
15
star
11

OldBlog

Code dump from various blog posts.
Python
15
star
12

DoNotStarveBackup

Backup Utility for automatically managing and restoring the Don't Starve save files
Java
10
star
13

MyBlog

Personal blog
Clojure
8
star
14

bitminer

Bitcoin Mining for Fun and No Profit
Clojure
7
star
15

GooeyPackager

The easiest way to transform your Gooey powered scripts into standalone executables
Python
4
star
16

Data-Oriented-Programming-In-Java-Book

Source code for Data Oriented Programming in Java
Java
4
star
17

SavingOverIt

A degenerate tool for saving your progress in the game Getting Over It
Python
3
star
18

Panelizomaticizer3000

Surely, It goes without saying
Java
3
star
19

Gooey-Builder

Generate Build Specs for Gooey!
JavaScript
2
star
20

Google-DoodleBots

Fun lunch break projects :)
Python
1
star
21

react-tabs

Simple tab components for React
JavaScript
1
star
22

google-appengine-wx-launcher

Automatically exported from code.google.com/p/google-appengine-wx-launcher
Python
1
star
23

Whombot

All the pogo.com points you never wanted..!
Python
1
star
24

PythonMeetup

Repo for the meetup puzzle
Python
1
star
25

smartkeys.js

IntelliJ style Smart Keys in the Browser!
JavaScript
1
star
26

color-distance-tool

A hyper-specific tool for selecting arbitrary colors from the screen and comparing them in various color spaces.
Python
1
star
27

quick-validate

One click HTML validation for all files in your project folder
Python
1
star
28

DoNotStarveBackupExecutable

Executable file for the Don't Starve Backup Util
1
star