Você precisa fazer o movimento do mouse no código sem a intervenção do usuário?
rahul
Mais informações seria realmente útil ...
Gabriel Hurley
Eu trabalho no Windows e não uso nenhum kit de ferramentas. Eu sou realmente novo em Python e nunca trabalhei com nenhuma GUI antes. De onde eu começo? Que manual devo ler?
23415 Sasha
2
por que você precisa de um python para fazer isso, você pode fazer isso sozinho? Em uma nota mais séria, porque você precisa dele, qual é o propósito, um pouco mais detalhes seria ótimo
Anurag Uniyal
2
Apenas para sua informação, se você estiver usando isso para impedir o bloqueio da máquina, poderá estar violando a política de segurança da empresa ou das organizações, pois é um meio de burlar as propriedades de bloqueio automático do computador. Eu usei isso em alguns lugares, não há problema, sempre verifique com seus administradores de sistema. Eu já vi pessoas perderem seus empregos devido a coisas menores como essa.
precisa saber é o seguinte
Respostas:
329
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):
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.
posso usar esta biblioteca para controlar a velocidade / aceleração do mouse?
Someone Someoneelse
Isso tinha a vantagem de não exigir a instalação (e a revisão e aprovação de gerenciamento associadas) de módulos Python não padrão em mais de 50 caixas de janelas (quiosques de sinalização digital).
Brichins
4
testado em python3.xobras também, fique à vontade para editar a resposta
Pyautogui é um ótimo módulo, mas infelizmente muito lento. No Ubuntu, ele move o cursor 2-3 vezes por segundo. Incrível! Pyuserinput é 1000x mais rápido.
Vladyslav Savchenko
1
Para pessoas que tentam instalar o pyautogui, consulte aqui stackoverflow.com/questions/5892297/… e certifique-se de colocar o sudo na frente dos seus comandos, se você tiver problemas de permissão.
retodaredevil
5
"PyAutoGUI está lento" devido a um recurso de segurança que adiciona uma pausa de 0,1 segundo após cada chamada. Se o seu script estiver fora de controle, você poderá bater com o mouse no canto superior esquerdo nesses 0,1 segundos para pará-lo. Para desativar isso, execute pyautogui.PAUSE = 0 (embora isso não é recomendado, porque você não pode usar o mouse / teclado para parar o script.)
Al Sweigart
76
Você pode usar win32apiou ctypesmodule 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
seu código ctypes funcionou para mim sem bibliotecas adicionais! (python 2.6 no windows 7)
intrepion
1
Sem o uso de qualquer biblioteca externa! Obrigado
Akshat Agarwal
2
Obrigado! Não suporto que existam 3 bibliotecas de terceiros com as quais você pode fazer isso, no entanto, todas as 3 bibliotecas são loucas para instalar ou solucionar problemas. Essa solução ctypes é a primeira solução nativa de python e funciona melhor do que qualquer outra que eu tenha encontrado.
DuckPuncher
Onde está a documentação SetCursorPos?
ArtOfWarfare
22
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:
O PyMouse foi substituído pelo PyUserInput , se encaixa exatamente na solicitação, simples de usar e multiplataforma. Big +1
user336851
@ user336851, você sabe como tap spacee tap screen shot keyusando PyUswerInput?
user3768495
@ user336851, neste momento PyUserInputestá quebrado. Não posso dizer se funciona bem ou não, porque nem consigo instalá-lo devido a dependências quebradas.
DuckPuncher
20
Linux
fromXlibimport X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Um google para "Python controlando o movimento do mouse" agora encontra esta página, como meta.
Copas
2
Por uma questão de completude, como a pergunta também simulava cliques do mouse, acrescentarei: 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.
user336851
4
@ Copas - Os resultados que aparecem no seu Google não significam nada. Você está em uma bolha. Isso aparece em uma pesquisa no DuckDuckGo pelo mesmo termo - isso é algo real. Isso é algo que todos os outros podem reproduzir e ver por si mesmos. Isso é meta.
ArtOfWarfare 27/08
1
Para controlar o mouse em uma sessão VNC, você precisa do número da tela, assim como "d = display.Display (': 1')" onde: 1 é o número da tela.
Zafer
12
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 importButton,Controller
mouse =Controller()# Read pointer positionprint('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)
Eu apenas tentei executar um programa antigo em um computador Windows e ele não funcionou; portanto, teste-o antes de usá-lo. Este programa pelo menos afirma apoiar ambos.
Pro Q
Fiz alguns testes e o problema era que no Mac, ter flutuações como valores de coordenadas funciona muito bem, mas no Windows, as coordenadas precisam ser inteiras. Este módulo é multiplataforma.
Função rápida e suja que clique com o botão esquerdo onde quer que esteja clicksno Windows 7 usando a ctypesbiblioteca. 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.
Você deseja chamar pyautogui.moveTo(x, y)porque move()move o cursor em relação à sua posição atual.
Al Sweigart
Ah, desculpe, eu não entendi o seu comentário original. Sim, ambas as funções funcionam. moveTo()move para um local absoluto, enquanto move()se move em relação ao local atual do cursor.
Al Sweigart
1
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')
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
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):
fonte
win32api.SetCursorPos((x,y))
é melhor ser substituídowin32api.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 respostaTente com o módulo PyAutoGUI . É multiplataforma.
E entao:
Também possui outros recursos:
Isso é muito mais fácil do que passar por todas as coisas do win32con.
fonte
Você pode usar
win32api
ouctypes
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:
Um clique usando ctypes:
fonte
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):
Se você deseja que o cursor se mova visivelmente pela tela para um determinado local, use o comando smooth_move:
fonte
Confira a plataforma cruzada PyMouse: https://github.com/pepijndevos/PyMouse/
fonte
tap space
etap 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.Linux
Fonte: Mouse Python movido em 5 linhas de código (somente Linux) .
fonte
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,
fonte
Função rápida e suja que clique com o botão esquerdo onde quer que esteja
clicks
no Windows 7 usando actypes
biblioteca. Não são necessários downloads.fonte
A partir de 2020 , você pode usar o mouse :
Recursos
fonte
Se você deseja mover o mouse, use o seguinte:
Se você deseja clicar, use o seguinte:
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
orpython3 -m pip install pyautogui
.fonte
pyautogui.moveTo(x, y)
porquemove()
move o cursor em relação à sua posição atual.moveTo()
move para um local absoluto, enquantomove()
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:
Aqui está a fonte: Como controlar o mouse em Python
fonte
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
fonte
muito fácil 1- instalar o pakage:
2- adicione biblioteca ao projeto:
3- use-o por exemplo:
neste URL, descreva todas as funções que você pode usar:
https://github.com/boppreh/mouse
fonte