Git Product home page Git Product logo

pyautogui's People

Contributors

androbin avatar andydam avatar anolir avatar asweigart avatar clach04 avatar cseas avatar denilsonsa avatar hesselm avatar hugoesb avatar jakibaki avatar jayrizzo avatar johnborgmann avatar jose1711 avatar karimk123 avatar kudria avatar liberme avatar mvbentes avatar orlovol avatar pgkos avatar ric2b avatar sneakypete81 avatar snoyes avatar suvanshkumar avatar tbm avatar tcrory avatar teijeong avatar timgates42 avatar undefx avatar velmer avatar zandertaiko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pyautogui's Issues

How can I use the functions those control windows

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?

Does not work for non-American keyboard keys.

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.

Windows 8.1 mouse coordinates, dispay DPI issue

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

On Windows, SendInput should be called instead of the deprecated mouse_event

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

Mouse clicks are reversed when left-handed mouse is set

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.

locateOnAllScreen not working on loop

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.
mcheckbox

Can I help with pyautogui.getWindows() ?

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 ?

PyAutoGui slow calls to moveto() on Mac OS X

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.

Windows 10 "access is denied" error for spiral drawing program.

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

clipboard

management clipboard lack, needed to overcome the problem of type special characters like ® and ™.

Tweening not working as expected (win 7, Python)

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

Windows: if you remote desktop into the PC and exit the remote session, pyautogui doesnt work

Steps to reproduce:

  • have a script running that uses pyautogui
  • from a different PC remote into the pc that is running pyautogui
  • Exit remote desktop

Expected:

  • pyautogui would continue to work as expected
    Actual:
  • gives error "Error Message: PyAutoGUI fail-safe triggered from mouse moving to upper-left corner. To disable this fail-safe, set pyautogui.FAILSAFE to False.;"

Additional Note:

  • if i set it, to False, I get permission error when trying to call click function.
  • If i simply log in physically to the machine that is running pyautogui, everything starts to work

Xlib.display ImportError on Fedora 20

ImportError: No module named Xlib.display

Steps to reproduce:

  1. virtualenv /tmp/foobar
  2. source /tmp/foobar/bin/activate
  3. pip install pyautogui
  4. python -c "import pyautogui"

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

locate function always returns None

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)

Cursor event not posted on windows

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.

    • A "ctypes" conflict when using pyglet at the same time as pyautoguy ( I wanted to use the media player). I think that it's a incompatibiliy of x32 and x64 libs, I will have to check again, maybe I have used the wrong installer...

    Anyway, thanks again for your great lib,

Eric

locateAll() assumes that image file name is str

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.

Multiple operations gives access denied error on windows

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.

Windows 977 Overlapped IO Operation

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.

no automation using multiprocessing.Process

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.

_pause bug in hotkey()

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))

Keyboard input gets messed up.

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

give you some time to crack open notepad

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)

Can't select text

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??

TypeError when attempting to get position on windows 7

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']

Incorrect screen size on Mac

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!

Fixable Hotkey Bug and Small Documentation Issues

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!

Locate and Screenshot functions fail on MacOS

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

finer scroll

Is it possible to scroll less then 1 tick? pyautogui.scroll(1) scrolls about 9 times as much as my mouse.

Support locating needle images with alpha channels

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()

doubleClick() does not work in OS X 10.11.3

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

'menu' key lack.
According to xev: keycode 135 (keysym 0xff67, Menu)

pyautogui.size() on OS X Retina Macbook Pro

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

Pyautogui typewrite types numbers only (EDIT: azerty keyboard issue)

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!

locateOnScreen and locateCenterOnScreen broken on mac

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'

"enter" key does not work on Ubuntu

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

Make PyAutoGUI work on headless AWS.

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!

Some characters are not working with German layout keyboard

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!

Possible French AZERTY keyboard issue

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:

http://pastebin.com/gkHjUFRY

D:\Dropbox\Software\Python>test
......
a
ba
.Hello world§
Faxyz
abxc
c
xabcz
.Hello world§
F

......

FAIL: test_typewrite (main.TestKeyboard)

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!'

  • Hello world§
    ? ^
  • Hello world!
    ? ^

FAIL: test_typewrite_slow (main.TestKeyboard)

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!'

  • Hello world§
    ? ^
  • Hello world!
    ? ^

Ran 16 tests in 33.566s

FAILED (failures=2)

D:\Dropbox\Software\Python>

The click function returns PermissionError [WinError 5]

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?

Hotkeys in remote desktop

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.

Support for non qwerty keyboard layout

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,

keyDown / keyUp don`t send key scancodes in Windows

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.