asweigart / pyautogui Goto Github PK
View Code? Open in Web Editor NEWA cross-platform GUI automation Python module for human beings. Used to programmatically control the mouse & keyboard.
License: BSD 3-Clause "New" or "Revised" License
A cross-platform GUI automation Python module for human beings. Used to programmatically control the mouse & keyboard.
License: BSD 3-Clause "New" or "Revised" License
such like activate window and move window
autohotkey has these methods ,
WinActivate, [ WinTitle, WinText, ExcludeTitle, ExcludeText]
WinWait, WinTitle, WinText, Seconds [, ExcludeTitle, ExcludeText]
can pyautogui support background operation?
I'll have to look into how other keyboards produce characters such as é or あ. PyAutoGUI currently uses virtual key codes (the "VK" stuff in the source) to do this, but this needs to be expanded to other characters.
Today I was trying your module namely "pyautogui.locateOnScreen('Summary.png')"
I took a screenshot of the button I wanted to click, but my program was miss clicking by some pixels .
the fix to this issue in Windows 8.1 -> Dispaly -> Change the size of all times -> Small
by default in windows 8.1 Change the size of all times is Medium
To move the mouse on Windows, PyAutoGUI uses the mouse_event API, which is deprecated. We should change it to use SendInput. fx-kirin pointed out in PR 22 #22 that because mouse_event doesn't cause the "last error" to be updated, the GetLastError() call is misleading at best.
Additional info:
From https://msdn.microsoft.com/en-us/library/windows/desktop/ms680627%28v=vs.85%29.aspx :
From checking out the docs for mouse_event, it seems that it doesn't set the "last error", so really this code shouldn't be calling GetLastError() at all. Since mouse_event is deprecated, this code should be calling SendInput(), which does modify the last error. This would make this commit's addition of SetLastError() unneeded.
What we should probably do is call SendInput() to correct the original problem. Thanks for pointing this out! I'll open an issue for it.
SendInput doc:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx
Update README's dependency list:
When using pyautogui.click() functions in Kubuntu with a left-handed mouse set the mouse buttons are reversed. In other words, when calling pyautogui.click() a right-click is sent rather than a left click.
I've worked around this by passing the button=3 parameter to the click() function but I thought I'd point it out.
This also affects kde running on debian 8.
kev.
I have a website where there are multiple checkboxes or a multiple very small images but when I run the loop it only runs till 11 and then stops. Please find the code and result below
Loop :
for tick in pyautogui.locateAllOnScreen('ticket.png'):
print tick
Result : C:\Users\ZEI\Desktop\study\zii automation>python click.py
(272, 251, 11, 11)
(272, 313, 11, 11)
(272, 375, 11, 11)
(272, 431, 11, 11)
(272, 513, 11, 11)
(272, 580, 11, 11)
(272, 647, 11, 11)
(272, 714, 11, 11)
(272, 770, 11, 11)
(272, 826, 11, 11)
There are around 70 check boxes and it only shows this much.
Hi,
I was looking at Roadmap and I would like to help with the getWindows() method.
pyautogui.getWindows() # returns a dict of window titles mapped to window IDs
Is somebody dealing with that?
Maybe I can help or do a contribution, or, on the other hand, has someone info or a link to dive into that problem ?
for y in range(landscapeRegion[1], landscapeRegion[1] + landscapeRegion[3], 40):
for x in range(landscapeRegion[0], landscapeRegion[0] + landscapeRegion[2], 40):
bot.moveTo(x, y, 0)
bot.click(button='right')
The moveTo() takes about half a second between moves. The move is instant but it will sit at it's destination for half a second even though the moveTo is being called rapidly.
OS: Mac 10.9.5
python version: 2.7.9
The x value that is return is approximately twice a large as it should be (pyautogui.click(x/2,y) clicks on my item).
Some of the characters like '"' or '[' do not work on Windows. For some reason, they are commented out in _pyautogui_win.py lines 230-251. Why is this?
This spiral drawing program (which uses mouse drags to draw in MSPaint) results in a "error 5 access is denied" error on Windows 10.
import pyautogui
pyautogui.click() # click to put drawing program in focus
distance = 200
while distance > 20:
print(distance, 0)
pyautogui.dragRel(distance, 0, duration=0.1) # move right
distance = distance - 20
print(0, distance)
pyautogui.dragRel(0, distance, duration=0.1) # move down
print(-distance, 0)
pyautogui.dragRel(-distance, 0, duration=0.1) # move left
distance = distance - 20
print(0, -distance)
pyautogui.dragRel(0, -distance, duration=0.1) # move up
management clipboard lack, needed to overcome the problem of type special characters like ® and ™.
Hello,
Tween was not working for me and found that the value tween function was receiving was not within the 0..1 range.
I have not looked further for the why and quickly modified the code to this:
if duration <= MINIMUM_DURATION:
print("duration check")
if moveOrDrag == 'move':
print("move")
platformModule._moveTo(x, y)
else:
print("drag")
platformModule._dragTo(x, y, button)
return
tweenfinished = False
starttime = time.time()
while(tweenfinished == False):
_failSafeCheck()
elapsedtime = time.time() - starttime
tweenvalue = min(1, max(0, float(elapsedtime) / float(duration)))
pointOnLine = tween(tweenvalue) # range 0 / 1
tweenX, tweenY = getPointOnLine(startx, starty, x, y, pointOnLine)
tweenX, tweenY = int(tweenX), int(tweenY)
if moveOrDrag == 'move':
platformModule._moveTo(tweenX, tweenY)
else:
# only OS X needs the drag event specifically
platformModule._dragTo(tweenX, tweenY, button)
if (elapsedtime < duration) :
time.sleep(0.001)
else :
tweenfinished = True
# TODO: Test range. Should not be necessary with previous change??
# Ensure that no matter what the tween function returns, the mouse ends up
# at the final destination.
#if moveOrDrag == 'move':
# platformModule._moveTo(x, y)
#else:
# platformModule._dragTo(x, y, button)
This would probably require a second look and more test before such fix could be submited as a pull request but it's working well for what I need (and I'm a little bit pressured by time).
Thanks for the great library!
Eric
Steps to reproduce:
Expected:
Additional Note:
ImportError: No module named Xlib.display
Steps to reproduce:
Traceback:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/foobar/lib/python2.7/site-packages/pyautogui/__init__.py", line 51, in <module>
import pyautogui._pyautogui_x11 as platformModule
File "/tmp/foobar/lib/python2.7/site-packages/pyautogui/_pyautogui_x11.py", line 6, in <module>
from Xlib.display import Display
ImportError: No module named Xlib.display
I did a screenshot of my screen on mac (entire display) and then cropped a small area. Used those images on the locate function always returns None.
print pyautogui.locate('button.png', 'screengrab.png', grayscale=True)
It makes the widget disappear without any choice after some seconds...
Hello,
That's could be considered a issue or not depending of intented use of pyautogui but if this can be of any help to someone else...
I wanted to record my application automated session (web app driven with Selenium which does not really move cursor btw, this is where pyautogui helped me) with Camtasia to add some visual effets. I was a bit in panic when I realised that cursor where not recorded. I played with the Camtasia options, gave a second try to Tanida Demo Builder (that I actually prefer over Camtasia) and with some luck found (by first noticing that the cursor movements from physical mouse where recorded) that the problem was missing low-level events (I was trying to find if there was other windows call for cursor move and found the answer here: http://stackoverflow.com/questions/1181464/controlling-mouse-with-python
I hacked it quick in _pyautogui_win.py by adding "import win32api, win32con" and changing def _moveTo(x, y): to:
#ctypes.windll.user32.SetCursorPos(x, y)
win32api.SetCursorPos((x,y)) # Bug camtasia cursor recording test.
win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, int(x/1920*65535.0), int(y/1080*65535.0))
This was just enough to help me get through my task.
Definitively not a production ready solution as the code seem to be crashing when i get the cursor in my second monitor (at left of my main monitor where I was do the recording)!
ps: I noticed two other problems that are also borderline "issue":
Keyboard mapping assume US. I was not able to generate french "é". Hacked this one in the commented out section of the mapping. Selenium can send a range of text and handle the unicode better but in other ways I like how pyautoguy can use a delay to smooth the input.
Anyway, thanks again for your great lib,
Eric
Hi,
locateAll()
assumes that needleImage
is a Python's str
. It can however also be unicode
which is valid string for open()
.
At least you should properly check and report the exception. Right now, needleImage
stays as unicode string which results in very cryptic error messages.
volumeup,
volumedown,
and volumemute and some other keys aren't working.
using MACOSX 10.10
python 2.7.10
Hi,
When I am trying multiple operations like click(), rightclick(), it is giving Windows Error: 5 , Access Denied.
Please help resolve.
Error:
import pyautogui
pyautogui.click(100,100)
Traceback (most recent call last):
File "", line 1, in
File "build\bdist.win-amd64\egg\pyautogui__init__.py", line 285, in click
platformModule._click(x, y, 'left')
File "build\bdist.win-amd64\egg\pyautogui_pyautogui_win.py", line 437, in _click
_sendMouseEvent(MOUSEEVENTF_LEFTCLICK, x, y)
File "build\bdist.win-amd64\egg\pyautogui_pyautogui_win.py", line 480, in _sendMouseEvent
raise ctypes.WinError()
WindowsError: [Error 5] Access is denied.
Hi there,
Ran into an issue where a WindowsError: [Error 977] Overlapped I/O operation is in progress is thrown when trying to run the following code....
import pyautogui
import pypyodbc as pyodbc
def connect_to_wp():
db = pyodbc.connect("DSN=db;UID=foo;PWD=bar")
return db
def send_query(sql, db):
q = db.cursor()
q.execute(sql)
return q
def get_number_of_registers(location):
''' a function to get the number of registers for a location'''
sql = "SELECT COUNT(*) FROM POS_Registers INNER JOIN Pos_Setup ON POS_Registers.POSID = Pos_Setup.POSID INNER JOIN Location on Pos_Setup.LocationID = Location.LocationID WHERE Location.ShortDescription = '" + location + "'"
db = connect_to_wp()
q = send_query(sql, db)
for row in q:
numberOfRegisters = row[0]
return numberOfRegisters
def create_cashier_account(location, numberOfRegisters):
# click on a blank spot in wpadmin to put focus there
# for this to work you need to have modules 112 & 322
# open with 112 in the forground
pyautogui.moveTo(922, 181)
pyautogui.click()
location = '1ST GEORGE'
numberOfRegisters = get_number_of_registers(location)
create_cashier_account(location, numberOfRegisters)
Here's the whole output:
Traceback (most recent call last):
File "C:\Users\Kevin Lucas\Desktop\bug.py", line 35, in <module>
create_cashier_account(location, numberOfRegisters)
File "C:\Users\Kevin Lucas\Desktop\bug.py", line 31, in create_cashier_account
pyautogui.click()
File "C:\Python27\lib\site-packages\pyautogui\__init__.py", line 285, in click
platformModule._click(x, y, 'left')
File "C:\Python27\lib\site-packages\pyautogui\_pyautogui_win.py", line 437, in
_click
_sendMouseEvent(MOUSEEVENTF_LEFTCLICK, x, y)
File "C:\Python27\lib\site-packages\pyautogui\_pyautogui_win.py", line 480, in
_sendMouseEvent
raise ctypes.WinError()
WindowsError: [Error 997] Overlapped I/O operation is in progress.
If I set a value for 'numberOfRegisters' it works fine but pulling from the database produces the error. The call to click() does execute but it dumps out right after.
This is on win7 with python 2.7.10 with piautogui installed from pip 0.9.30.
This seems to lose the ability to do any automation:
from multiprocessing import Process
p = Process(pyside_app.main()) # my PySide app
p.start()
This works fine:
p = subprocess.Popen([os.path.join('venv', 'Scripts', 'python.exe'), 'pyside_app.py'])
I can post the entire test case if you like.
In the hotkey(*args, **kwargs)
function if you pass a pause
value it will throw this error:
NameError: global name '_pause' is not defined
Here is the code that is causing the error
if kwargs.get('pause', None) is not None and _pause:
time.sleep(pause)
elif kwargs.get('_pause', True) and PAUSE != 0:
time.sleep(PAUSE)
Since there is no default _pause
variable like all of the other public functions it looks for a global _pause
even if you pass _pause=True
it still looks for a global _pause
since it is not being retrieved from **kwargs
. Also the above code is essentially just doing what _autoPause()
does so a suggestion for fixing the bug as well as be more consistent with how the other functions handle pausing.
_autoPause(kwargs.get('pause', None), kwargs.get('_pause', True))
I used pyautogui to do a bit of fuzz-testing on a game, and noted that the keyboard output starts to become garbage after a short while if using an interval of 0.
Check the output for this: (python 3.5, windows10)
import pyautogui, time
time.sleep(10);
stuff = '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f'
pyautogui.typewrite(stuff, interval=0)
Hello,
I really hope this is just me, but I can't select text in windows 7, python 3.4 using v0.9.30:
import pyautogui as p
import time as t
t.sleep(3)
p.keyDown('shift')
p.press('left')
p.keyUp('shift')
also:
p.hotkey('shift', 'left')
doesn't work...
The sleep is to give me time to manually click into notepad where I've some text prepared, but am i missing something??
Running the method
import pyautogui
def render(self):
screenWidth, screenHeight = pyautogui.size()
currentMouseX, currentMouseY = pyautogui.position()
pyautogui.moveTo(100, 150)
pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.tweens.easeInOutQuad) # use tweening/easing function to move mouse over 2 seconds.
pyautogui.press('esc')
just to start to experiment with this package. I can't get further than the call to pyautogui.position()
without a crash. The error produced is:
File "C:\Projects\unlock\unlock\view\femg_view.py", line 13, in render
currentMouseX, currentMouseY = pyautogui.position()
File "C:\Projects\unlock-redistributable\WinPython-32bit-3.3.5.0\python-3.3.5\lib\site-packages\pyautogui\__init__.py", line 106, in position
posx, posy = platformModule._position()
File "C:\Projects\unlock-redistributable\WinPython-32bit-3.3.5.0\python-3.3.5\lib\site-packages\pyautogui\_pyautogui_win.py", line 352, in _position
ctypes.windll.user32.GetCursorPos(ctypes.byref(cursor))
ctypes.ArgumentError: argument 1: <class 'TypeError'>: expected LP_POINT instance instead of pointer to POINT
I'm new to this package, so I'm not too sure how to describe what's happening. The on-screen rendering is mostly being handled by Pyglet. I'm trying to add programmatic mouse control, but obviously running into trouble.
Python 3.3.5.0 (32 bit) running on windows 7 (64 bit) with the following packages installed:
['astroid==1.0.1',
'colorama==0.2.7',
'cx-freeze==4.3.2',
'cython==0.20.1',
'docutils==0.11',
'fonttools==2.3',
'formlayout==1.0.15',
'guidata==1.6.1',
'guiqwt==2.3.2',
'h5py==2.2.1',
'ipython==2.0.0',
'jinja2==2.7.2',
'logilab-common==0.61.0',
'mahotas==1.1.0',
'markupsafe==0.18',
'matplotlib==1.3.1',
'networkx==1.8.1',
'nose==1.3.1',
'numexpr==2.3.1',
'numpy==1.8.1',
'pandas==0.13.1',
'patsy==0.2.1',
'pillow==2.4.0',
'polygon==3.0.5',
'psutil==2.1.0',
'psycopg2==2.5.3',
'pyaudio==0.2.8',
'pyautogui==0.9.26',
'pydaqmx==1.3',
'pyglet==1.2.2',
'pygments==1.6',
'pyhdf==0.8.3',
'pylint==1.1.0',
'pymsgbox==1.0.3',
'pyopengl==3.0.2',
'pyparsing==2.0.1',
'pyqtdesignerplugins==1.1',
'pyqtdoc==4.8.4',
'pyreadline==2.0',
'pyscreeze==0.1.5',
'pyserial==2.7',
'pyside==1.2.1',
'python-dateutil==2.2',
'pytweening==1.0.1',
'pytz==2013.9',
'pyuserinput==0.1.9',
'pywavelets==0.3.0',
'pywin32==218.5',
'pyzmq==14.0.1',
'reportlab==3.0',
'scidoc==1.8.0',
'scikit-image==0.9.3',
'scikit-learn==0.14.1',
'scipy==0.13.3',
'simplejson==3.3.3',
'six==1.6.1',
'sphinx==1.2.2',
'spyder==2.3.0beta2',
'sqlalchemy==0.9.4',
'statsmodels==0.5.0',
'sympy==0.7.5',
'tables==3.1.1',
'tornado==3.2',
'ttfquery==1.0.4',
'virtualenv==1.11.6',
'vispy==0.2.1',
'vpython==5.74',
'winpython==1.0',
'xlrd==0.9.3']
Hi!
So I have a MacBook Pro retina running windows 8.1 on bootcamp.
And the actual screen resolution is 2880 x 1800, but pyautogii.size() returns 1920 x 1080.
I can't seem to find documentation about how to set these values nor have I been able to guess them.
I believe it has to do with the retina scaling, but as of right now the pointer is constantly thrown off.
Any help would be greatly appreciated!
Hi, I thought I'd let you know that the hotkey()
function doesn't always work on Windows 7. I managed to fix this issue in a similar keyboard automation script I was working on myself by adding the extended-key flag into the ctypes.windll.user32.keybd_event()
function. For example, the following executes SHIFT + DOWN properly, which doesn't happen when you use hotkey('shift', 'down')
in pyautogui:
ctypes.windll.user32.keybd_event(0x10, 0, 0, 0) # SHIFT
ctypes.windll.user32.keybd_event(0x28, 0, 1, 0) # DOWN, third argument is KEYEVENTF_EXTENDEDKEY
ctypes.windll.user32.keybd_event(0x28, 0, (1 | 2), 0) # DOWN
ctypes.windll.user32.keybd_event(0x10, 0, 2, 0) # SHIFT
I'm not completely sure why this needs the extended-key flag to work even though extended keys don't need the flag when used in isolation, but it makes certain useful hotkeys work properly. Additionally, adding the extended-key flag to key presses that don't need it doesn't seem to cause any issues, so the following also works:
ctypes.windll.user32.keybd_event(0x10, 0, 1, 0) # SHIFT
ctypes.windll.user32.keybd_event(0x28, 0, 1, 0) # DOWN
ctypes.windll.user32.keybd_event(0x28, 0, (1 | 2), 0) # DOWN
ctypes.windll.user32.keybd_event(0x10, 0, (1 | 2), 0) # SHIFT
Therefore, the _keyDown
and _keyUp
functions could probably be modified to include the extended-key flag.
Also, the current online documentation for message box functions includes defaultValue
as an optional parameter when the functions actually accept default
instead.
The page on keyboard control functions explains that it's possible to pass a list of keys into press()
but then gives an example where keyDown()
receives the list ['left', 'left', 'left']
, which results in an AttributeError because it tries to use .lower()
on the list.
I hope this submission is helpful!
Hi... we are piloting using pyautogui in the Behave framework; works great in Windows and Ubuntu, but on all MacOS machines, all locate calls are returning None, and a request to capture a screenshot at [X,Y, A, B] is always returning the entire screenshot. Tracing the code, because of that, I suspect that the problem is something to do with the coordinates, not really the graphics part, but either way, no luck with Mac and I need to do cross platform testing. Any suggestions greatly appreciated.
David
When I use keyDown in my script it does the same thing as the press function. I've tested on Windows 8.1 and 7. Has anyone else had this issue?
My example program that is not working correctly: https://github.com/rdugue/CheesePad/blob/master/CheesePad.py
Is it possible to scroll less then 1 tick? pyautogui.scroll(1)
scrolls about 9 times as much as my mouse.
The title says it all. I'd like to be able to locate elements on the screen using needle images containing completely transparent pixels. The locate functions should simply ignore such transparent pixels when executed, essentially handling them as wildcards.
A case where this currently fails:
import PIL.Image
import pyautogui
BANANAS_IMAGE = PIL.Image.open('bananas.png')
def main():
game_region_image = PIL.Image.open('game_region.png')
for match in pyautogui.locateAll(BANANAS_IMAGE, game_region_image):
print match
if __name__ == '__main__':
main()
Hi all,
The doubleClick() function does not seem to work in OSX:
Downloaded PyAutoGui from: https://pypi.python.org/pypi/PyAutoGUI
Installed via "sudo python setup.py install".
click() (once), rightClick() and moveRel() have been tested and seem to work properly.
doubleClick() seems to behave as a single click(). A call to click() with multiple clicks (set to 2) and different intervals (0.01, 0.1, 0.25, 0.5) have the same response. Setting PAUSE to 0 or the default 0.1 also have no effect. No error messages are given
Has anybody an idea what's going on?
'menu' key lack.
According to xev: keycode 135 (keysym 0xff67, Menu)
Hello,
I was going through basic usage of pyautogui and I found that the command
pyautogui.size()
causes my python interpreter to freeze. I tried using it in a file and that also hung. Is this a problem with Retina, OS X, laptops, etc?
Note: the other commands seem to be working properly -- only size is giving me trouble
Thanks
Hello!
My Pyautogui typewriter doesn't want to type letters. For example when I'm executing
pyautogui.typewrite("abc123")
only "123" appears. I have a Windows 7 machine, Python 3.5 and Pyautogui 0.9.33. In what the problem can consist in? Any suggestions will be greatly appreciated!
Hi there,
I've been trying for a while to make this work. When I call locateOnScreen or locateCenterOnScreen I always get the following error:
screenshotIm.fp.close() # Screenshots on Windows won't have an fp since they came from ImageGrab, not a file.
AttributeError: 'NoneType' object has no attribute 'close'
Trying to use the 'enter' key on Ubuntu throws an error. Using 'return' works just fine. Using 'enter' on OS X also worked fine.
In [1]: import pyautogui
<class 'Xlib.protocol.request.QueryExtension'>
In [2]: pyautogui.press('enter')
X protocol error:
<class 'Xlib.error.BadValue'>: code = 2, resource_id = 0, sequence_number = 10, major_opcode = 132, minor_opcode = 2
X protocol error:
<class 'Xlib.error.BadValue'>: code = 2, resource_id = 0, sequence_number = 12, major_opcode = 132, minor_opcode = 2
In [3]: pyautogui.press('return')
In [4]: !lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.10
Release: 14.10
Codename: utopic
Hi!
Love this module. I am working on developing some pieces that are running on instances in the AWS cloud EC2 servers. I would like to use some of the autogui features as a web-console workaround. But I get Xlib errors. Is there any workaround for them? faking a VGA output? I am able to get a desktop via VNC.
Thanks!
I do have a strange problem, using a German keyboard layout.
pyautogui.typewrite("!"#$%&()+H")
!"'$%&()*H
Which means '#' results in an ' and '+' results in an *.
This is quite strange, as all other characters seem to work.
The software, I'm targeting to, is very dumb. It does not accept 'CTRL'+'V' nor 'ALT'+'35' in it's text fields, so I really have to simmulate single keystrokes. Unfortunately I do need the Hash # sign to trigger some actions.
OS: Windows 8; Python: V3.4.3
Are there any ideas for a work around? Anny suggestions appreciated!
User on Windows 7, Python 3.4, running PyAutoGUI 0.9.30 and a French "AZERTY" keyboard reported being unable to simulate pressing :
Running the unit tests, they got these results:
D:\Dropbox\Software\Python>test
......
a
ba
.Hello world§
Faxyz
abxc
c
xabcz
.Hello world§
F
Traceback (most recent call last):
File "D:\Dropbox\Software\Python\test.py", line 394, in test_typewrite
self.assertEqual(response, 'Hello world!')
AssertionError: 'Hello world§' != 'Hello world!'
Traceback (most recent call last):
File "D:\Dropbox\Software\Python\test.py", line 426, in test_typewrite_slow
self.assertEqual(response, 'Hello world!')
AssertionError: 'Hello world§' != 'Hello world!'
Ran 16 tests in 33.566s
FAILED (failures=2)
D:\Dropbox\Software\Python>
PyAutoGUI does not support moving the mouse across monitors currently. This feature should be added.
I see you have this on the Todo. Just wondering when?
I can not use click function in Windows 8.1. I get the follow message:
Traceback (most recent call last):
File "<pyshell#6>", line 1, in
pyautogui.click(100,100)
File "C:\Python34\lib\site-packages\pyautogui__init__.py", line 362, in click
platformModule._click(x, y, 'left')
File "C:\Python34\lib\site-packages\pyautogui_pyautogui_win.py", line 437, in _click
_sendMouseEvent(MOUSEEVENTF_LEFTCLICK, x, y)
File "C:\Python34\lib\site-packages\pyautogui_pyautogui_win.py", line 480, in _sendMouseEvent
raise ctypes.WinError()
PermissionError: [WinError 5] Acesso negado.
I guess the problem come out on Windows 8.1. The point is, can we do something to solve this?
I'm having troubles trying to copy text from a remote desktop window and pating in a local text editor. Can this library handle this?
I found it doesn't even handle any keyboard method on the remote desktop.
Hello,
I discovered pyautogui today as a great replacement for SendKeys and pywinauto. Unfortunately for me I noticed typewrite and other keyboard functions returns wrong characters on win7 with a different keyboard (dvorak) layout. I tried a temporary swap with win32api.LoadKeyboardLayout('00000409',1) but it did not solve the problem.
Best regards,
your call function with 0 scan code
ctypes.windll.user32.keybd_event(vkCode, 0, KEYEVENTF_KEYUP, 0)
SDL 2.0+ windows application can`t correctly handle virtual keys input.
I propose modify send keys code as follows:
scanCodeShift = ctypes.windll.user32.MapVirtualKeyA(0x10, 0x0) # 0x10 is VK_SHIFT, 0x0 is MAPVK_VK_TO_VSC
scanCodeKey = ctypes.windll.user32.MapVirtualKeyA(vkCode, 0)
if needsShift:
ctypes.windll.user32.keybd_event(0x10, scanCodeShift, 0, 0) # 0x10 is VK_SHIFT
ctypes.windll.user32.keybd_event(vkCode, scanCodeKey, KEYEVENTF_KEYUP, 0)
if needsShift:
ctypes.windll.user32.keybd_event(0x10, scanCodeShift, KEYEVENTF_KEYUP, 0) # 0x10 is VK_SHIFT
and for _keyDown function:
scanCodeShift = ctypes.windll.user32.MapVirtualKeyA(0x10, 0x0) # 0x10 is VK_SHIFT, 0x0 is MAPVK_VK_TO_VSC
scanCodeKey = ctypes.windll.user32.MapVirtualKeyA(vkCode, 0)
if needsShift:
ctypes.windll.user32.keybd_event(0x10, scanCodeShift, 0, 0) # 0x10 is VK_SHIFT
ctypes.windll.user32.keybd_event(vkCode, scanCodeKey, 0, 0)
if needsShift:
ctypes.windll.user32.keybd_event(0x10, scanCodeShift, KEYEVENTF_KEYUP, 0) # 0x10 is VK_SHIFT
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.