python_PyAutoGUI库学习

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坐标+dyduration为移动花费的时间,默认为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 对象,lefttop分别为截图区域左上角的x坐标和y坐标,widthheight分别为截图区域的宽高


图像定位

寻找图像位置,将返回一个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)

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注