用Python控制鼠标

Sas*_*sha 190 python mouse

如何在Python中控制鼠标光标,即将其移动到某个位置并单击,在Windows下?

Jef*_*emp 316

在安装pywin32之后在WinXP,Python 2.6上测试过(在我的例子中是pywin32-214.win32-py2.6.exe):

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)
Run Code Online (Sandbox Code Playgroud)

  • "点击(240,240)#Bam,你被投票了 (176认同)
  • `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))替换.根据我的经验,可以更好地与游戏等其他应用程序集成. (10认同)
  • 在`python3.x`中测试过,也可以自由编辑答案 (4认同)
  • @ObsessiveSSOℲ 只是去掉 MOUSEEVENTF_ABSOLUTE 标志。有关详细信息:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx (2认同)

Al *_*art 116

尝试使用PyAutoGUI模块.它是多平台的.

pip install pyautogui
Run Code Online (Sandbox Code Playgroud)

所以:

import pyautogui
pyautogui.click(100, 100)
Run Code Online (Sandbox Code Playgroud)

它还有其他功能:

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
Run Code Online (Sandbox Code Playgroud)

这比通过所有win32con的东西容易得多.

  • 大!这是多平台! (13认同)
  • "PyAutoGUI很慢"是因为安全功能会在每次通话后增加0.1秒的暂停时间.如果您的脚本失控,您可以在0.1秒内将鼠标猛击到左上角以停止它.要禁用此功能,请运行pyautogui.PAUSE = 0(尽管不建议这样做,因为您无法使用鼠标/键盘来停止脚本.) (4认同)
  • 对于尝试安装 pyautogui 的人,请查看这里 /sf/ask/412460821/,如果您有权限问题,请确保将 sudo 放在您的命令前面。 (2认同)
  • 此外,PyAutoGUI 无法在超过 1 个显示器上正常运行:https://github.com/asweigart/pyautogui/issues/162 (2认同)
  • PyAutoGUI 确实可以在 Windows 上使用多个显示器(您对其他屏幕使用负坐标),但在 mac/linux 上还不能使用。目前还无法检测显示器布局。所以,它有效,但很脆弱。 (2认同)

Anu*_*yal 73

您可以使用win32apictypes模块使用win32 apis来控制鼠标或任何gui

这是一个使用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)
Run Code Online (Sandbox Code Playgroud)

点击使用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
Run Code Online (Sandbox Code Playgroud)

  • 你的ctypes代码为我工作,没有任何额外的库!(Windows 7上的python 2.6) (10认同)
  • 谢谢!我不能忍受你可以使用3个第三方库,但是所有3个库都很难安装或排除故障.这个ctypes解决方案是第一个本机python解决方案,它比我遇到的其他所有解决方案都更好. (2认同)

Ped*_*ito 23

截至2021 年,您可以使用鼠标

import mouse
mouse.move("500", "500")
mouse.left_click()
Run Code Online (Sandbox Code Playgroud)

特征

  • 所有鼠标设备上的全局事件挂钩(无论焦点如何都捕获事件)。
  • 监听并发送鼠标事件。
  • 适用于Windows 和 Linux(需要 sudo)。
  • 纯 Python,无需编译 C 模块。
  • 零依赖。安装和部署很简单,只需复制文件。
  • Python 2 和 3
  • 包括高级 API(例如录制和播放)。
  • 在单独的线程中自动捕获事件,不会阻塞主程序。
  • 经过测试和记录。

  • 您还可以执行`mouse.move("500", "500", False)`来相对移动。 (3认同)

Fab*_*ano 21

查看跨平台PyMouse:https://github.com/pepijndevos/PyMouse/

  • PyMouse已被[PyUserInput](https://github.com/SavinaRoja/PyUserInput)取代,完全符合要求,易于使用和跨平台.大+1 (7认同)

小智 20

另一种选择是使用跨平台的AutoPy包.这个包有两个不同的移动鼠标选项:

此代码段将立即将光标移动到位置(200,200):

import autopy
autopy.mouse.move(200,200)
Run Code Online (Sandbox Code Playgroud)

如果您希望光标在屏幕上明显移动到给定位置,则可以使用smooth_move命令:

import autopy
autopy.mouse.smooth_move(200,200)
Run Code Online (Sandbox Code Playgroud)


Sim*_*mon 17

Linux的

from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Run Code Online (Sandbox Code Playgroud)

来源:Python鼠标移动5行代码(仅限Linux).

  • 谷歌"Python控制鼠标运动"现在找到这个页面,如何元. (19认同)
  • @Copas - 你的Google中出现的结果毫无意义.你是泡沫中的人.这显示在DuckDuckGo搜索相同的术语 - 这是真实的东西.这是其他所有人都可以自我复制和看到的东西.这是元. (4认同)
  • 这适用于X.OP适用于Windows. (3认同)
  • 为了完整起见,由于该问题还要求模拟鼠标点击,我将添加:`Xlib.ext.xtest.fake_input(d, X.ButtonPress, 1); d.sync(); 时间.睡眠(0.001);Xlib.ext.xtest.fake_input(d, X.ButtonRelease, 1); d.sync();` 按下和释放之间的 sleep() 调用可能需要也可能不需要,具体取决于目标应用程序。 (2认同)

Pro*_*o Q 10

对于Windows和Mac,Pynput是我找到的最佳解决方案.超级易于编程,并且工作得很好.

例如,

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)
Run Code Online (Sandbox Code Playgroud)


Tan*_*ash 7

快速而脏的功能,clicks使用该ctypes库在Windows 7上随时随地点击.无需下载.

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.
Run Code Online (Sandbox Code Playgroud)


roc*_*ikz 5

另一种选择是鼠标库,我个人使用它,因为它相对简单且跨平台。

以下是如何使用它:

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')
Run Code Online (Sandbox Code Playgroud)

来源:How to Control your Mouse in Python