Como se controla o cursor do mouse em Python, ou seja, move-o para determinada posição e clica em Windows?
Como se controla o cursor do mouse em Python, ou seja, move-o para determinada posição e clica em Windows?
Respostas:
Testado no WinXP, Python 2.6 (3.x também testado) após a instalação do pywin32 (pywin32-214.win32-py2.6.exe no meu caso):
import win32api, win32con
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,10)
win32api.SetCursorPos((x,y))
é melhor ser substituído win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))
na minha experiência para uma melhor integração com outros aplicativos, como jogos.
python3.x
obras também, fique à vontade para editar a resposta
Tente com o módulo PyAutoGUI . É multiplataforma.
pip install pyautogui
E entao:
import pyautogui
pyautogui.click(100, 100)
Também possui outros recursos:
import pyautogui
pyautogui.moveTo(100, 150)
pyautogui.moveRel(0, 10) # move mouse 10 pixels down
pyautogui.dragTo(100, 150)
pyautogui.dragRel(0, 10) # drag mouse 10 pixels down
Isso é muito mais fácil do que passar por todas as coisas do win32con.
Você pode usar win32api
ou ctypes
module para usar as APIs do win32 para controlar o mouse ou qualquer outra interface gráfica.
Aqui está um exemplo divertido para controlar o mouse usando o win32api:
import win32api
import time
import math
for i in range(500):
x = int(500+math.sin(math.pi*i/100)*500)
y = int(500+math.cos(i)*100)
win32api.SetCursorPos((x,y))
time.sleep(.01)
Um clique usando ctypes:
import ctypes
# see http://msdn.microsoft.com/en-us/library/ms646260(VS.85).aspx for details
ctypes.windll.user32.SetCursorPos(100, 20)
ctypes.windll.user32.mouse_event(2, 0, 0, 0,0) # left down
ctypes.windll.user32.mouse_event(4, 0, 0, 0,0) # left up
SetCursorPos
?
Outra opção é usar o pacote AutoPy de plataforma cruzada . Este pacote possui duas opções diferentes para mover o mouse:
Este trecho de código moverá instantaneamente o cursor para a posição (200.200):
import autopy
autopy.mouse.move(200,200)
Se você deseja que o cursor se mova visivelmente pela tela para um determinado local, use o comando smooth_move:
import autopy
autopy.mouse.smooth_move(200,200)
Confira a plataforma cruzada PyMouse: https://github.com/pepijndevos/PyMouse/
tap space
e tap screen shot key
usando PyUswerInput?
PyUserInput
está quebrado. Não posso dizer se funciona bem ou não, porque nem consigo instalá-lo devido a dependências quebradas.
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Fonte: Mouse Python movido em 5 linhas de código (somente Linux) .
Xlib.ext.xtest.fake_input(d, X.ButtonPress, 1); d.sync(); time.sleep(0.001); Xlib.ext.xtest.fake_input(d, X.ButtonRelease, 1); d.sync();
a chamada sleep () entre a imprensa e o release pode ou não ser necessária, dependendo do aplicativo de destino.
Pynput é a melhor solução que encontrei, tanto para Windows quanto para Mac. Super fácil de programar e funciona muito bem.
Por exemplo,
from pynput.mouse import Button, Controller
mouse = Controller()
# Read pointer position
print('The current pointer position is {0}'.format(
mouse.position))
# Set pointer position
mouse.position = (10, 20)
print('Now we have moved it to {0}'.format(
mouse.position))
# Move pointer relative to current position
mouse.move(5, -5)
# Press and release
mouse.press(Button.left)
mouse.release(Button.left)
# Double click; this is different from pressing and releasing
# twice on Mac OSX
mouse.click(Button.left, 2)
# Scroll two steps down
mouse.scroll(0, 2)
Função rápida e suja que clique com o botão esquerdo onde quer que esteja clicks
no Windows 7 usando a ctypes
biblioteca. Não são necessários downloads.
import ctypes
SetCursorPos = ctypes.windll.user32.SetCursorPos
mouse_event = ctypes.windll.user32.mouse_event
def left_click(x, y, clicks=1):
SetCursorPos(x, y)
for i in xrange(clicks):
mouse_event(2, 0, 0, 0, 0)
mouse_event(4, 0, 0, 0, 0)
left_click(200, 200) #left clicks at 200, 200 on your screen. Was able to send 10k clicks instantly.
A partir de 2020 , você pode usar o mouse :
import mouse
mouse.move("500", "500")
mouse.left_click()
Recursos
Se você deseja mover o mouse, use o seguinte:
import pyautogui
pyautogui.moveTo(x,y)
Se você deseja clicar, use o seguinte:
import pyautogui
pyautogui.click(x,y)
Se você não tiver pyautogui
instalado, você deve ter o python conectado ao CMD. Vá para o CMD e escreva:pip install pyautogui
Isso será instalado pyautogui
no Python 2.x.
Para o Python 3.x, você provavelmente precisará usar pip3 install pyautogui
or python3 -m pip install pyautogui
.
pyautogui.moveTo(x, y)
porque move()
move o cursor em relação à sua posição atual.
moveTo()
move para um local absoluto, enquanto move()
se move em relação ao local atual do cursor.
Outra alternativa seria a biblioteca de mouses , eu pessoalmente a uso, pois é relativamente simples e multiplataforma.
Aqui está como você pode usá-lo:
import mouse
# move 100 right and 100 down with a duration of 0.5 seconds
mouse.move(100, 100, absolute=False, duration=0.5)
# left click
mouse.click('left')
# right click
mouse.click('right')
Aqui está a fonte: Como controlar o mouse em Python
A resposta aceita funcionou para mim, mas era instável (às vezes os cliques não seriam registrados), então eu adicionei um MOUSEEVENTF_LEFTUP adicional . Então estava trabalhando de forma confiável
import win32api, win32con
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,10)
muito fácil 1- instalar o pakage:
pip install mouse
2- adicione biblioteca ao projeto:
import mouse
3- use-o por exemplo:
mouse.right_click()
neste URL, descreva todas as funções que você pode usar: