python控制键盘和鼠标
安装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")
执行结果如下: