pyautogui
是一个脚本库,可以通过对鼠标和键盘的操作与其他软件/程序进行互动
优点
1.简单好写
缺点
1.只适用于Windows、macOS 和 Linux操作系统
2.抗干扰能力弱(如稍微移动下鼠标或者按下键盘都有可能导致脚本未能达到预期,不排除我菜)
3.只能处理主监视器 (不能后台挂着)
4.部分功能仅限windows(找到应用程序的窗口,然后移动、调整大小、最大化、最小化或关闭它)
5.ROG魔霸新锐2023有兼容性问题(¿)
代码速查表
我是占位符
我是占位符
我是占位符
我是占位符
坐标说明
以屏幕左上角为坐标原点(0,0),向右为x轴正轴,向下为y轴正轴。
或者说是abs()后的坐标系第四象限(
故障保护
pyautogui.FAILSAFE =False #关闭防故障功能,不推荐关闭
防故障功能默认为开启(True)状态,开启时若鼠标指针移动到屏幕左上角会造成一个error:pyautogui.FailSafeException(可用于强制关闭)
官方文档:调用每个 PyAutoGUI 函数后会有十分之一秒的延迟,以便用户有时间将鼠标猛击到角落以触发故障保护。我强烈建议您不要禁用故障保护。
pyautogui.PAUSE = 1 #设定延迟1s
pyautogui.PAUSE可以设定调用每个pyautogui的函数后的延迟,默认为0.1。
pyautogui.DARWIN_CATCH_UP_TIME=1 #设定macOS额外延迟1s
与上面那个类似,但是专用于适配macOS系统,默认为0.01。
这些一般写于脚本的最前面
一般操作
获取鼠标位置(以像素为单位)
pyautogui.position() #Point(x=1344, y=793)
pyautogui.position().x #1344
pyautogui.position()[0] #1344
获取屏幕尺寸(以像素为单位)
pyautogui.size() #Size(width=2560, height=1600)
pyautogui.size().width #2560
pyautogui.size()[0] #2560
判断坐标是否在屏幕内(以像素为单位)
pyautogui.onScreen(x, y) #返回True或False
鼠标操作
将鼠标移动到坐标为x,y的位置。duration为移动花费的时间,默认为0,即直接移动到指定位置(瞬移)。
pyautogui.moveTo(x, y, duration=time_seconds)
相对于鼠标当前位置移动鼠标,即x坐标+dx,y坐标+dy。duration为移动花费的时间,默认为0,即直接移动到指定位置(瞬移)。
pyautogui.moveRel(dx, dy, duration=time_seconds)
鼠标左键拖动到坐标为x,y处。time_seconds=0或不写时鼠标会直接瞬移到指定位置,无法完成拖动任务,仅能移动鼠标
pyautogui.dragTo(x, y, duration=time_seconds)
相对于鼠标当前位置左键拖动,即x坐标+dx,y坐标+dy。同上,time_seconds=0或不写时鼠标会直接瞬移到指定位置,无法完成拖动任务,仅能移动鼠标
pyautogui.dragRel(x, y, duration=time_seconds)
将鼠标瞬移到指定坐标并进行点击。x=moveToX, y=moveToY为移动到的坐标,默认为(0,0)。clicks=num_of_clicks为点击次数,默认为1。interval=secs_between_clicks为点击间隔,默认为0。button = mouse_buttons鼠标按键,可选'left'
,'middle'
,'right'
,默认为'left'
。
pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks,button = mouse_buttons)
将鼠标移动到指定位置进行单次操作
pyautogui.click(x=moveToX, y=moveToY) #左键
pyautogui.rightClick(x=moveToX, y=moveToY) #右键
pyautogui.middleClick(x=moveToX, y=moveToY) #中键
pyautogui.doubleClick(x=moveToX, y=moveToY) #左键双击
pyautogui.tripleClick(x=moveToX, y=moveToY) #左键三击
模拟鼠标滚轮滚动,amount_to_scroll为滚动距离,一般以像素为单位,不同软件可能会不同。x,y为滚动发生位置,不写即为在鼠标原位滚动
pyautogui.scroll(amount_to_scroll, x=moveToX, y=moveToY)
分别完成鼠标按下和放开的操作,x,y为操作位置,默认为鼠标原位,button为鼠标按键,可选'left'
,'middle'
,'right'
,默认为'left'
。
pyautogui.mouseDown(x=moveToX, y=moveToY, button='left') #按下
pyautogui.mouseUp(x=moveToX, y=moveToY, button='left') #松开
键盘操作
在键盘光标处输入指定文字,\n将被输入为回车键,大部分转义符都可用。interval为输入间隔,默认为0.
pyautogui.typewrite('Hello world!\n', interval=secs_between_keys)
在键盘光标处按列表中的顺序按下按键,每一个字符串都代表一个按键,interval为输入间隔,默认为0
按键名称可通过print(pyautogui.KEYBOARD_KEYS)
查看
pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval=secs_between_keys)
键盘热键(组合键)操作
pyautogui.hotkey('ctrl', 'c') #crtl+c,复制
单独进行按键的按下与放开操作,按键名称可通过print(pyautogui.KEYBOARD_KEYS)
查看
pyautogui.keyDown(key_name)
pyautogui.keyUp(key_name)
消息框
pyautogui.alert(text='I am text', title='I am title', button='I am button')
调用后将弹出如下窗口,点击确定或叉掉都将返回一个str类型的button中的内容。这三个参数可填入大部分数据类型。默认为一个按钮:确定(由系统语言决定),点击确定或叉掉都将返回一个str类型的OK。
pyautogui.confirm(text='I am text', title='I am title', buttons=['buttons1', 'buttons2', 'buttons3'])
调用后将弹出如下窗口,点击按钮后将会返回一个str类型的按钮文本,叉掉将会返回一个NoneType类型的None。默认为两个按钮:确定,取消(由系统语言决定),点击确定将返回一个str类型的OK,叉掉或者点击取消都会返回一个str类型的Cancel。
pyautogui.prompt(text='I am text', title='I am title' , default='I am default text')
调用后将弹出如下窗口,点击ok将会返回str类型的输入框内的内容,点击cancel或者叉掉将返回一个NoneType类型的None
pyautogui.password(text='I am text', title='I am title' , default='I am default text', mask='*')
与prompt类似,但输入的内容在视觉上将被mask中的字符代替。
截图
pyautogui.screenshot()
会截图屏幕并返回一个PIL.Image.Image
对象,可以参考Pillow 或 PIL 的文档
而pyautogui.screenshot('my_screenshot.png')
在截屏后会直接保存截屏为my_screenshot.png,不返回对象
pyautogui.screenshot(region=(left, top, width, height))
可以选择截屏的大小,同样会返回一个PIL.Image.Image
对象,left
和top
分别为截图区域左上角的x坐标和y坐标,width
和height
分别为截图区域的宽高
图像定位
寻找图像位置,将返回一个Box(left, top, width, height),分别为图像位置的左上角的x坐标,y坐标,图像宽高。如果找不到将引发一个errer
pyautogui.ImageNotFoundException
pyautogui.locateOnScreen(image) #Box(left=1416, top=562, width=50, height=41)
pyautogui.locateOnScreen(image)[0] #1416
pyautogui.locateOnScreen(image).left #1416
confidence
是一个可选参数,范围0~1
,表示寻找图像的准确性,默认为confidence=1
即百分比相似,修改该参数需要cv2
库(OpenCV
)的支持
pyautogui.locateOnScreen(image, confidence=0.9)