Вы хотите сделать движение мыши в коде без вмешательства пользователя?
Рахул
Дополнительная информация была бы очень полезна ...
Габриэль Херли
Я работаю в Windows и не использую какой-либо инструментарий. Я действительно новичок в Python и никогда раньше не работал с любым графическим интерфейсом. С чего начать? Какой мануал я должен прочитать?
Саша
2
зачем тебе для этого нужен питон, ты можешь сделать это сам? на более серьезной ноте: зачем это нужно, какова цель, немного больше деталей было бы здорово
Anurag Uniyal
2
Просто к вашему сведению, если вы используете это, чтобы защитить ваш компьютер от блокировки, вы можете нарушать политику безопасности вашей компании или организации, поскольку это способ обойти свойства автоматической блокировки компьютера. Я использовал это в некоторых местах без проблем, просто всегда проверяйте это у администраторов Sys. Я видел, как люди теряли работу из-за незначительных вещей, подобных этой.
AlienAnarchist
Ответы:
329
Протестировано на WinXP, Python 2.6 (также протестирован 3.x) после установки pywin32 (pywin32-214.win32-py2.6.exe в моем случае):
win32api.SetCursorPos((x,y))лучше заменить на win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))мой опыт для лучшей интеграции с другими приложениями, такими как игры.
я могу использовать эту библиотеку для управления скоростью / ускорением мыши?
Кто-то кто-то
Это имело преимущество в том, что не требовало установки (и соответствующей проверки и одобрения со стороны руководства) нестандартных модулей Python в более чем 50 оконных коробках (киоски для цифровых вывесок).
Brichins
4
проверено в python3.xработах тоже, не стесняйтесь редактировать ответ
WhatsThePoint
132
Попробуйте с модулем PyAutoGUI . Это мультиплатформенность.
pip install pyautogui
Так что:
import pyautogui
pyautogui.click(100,100)
У этого также есть другие особенности:
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
Это намного проще, чем проходить через весь материал win32con.
Pyautogui - отличный модуль, но, к сожалению, очень медленный. В Ubuntu он перемещает курсор 2-3 раза в секунду. Невероятно! Pyuserinput в 1000 раз быстрее.
Владислав Савченко
1
Если вы пытаетесь установить pyautogui, посмотрите здесь stackoverflow.com/questions/5892297/… и убедитесь, что sudo стоит перед вашими командами, если у вас есть проблемы с правами доступа.
retodaredevil
5
«PyAutoGUI работает медленно» из-за функции безопасности, которая добавляет 0,1-секундную паузу после каждого вызова. Если ваш сценарий вышел из-под контроля, вы можете нажать кнопку мыши в верхнем левом углу за эти 0,1 секунды, чтобы остановить его. Чтобы отключить это, запустите pyautogui.PAUSE = 0 (хотя это не рекомендуется, потому что вы не можете использовать мышь / клавиатуру, чтобы остановить сценарий.)
Al Sweigart
75
Вы можете использовать win32apiили ctypesмодуль для использования Win32 API для управления мышью или любой графический интерфейс
Вот забавный пример управления мышью с помощью 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)
Клик с использованием 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
Ваш код ctypes работал для меня без каких-либо дополнительных библиотек! (Python 2.6 на Windows 7)
Intrepion
1
Без использования какой-либо внешней библиотеки! Спасибо
Акшат Агарвал
2
Спасибо! Я не могу смириться с тем, что есть 3 сторонние библиотеки, с которыми вы можете сделать это, однако все 3 библиотеки сводят на нет необходимость устанавливать или устранять неполадки. Это решение ctypes является первым собственным решением Python и работает лучше, чем все остальные, с которыми я сталкивался.
DuckPuncher
Где находится документация SetCursorPos?
ArtOfWarfare
22
Другой вариант - использовать кроссплатформенный пакет AutoPy . В этом пакете есть два варианта перемещения мыши:
Этот фрагмент кода мгновенно переместит курсор в позицию (200 200):
import autopy
autopy.mouse.move(200,200)
Если вместо этого вы хотите, чтобы курсор визуально перемещался по экрану в указанное место, вы можете использовать команду smooth_move:
PyMouse был заменен на PyUserInput , точно соответствует запросу, прост в использовании и кроссплатформенен. Большой +1
user336851
@ user336851, знаете ли вы, как tap spaceи tap screen shot keyс помощью PyUswerInput?
user3768495
@ user336851, на этот раз PyUserInputсломан. Не могу сказать, работает ли он хорошо или нет, потому что я даже не могу его установить из-за сломанных зависимостей.
DuckPuncher
20
Linux
fromXlibimport X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Google для «управления движением мыши Python» теперь находит эту страницу, как мета.
Copas
2
Для полноты картины, поскольку вопрос также задавался для симуляции щелчков мыши, я добавлю: 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();вызов sleep () между нажатием и отпусканием может или не может потребоваться в зависимости от целевого приложения.
user336851
4
@Copas - результаты, появляющиеся в вашем Google, ничего не значат. Ты в пузыре. Это обнаруживается в поиске DuckDuckGo для того же термина - это что-то реальное. Это то, что все остальные могут воспроизвести и увидеть сами. Это мета.
ArtOfWarfare
1
Для управления мышью в сеансе VNC вам также необходим номер дисплея, например, "d = display.Display (': 1')", где: 1 - номер дисплея.
Зафер
12
Pynput - лучшее решение, которое я нашел, как для Windows, так и для Mac. Супер легко программировать, и работает очень хорошо.
Например,
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)
Я просто попытался запустить старую программу на компьютере с Windows, и она не сработала, поэтому, пожалуйста, проверьте ее перед использованием. Эта программа как минимум претендует на поддержку обоих.
Про Q
Я провел некоторое тестирование, и оказалось, что моя проблема заключалась в том, что на Mac наличие плавающих значений координат работает просто отлично, но в Windows координаты должны быть целыми числами. Этот модуль кроссплатформенный.
Быстрая и грязная функция, которая будет щелкать левой кнопкой мыши в любом clicksместе Windows 7, используя ctypesбиблиотеку. Загрузка не требуется.
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.
Вы хотите позвонить, pyautogui.moveTo(x, y)потому что move()перемещает курсор относительно его текущей позиции.
Аль Суигарт
Ах, извините, я неправильно понял ваш оригинальный комментарий. Да, обе функции работают. moveTo()перемещается в абсолютную позицию, а move()перемещается относительно текущей позиции курсора.
Аль Суигарт
1
Другой альтернативой была бы библиотека мыши , я лично использую ее, поскольку она относительно проста и кроссплатформенна.
Вот как вы можете использовать это:
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')
Принятый ответ сработал для меня, но он был нестабильным (иногда щелчки не изменялись), поэтому я добавил дополнительный MOUSEEVENTF_LEFTUP . Тогда это работало надежно
Ответы:
Протестировано на WinXP, Python 2.6 (также протестирован 3.x) после установки pywin32 (pywin32-214.win32-py2.6.exe в моем случае):
источник
win32api.SetCursorPos((x,y))
лучше заменить наwin32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))
мой опыт для лучшей интеграции с другими приложениями, такими как игры.python3.x
работах тоже, не стесняйтесь редактировать ответПопробуйте с модулем PyAutoGUI . Это мультиплатформенность.
Так что:
У этого также есть другие особенности:
Это намного проще, чем проходить через весь материал win32con.
источник
Вы можете использовать
win32api
илиctypes
модуль для использования Win32 API для управления мышью или любой графический интерфейсВот забавный пример управления мышью с помощью win32api:
Клик с использованием ctypes:
источник
SetCursorPos
?Другой вариант - использовать кроссплатформенный пакет AutoPy . В этом пакете есть два варианта перемещения мыши:
Этот фрагмент кода мгновенно переместит курсор в позицию (200 200):
Если вместо этого вы хотите, чтобы курсор визуально перемещался по экрану в указанное место, вы можете использовать команду smooth_move:
источник
Проверьте кроссплатформенный PyMouse: https://github.com/pepijndevos/PyMouse/
источник
tap space
иtap screen shot key
с помощью PyUswerInput?PyUserInput
сломан. Не могу сказать, работает ли он хорошо или нет, потому что я даже не могу его установить из-за сломанных зависимостей.Linux
Источник: мышь Python перемещается в 5 строк кода (только для 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();
вызов sleep () между нажатием и отпусканием может или не может потребоваться в зависимости от целевого приложения.Pynput - лучшее решение, которое я нашел, как для Windows, так и для Mac. Супер легко программировать, и работает очень хорошо.
Например,
источник
Быстрая и грязная функция, которая будет щелкать левой кнопкой мыши в любом
clicks
месте Windows 7, используяctypes
библиотеку. Загрузка не требуется.источник
С 2020 года вы можете использовать мышь :
Характеристики
источник
Если вы хотите переместить мышь, используйте это:
Если вы хотите нажать, используйте это:
Если вы не
pyautogui
установили, вы должны иметь Python, подключенный к CMD. Зайдите в CMD и напишите:pip install pyautogui
Это установит
pyautogui
для Python 2.x.Для Python 3.x вам, вероятно, придется использовать
pip3 install pyautogui
илиpython3 -m pip install pyautogui
.источник
pyautogui.moveTo(x, y)
потому чтоmove()
перемещает курсор относительно его текущей позиции.moveTo()
перемещается в абсолютную позицию, аmove()
перемещается относительно текущей позиции курсора.Другой альтернативой была бы библиотека мыши , я лично использую ее, поскольку она относительно проста и кроссплатформенна.
Вот как вы можете использовать это:
Вот источник: Как управлять мышью в Python
источник
Принятый ответ сработал для меня, но он был нестабильным (иногда щелчки не изменялись), поэтому я добавил дополнительный MOUSEEVENTF_LEFTUP . Тогда это работало надежно
источник
очень легко 1- установить пакет:
2- добавить библиотеку в проект:
3- используйте его, например:
в этом URL опишите все функции, которые вы можете использовать:
https://github.com/boppreh/mouse
источник