python控制键盘和鼠标

本文详细介绍使用PyAutoGUI模块进行自动化控制,包括安装配置、鼠标键盘操作、图像识别及屏幕截图等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装PyAutoGui模块

命令行安装:

pip install pyautogui

pycharm搜索第三方包安装
在这里插入图片描述

暂停和防止故障设置

当我们在执行脚本的时候,如果脚本执行错误操作,我们需要手动控制鼠标和键盘来操作时,我们需要设定一下故障设置操作的等待时间。
我们可以设置pyautogui.PAUSE = 1,这个值设定的是指每个pyautogui函数运行完成之后暂停1s。
我们可以设置pyautogui.FAILSAFE = True,当pyautogui函数运行过程中出现异常时,会自动启动防止故障功能,鼠标会移动到屏幕左上角,我们设置成True则可以禁止启动这项功能。

控制鼠标

获取当前执行机的分辨率

我们可以通过pyautogui.size()来获取当前执行机的分辨率。该方法返回的是一个分辨率的元祖。

import pyautogui
print(pyautogui.size())

执行结果:

Size(width=1920, height=1080)

可以将来自 pyautogui.size() 的宽和高,存在变量中,如 width 和 height,让程序的可读性更好。

移动鼠标

我们执行机的坐标位置是左上角为(0, 0),右下角为分辨率的宽和高pyautogui.size() 。
我们可以通过pyautogui.moveTo(x, y,duration=0.25)来移动鼠标,需要给定坐标参数和鼠标移动的秒数。假设我们自动移动鼠标到屏幕正中央。

import pyautogui

width, height = pyautogui.size()
x, y = (int(width / 2), int(height / 2))

pyautogui.moveTo(x, y, duration=1)

上述代码则会将鼠标缓缓移动到屏幕正中央。
我们也可以通pyautogui.moveRel(x, y,duration=0.25)来移动鼠标,此时移动鼠标是根据当前位置来移动横纵距离。

import pyautogui

for i in range(10):
	#水平向左移动100
    pyautogui.moveRel(100, 0, duration=1)   
    #竖直向下移动100
    pyautogui.moveRel(0, 100, duration=1)
    #水平向右移动100
    pyautogui.moveRel(-100, 0, duration=1)
    #竖直向上移动100
    pyautogui.moveRel(0, -100, duration=1)

上述代码会在鼠标放置的位置以正方形轨迹模式移动。

获取鼠标位置

通过pyautogui.position()方法 ,可以确定鼠标当前的位置。它将返回函数
调用时,鼠标 x、y 坐标的元组。

import pyautogui

print(pyautogui.position())

执行结果:

Point(x=642, y=578)

点击鼠标操作

通过pyautogui.click(x, y, button=“left/ right/ middle”) 方法发送鼠标点击操作指令。
例如,pyautogui.click(100,150,button=‘left’)将在坐标(100,150)
处点击鼠标左键。而 pyautogui.click(200,250,button=‘right’)将在坐标(200,250)
处点击右键。(注意:click指的是鼠标按键按下一次,再松开)
实现点击也可以调用 pyautogui.mouseDown(),这只是按下鼠标按键,再调用 pyautogui.mouseUp(),这只是释放鼠标按键。

import pyautogui

width, height = pyautogui.size()
pyautogui.click(int(width/2), int(height/2), button="right")

上述代码,运行结果是鼠标移动到屏幕中央右击一次。
还支持 pyautogui.doubleClick()方法来左键双击操作。pyautogui.rightClick()和pyautogui.middleClick()方法将分别执行双击右键和双击中键。

图像识别

pyautogui支持识别图片的操作。
假设我们需要点击一下某一个图标,那么我们可以通过locateOnScreen() 方法将图像所在处的坐标返回,比如pyautogui.locateOnScreen(‘ludashiexe.png’)。
在这里插入图片描述
locateOnScreen() 函数返回4个整数的元组,分别代表(最左上角x坐标,最左上角y坐标, 图片宽度, 图片高度)
假设当前我们屏幕上有多个相同图标,则我们可以使用locateAllOnScreen() 函数将返回一个
Generator 对象,可以将它传递给list,生成一个查询当前识别图标的所有位置元组。如果只有找到一次,则返回的列表中只有一个元组。
在这里插入图片描述
我们可以使用pyautogui.center(x, y, width, height)来返回这个图片的中心位置的坐标,然后通过click()方法来进行点击操作。

import pyautogui

for i in list(pyautogui.locateAllOnScreen("red.png")):
    pyautogui.click(pyautogui.center(i), button="left", duration=1)

上述代码执行结果如下:
在这里插入图片描述

拖动鼠标操作

拖动鼠标指的是,在起始坐标位置鼠标按下不松开,再移动到目标位置。
pyautogui提供了pyautogui.dragTo()和pyautogui.dragRel()函数将鼠标拖动到一个新的位置,或相对当前位置的位置。
我们使用上面的图片识别的方法,来实现操作移动桌面上的一个图标。

import pyautogui

# 获取图标的位置
p = pyautogui.locateOnScreen("ludashiexe.png")

# 移动到图标中间
pyautogui.moveTo(pyautogui.center(p), duration=1)

# 拖拽向右移动50位
pyautogui.dragRel(50, 0, duration=1)

# 移动到指定坐标位置
pyautogui.dragTo(500, 500, duration=1)

执行结果如下:在这里插入图片描述

滚动鼠标操作

pyautogui支持pyautogui.scroll()方法来操作滚动鼠标,传一个值来滚动。例如pyautogui.scroll(200)

获取屏幕快照

pyautogui支持pyautogui.screenshot()方法来截屏。

键盘操作

键盘输入

pyautogui.typewrite()方法支持输入键盘上的字符,具体按键对应的字符串需要查看pyautogui.KEYBOARD_KEYS 列表。

按键按下,按键松开

就像 mouseDown() 和 mouseUp() 函数一样,pyautogui.keyDown() 和 pyautogui.
keyUp() 将向计算发送虚拟的按键和释放。
如果需要模拟按下又松开,则可以使用方法pyautogui.press()。

热键组合输入

可以使用 pyautogui.hotkey() 方法来组合输入按键,比如Ctrl+c,Shift+s。pyautogui.hotkey(‘ctrl’, ‘c’)。

我们结合上述方法,来做一个操作,在文本框中,输入一个文本字符串,再回车,再连续按字母‘a’按10次,再使用报错Ctrl+s来保存文档。

import pyautogui

p = pyautogui.locateOnScreen("input.png")

# 点击输入框
pyautogui.click(pyautogui.center(p), button="left", duration=1)

# 在输入框中输入字符串
pyautogui.typewrite("Test PyAutoGui")

# 换行
pyautogui.typewrite(["enter"])

# 再输入框中输入10个字符a
for _ in range(10):
    pyautogui.press("a")

# 再键入Shift+S保存文档
pyautogui.hotkey("ctrl", "s")

执行结果如下:
在这里插入图片描述

### Python 中使用 `pynput` 实现键盘鼠标控制 #### 使用 `pynput.mouse` 进行鼠标操作 通过 `pynput.mouse` 可以轻松实现鼠标的点击、移动以及滚动等功能。以下是具体方法: - **模拟鼠标点击** ```python from pynput.mouse import Button, Controller mouse = Controller() # 移动到指定位置 (x=100, y=200) mouse.position = (100, 200) # 单击左键 mouse.click(Button.left, 1) # 按住右键并释放 with mouse.pressed(Button.right): pass ``` 上述代码展示了如何设置鼠标的位置,并执行单击或按压按钮的操作[^1]。 - **监听鼠标事件** 可以利用 `Listener` 来捕获用户的鼠标活动,例如移动、点击或者滚轮动作。 ```python from pynput.mouse import Listener def on_click(x, y, button, pressed): if pressed: print(f'Mouse clicked at ({x}, {y}) with {button}') def on_scroll(x, y, dx, dy): print(f'Mouse scrolled at ({x}, {y}) by ({dx}, {dy})') with Listener(on_click=on_click, on_scroll=on_scroll) as listener: listener.join() ``` 此部分实现了当检测到特定行为时触发回调函数的功能[^4]。 #### 使用 `pynput.keyboard` 处理键盘输入 对于键盘交互而言,同样分为两大部分——发送按键指令与捕捉用户敲打的动作。 - **模拟按键序列** 下面的例子说明了怎样组合多个按键形成复合命令(比如 Ctrl+C),甚至还能保持某些修饰符处于激活状态一段时间。 ```python from pynput.keyboard import Key, Controller keyboard = Controller() # Press and release space keyboard.press(Key.space) keyboard.release(Key.space) # Type a lower case A; this will work even without holding Shift key explicitly. keyboard.tap('a') # Simultaneously press 'Shift'+'A', which produces an uppercase letter due to shift being held down during typing of 'A'. with keyboard.pressed(Key.shift): keyboard.tap('a') # Perform copy operation via shortcut keys combination i.e., Control + C keyboard.hotkey('ctrl', 'c') ``` 这些片段解释了基本字符录入之外更高级别的功能像热键绑定等[^2]。 - **监控键盘动态变化** 最后一点就是关于实时跟踪当前设备上发生的任何按键相关的事情。 ```python from pynput.keyboard import Listener def on_press(key): try: print(f'alphanumeric key {key.char} pressed') except AttributeError: print(f'special key {key} pressed') def on_release(key): print('{0} released'.format(key)) if key == Key.esc: # Stop listener when ESC is hit return False with Listener(on_press=on_press, on_release=on_release) as listener: listener.join() ``` 这里定义了一个简单的框架用于打印每次按下及松开某个键的信息直到按下ESC为止才会退出循环[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值