找回密码
 会员注册
查看: 20|回复: 0

Python第三方PyAutoGUI库详解

[复制链接]

6

主题

0

回帖

19

积分

新手上路

积分
19
发表于 2024-9-9 14:13:55 | 显示全部楼层 |阅读模式
PyAutoGUI是一个用于进行图形用户界面(GUI)自动化的Python库。它允许你在屏幕上进行鼠标和键盘的模拟操作,以及获取屏幕上的信息,其函数主要分为以下4类:        1、屏幕图像操作:获取屏幕分辨率、检查坐标是否在屏幕上、截屏、定位图片在屏幕上的位置、获取屏幕某个像素点的RGB值        2、鼠标控制:获取当前鼠标位置、移动鼠标、鼠标拖拽、鼠标点击        3、键盘控制:输入字符串、组合按键(快捷键)、同时输入字符+按键        4、消息弹窗:仅确认弹窗、确认取消弹窗、输入普通内容弹窗、输入密码弹窗中文文档链接:Python中PyAutoGUI帮助文档(推荐!)_python_脚本之家英文文档链接:CheatSheet—PyAutoGUIdocumentation文中示例所用PyAutoGUI版本为:0.9.54,2024.1.25注意:从0.9.41版本开始若未找到指定图片的定位,会引发ImageNotFoundException异常而不是返回None。一、简介目的PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持。可以用pip安装,Github上有源代码。PyAutoGUI可以模拟鼠标的移动、点击、拖拽,键盘按键输入、按住操作,以及鼠标+键盘的热键同时按住等操作,可以说手能动的都可以。保护措施每次调用PyAutoGui函数都延迟2.5秒pyautogui.PAUSE=2.5当pyautogui.FAILSAFE=True时,如果把鼠标光标在屏幕左上角,PyAutoGUI函数就会产生pyautogui.FailSafeException异常。importpyautoguipyautogui.FAILSAFE=True就像《魔法师的学徒》(Sorcerer’sApprentice)会担水的扫帚,可以担水,却无力阻止水漫浴室。你的程序也可能会失控(即使是按照你的意思执行的),那时就需要中断。如果鼠标还在自动操作,就很难在程序窗口关闭它。为了能够及时中断,PyAutoGUI提供了一个保护措施。当pyautogui.FAILSAFE=True时,如果把鼠标光标在屏幕左上角,PyAutoGUI函数就会产生pyautogui.FailSafeException异常。如果失控了,需要中断PyAutoGUI函数,就把鼠标光标在屏幕左上角。要禁用这个特性,就把FAILSAFE设置成False:ImportpyautoguiPyautogui.FAILSAFE=False通过把pyautogui.PAUSE设置成float或int时间(秒),可以为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。在函数循环执行的时候,这样做可以让PyAutoGUI运行的慢一点,非常有用。例如:importpyautoguipyautogui.PAUSE=2.5pyautogui.moveTo(100,100);pyautogui.click()所有的PyAutoGUI函数在延迟完成前都处于阻塞状态(block)。(未来计划增加一个可选的非阻塞模式来调用函数。)建议PAUSE和FAILSAFE一起使用。安装与依赖PyAutoGUI支持Python2.x和Python3.xWindows:PyAutoGUI没有任何依赖,因为它用Python的ctypes模块所以不需要pywin32pip3installpyautogui二、鼠标控制函数屏幕和鼠标位置鼠标在屏幕上的位置由x和y的坐标表示,x的0点在屏幕的最左上角,往右滑动坐标增加;y坐标原点0也在屏幕左上角,右下滑坐标增加。如你的屏幕分辨率是1920x1080,则最右下角的坐标是1919,1079(坐标从0开始计数)——pyautogui.size():获取屏幕分辨率屏幕分辨率可以通过函数size()获取,返回一个2个整数的元组。例:importpyautoguiprint(pyautogui.size())#Size(width=1920,height=1080)——pyautogui.position():获取当前鼠标位置例1:importpyautoguiprint(pyautogui.position())#Point(x=1290,y=376)例2:不间断输出当前光标位置#!python3importpyautogui,sysprint('PressCtrl-Ctoquit.')try:    whileTrue:        x,y=pyautogui.position()        positionStr='X:'+str(x).rjust(4)+'Y:'+str(y).rjust(4)        print(positionStr,end='')        print('\b'*len(positionStr),end='',flush=True)exceptKeyboardInterrupt:    print('\n')——pyautogui.onScreen(x,y):检查坐标是否在屏幕上例:importpyautogui,sys#当前屏幕分辨率size=pyautogui.size()#检查坐标是否在屏幕上resolution1=pyautogui.onScreen(1920,1080)#坐标是从0开始,因为右下角坐标是1920-1,1080-1resolution2=pyautogui.onScreen(1919,1079)print(size,resolution1,resolution2)#Size(width=1920,height=1080)FalseTrue鼠标移动1、pyautogui.moveTo(x,y,duration=seconds,tween=pyautogui.linear)用于将鼠标光标移动到屏幕上的指定位置。如果使用None值,则表示使用当前光标的坐标值。参数:x 和 y:目标位置的横纵坐标。duration:鼠标移动到目标位置的持续时间(秒)。可选参数,默认为0.1s,表示鼠标瞬间移动到目标位置。。tween:缓动函数,用于控制鼠标移动的速度曲线。可选参数,默认为线性缓动(pyautogui.linear)。例:importpyautogui#将鼠标移动到屏幕的坐标(100,100),持续时间为1秒pyautogui.moveTo(100,100,duration=1)#如果使用None值,则表示使用当前光标的坐标值。pyautogui.moveTo(None,100,duration=1)pyautogui.moveTo(100,None,duration=1)2、pyautogui.move(x,y,duration=seconds,tween=pyautogui.linear)相对于鼠标当前位置进行移动。参数与moveTo一样。例:importpyautogui,sys#相对鼠标当前坐标向右移动100像素pyautogui.move(100,0,duration=1,tween=pyautogui.linear)#相对鼠标当前坐标向下移动100像素pyautogui.move(0,100,duration=1,tween=pyautogui.linear)pyautogui.move(0,-100,duration=1,tween=pyautogui.linear)pyautogui.move(-10,0,duration=1,tween=pyautogui.linear)鼠标拖拽dragTo()和drag()函数和moveTo()及move()函数参数类似,另外,他们还有'button'参数可以设置为'left','middle','right',用于设置用哪个鼠标按键拖拽。1、pyautogui.dragTo(x,y,duration=seconds,button='left',tween=pyautogui.linear)用于模拟鼠标拖拽操作(还可以用mouseDown和moveTo、mouseUp函数模拟拖拽操作)。参数说明:x 和 y:拖拽的目标位置的横纵坐标。duration:拖拽操作的持续时间(秒)。可选参数,默认为0,表示鼠标瞬间拖拽到目标位置。button:鼠标按钮,可以是'left'、'middle'或'right'。可选参数,默认为'left'。tween:缓动函数,用于控制鼠标拖拽的速度曲线。可选参数,默认为线性缓动(pyautogui.linear)。示例:importpyautogui#模拟鼠标左键拖拽到屏幕的坐标(200,200),持续时间为2秒pyautogui.dragTo(200,200,duration=2,button='left')PS:duration参数必须要设置大于0.2(默认是0.1s),否则会拖拽失败。2、pyautogui.drag(x,y,duration=seconds,button='left',tween=pyautogui.linear)相对鼠标当前位置拖拽指定距离。参数同dragTo()函数。缓动/渐变函数Tween是鼠标移动过程中一个额外参数,如果你不在乎鼠标的移动方式,可以跳本节。缓动/渐变函数可以改变光标移动过程的速度和方向。通常鼠标是匀速直线运动,这就是线性缓动/渐变函数。31种可用缓动/渐变函数列表'linear':匀速。'easeInQuad':加速。'easeOutQuad':减速。'easeInOutQuad':先加速后减速。'easeInCubic':立方缓入。'easeOutCubic':立方缓出。'easeInOutCubic':立方缓入缓出。'easeInQuart':四次方缓入。'easeOutQuart':四次方缓出。'easeInOutQuart':四次方缓入缓出。'easeInQuint':五次方缓入。'easeOutQuint':五次方缓出。'easeInOutQuint':五次方缓入缓出。'easeInSine':正弦波缓入。'easeOutSine':正弦波缓出。'easeInOutSine':正弦波缓入缓出。'easeInExpo':指数函数缓入。'easeOutExpo':指数函数缓出。'easeInOutExpo':指数函数缓入缓出。'easeInCirc':圆圈缓入。'easeOutCirc':圆圈缓出。'easeInOutCirc':圆圈缓入缓出。'easeInElastic':弹性缓入。'easeOutElastic':弹性缓出。'easeInOutElastic':弹性缓入缓出。'easeInBack':后置回退缓入。'easeOutBack':后置回退缓出。'easeInOutBack':后置回退缓入缓出。'easeInBounce':反弹缓入。'easeOutBounce':反弹缓出。'easeInOutBounce':反弹缓入缓出。示例:importpyautogui#加速向右移动300像素pyautogui.move(300,0,duration=1,tween=pyautogui.easeInQuad)这些效果函数是模仿AlSweigart的PyTweening模块,可以直接使用,不需要额外安装。如果你想创建自己的效果,也可以定义一个函数,其参数是(0.0,1.0),表示起点和终点,返回值是介于[0.0,1.0]之间的数。鼠标点击函数XY坐标起始值为屏幕左上角0,0,X坐标随着鼠标右移增加,Y坐标随着鼠标下移增加。importtimeimportpyautoguix,y=pyautogui.position(100,100)num_seconds=1#用1秒的时间将鼠标移至x,y坐标上pyautogui.moveTo(x,y,duration=num_seconds) xOffset,yOffset=100,100#将鼠标从当前位置偏移xOffset,yOffset像素pyautogui.moveRel(xOffset,yOffset,duration=num_seconds) 若duration参数(时长)为0或未指定,则鼠标指针会瞬间移到目标点上。注:拖动操作在Mac上不能被立即执行。>>>pyautogui.dragTo(x,y,duration=num_seconds) #dragmousetoXY>>>pyautogui.dragRel(xOffset,yOffset,duration=num_seconds) #dragmouserelativetoitscurrentposition1、pyautogui.click(x=None,y=None,clicks=1,interval=0.0,button='left',duration=0.0,tween=pyautogui.linear)用于模拟鼠标点击操作。参数说明:x:鼠标点击的目标横坐标。如果未指定,则使用当前鼠标位置。y:鼠标点击的目标纵坐标。如果未指定,则使用当前鼠标位置。clicks:点击的次数,默认为1次。interval:两次点击之间的时间间隔,默认为0秒。button:指定点击的鼠标按钮,可选值为'left'、'middle'、'right'。默认为'left'。duration:模拟点击的持续时间,默认为0秒。tween:设置点击的缓动函数,默认为线性缓动。示例:importpyautogui#模拟左键单击pyautogui.click()#模拟右键双击,点击坐标为(100,200)pyautogui.click(100,200,clicks=2,button='right')#模拟中键单击,点击坐标为(300,400),间隔0.5秒pyautogui.click(300,400,button='middle',interval=0.5)2、pyautogui.leftClick(x=None,y=None,clicks=1,interval=0.0,duration=0.0,tween=pyautogui.linear)用于模拟鼠标左键点击。参数功能同click()函数。例:importpyautogui#模拟左键单击pyautogui.leftClick()#模拟左键双击,点击坐标为(100,200)pyautogui.leftClick(100,200,clicks=2)#模拟左键单击,点击坐标为(300,400),间隔0.5秒pyautogui.leftClick(300,400,interval=0.5)3、pyautogui.middleClick(x=None,y=None,clicks=1,interval=0.0,duration=0.0,tween=pyautogui.linear)        用于模拟鼠标中键点击。        4、pyautogui.rightClick(x=None,y=None,clicks=1,interval=0.0,duration=0.0,tween=pyautogui.linear)        用于模拟鼠标右键点击。5、pyautogui.doubleClick(x=None,y=None,interval=0.0,duration=0.0,tween=pyautogui.linear)用于模拟鼠标左键双击。6、pyautogui.tripleClick(x=None,y=None,interval=0.0,duration=0.0,tween=pyautogui.linear)用于模拟鼠标左键三次点击。鼠标按下和松开函数1、pyautogui.mouseDown(x=None,y=None,button='left')用于模拟鼠标按下操作。参数说明:x:鼠标按下的目标横坐标。如果未指定,则使用当前鼠标位置。y:鼠标按下的目标纵坐标。如果未指定,则使用当前鼠标位置。button:指定按下的鼠标按钮,可选值为'left'、'middle'、'right'。默认为'left'。示例:importpyautogui#模拟左键按下,按下位置为当前鼠标位置pyautogui.mouseDown()#模拟右键按下,按下位置为(100,200)pyautogui.mouseDown(100,200,button='right')需要注意的是,按下操作后,通常需要调用 pyautogui.mouseUp() 函数来模拟鼠标释放的动作,以完成整个鼠标点击操作。2、pyautogui.mouseUp(x=None,y=None,button='left')用于模拟鼠标释放操作。参数同mouseDown()。鼠标滚轮滚动函数1、pyautogui.scroll(amount_to_scroll,x=moveToX,y=moveToY)用于模拟鼠标滚滚动操作。参数说明:amount:滚动的距离,正值表示向上滚动,负值表示向下滚动。x:滚轮滚动的横坐标。如果未指定,则使用当前鼠标位置。y:滚轮滚动的纵坐标。如果未指定,则使用当前鼠标位置。PS:此处x,y指定从屏幕哪个位置开始滚动,并不会改变鼠标的位置。示例:importpyautogui#向上滚动鼠标滚轮,滚动距离为3pyautogui.scroll(3)#向下滚动鼠标滚轮,滚动距离为-2,滚轮滚动位置为(100,200)pyautogui.scroll(-2,x=100,y=200)三、键盘控制函数键盘上可以按的键都可以调用。1、pyautogui.typewrite(message,interval=0.0,pause=None,logScreenshot=None,_pause=True)用于模拟键盘输入。参数:message (必需):要输入的文本字符串。interval (可选):每个按键之间的时间间隔。默认为0,表示没有间隔。如果需要模拟更自然的键入速度,可以设置一个小的时间间隔。pause (可选):在输入不同的消息之间的暂停时间。如果设置为None,则使用默认值,即2.5秒。如果设置为数字,则表示暂停的秒数。logScreenshot (可选):如果设置为True,将在每个按键后创建一个屏幕截图。默认为None。_pause (可选):如果设置为True,将在每个按键之后等待,以确保按键被正确处理。默认为True。message参数是字符串时将被当作要键入的字符,如:'abc';如为列表时键盘常量被视键盘按下,非键盘常量被视为键入字符,如['a','b','left'],其中'ab'被视为键入的字符串,'left'被视为按键的左箭头。示例1:键入文本importpyautogui#获取当前鼠标坐标x,y=pyautogui.position()#鼠标左键单击pyautogui.click(x=x,y=y)#键入文本pyautogui.typewrite("hello,world!")示例2:用列表键入字符串和按键,按键常量将被识别为按键操作importpyautogui#先模拟输入字符串'a,b,c',然后模拟按下键盘的left、backspace、enter、f1键pyautogui.typewrite(['a','b','c','left','backspace','enter','f1'],interval=secs_between_keys)——查看键盘常量:pyautogui.KEYBOARD_KEYS2、pyautogui.write(message,interval=0.0)用于模拟键盘输入。主要用来输入字符串。当message参数为单个字符串,输入的是字符串;当参数为列表时,可以模拟按键。参数说明:message:要输入的文本字符串或列表。interval:模拟键盘输入的间隔时间(秒)。可选参数,默认为0.0。示例:importpyautogui   #使用列表参数键入"hello"并按下“enter”键, #注:用列表键入字符串时每次只能键入单个字母pyautogui.write(['h','e','l','l','o','enter'],interval=0.25)   #键入字符串pyautogui.write('world!',interval=0.25)3、pyautogui.press(keys,presses=1,interval=0.0)用于模拟按下和释放键盘按键。参数说明:keys:要按下和释放的按键,可以是字符串或字符串列表。例如,'a' 表示按下和释放键盘上的'a'键,['ctrl','c'] 表示按下和释放Ctrl+C。presses:模拟按下和释放按键的次数。可选参数,默认为1。interval:连续按键之间的间隔时间(秒)。可选参数,默认为0.0。例:importpyautogui   #模拟按下'a'键一次pyautogui.press('a',presses=1,interval=0.0)#模拟按下和释放Ctrl,c,重复3次,每次按键间隔0.5秒pyautogui.press(['ctrl','c'],presses=3,interval=0.5)4、pyautogui.keyDown(key,args...)用于模拟按下键盘上的一个键。参数:key:要按下的键的字符串表示,可以是字母、数字、特殊字符或键盘上的其他按键。例如,'a'表示按下'A'键,'ctrl'表示按下Ctrl键。你还可以同时按下多个键,例如'ctrlleft'表示按下左Ctrl键。args:可选的附加参数,用于指定按键时的一些额外操作。这些参数可以是字符串或整数。一些可能的参数包括:interval:按键之间的时间间隔,以秒为单位。指定按下键之后等待的时间,默认为0。logScreenshot:如果为True,将在按键之前记录当前屏幕的截图。默认为False。pause:在按下键之前的延迟时间,以秒为单位。默认为pyautogui.PAUSE的值。示例:importpyautogui#按下'A'键pyautogui.keyDown('a')#可选:等待一段时间pyautogui.sleep(1)#松开'A'键pyautogui.keyUp('a')5、pyautogui.keyUp(key,args...)用于模拟释放键盘上的一个键。参数:args:可选的附加参数,用于指定释放键时的一些额外操作。这些参数可以是字符串或整数。一些可能的参数包括:interval:释放键之间的时间间隔,以秒为单位。指定释放键之后等待的时间,默认为0。logScreenshot:如果为True,将在释放键之前记录当前屏幕的截图。默认为False。pause:在释放键之前的延迟时间,以秒为单位。默认为pyautogui.PAUSE的值。示例:importpyautogui#按住ctrl键pyautogui.keyDown('ctrl')#按下并松开一次a键pyautogui.press('a')#松开ctrl键pyautogui.keyUp('ctrl')#相当于Ctrl+A全选的作用——hold(pyautogui.KEYBOARD_KEYS)为了使按住某个键更加方便,hold()函数可以用作传递某个pyautogui.KEYBOARD_KEYS中的某个键作为上下文管理器,在with上下文管理器中这个键将被一直按住。例:importpyautoguiwithpyautogui.hold('shift'):    #相当于按Shift+左箭头3次    pyautogui.press(['left'],presses=3)6、pyautogui.hotkey(key1,key2,...,keys,interval=0.0,logScreenshot=False,pause=None)用于模拟按下多个按键组合,类似于按下快捷键的操作。参数:key1,key2,...,keys:要按下的按键,可以是字符串表示的单个按键,也可以是多个按键组合。例如,'ctrl'、'c'、'v',或者像('ctrl','c')表示同时按下Ctrl和C键。interval:按键之间的时间间隔,以秒为单位。指定按下每个按键之间的时间间隔,默认为0。logScreenshot:如果为True,将在按键之前记录当前屏幕的截图。默认为False。pause:在按下每个按键之前的延迟时间,以秒为单位。如果指定了,它将覆盖模块级别的全局PAUSE变量。默认为pyautogui.PAUSE的值。示例:importpyautoguipyautogui.click()#选中所有内容pyautogui.hotkey('ctrl','a')#复制pyautogui.hotkey('ctrl','c')#因前面全选了内容,此处要再次单击获取光标,否则复制一次的内容覆盖了之前的内容,就看不出有复制成功pyautogui.click()#粘贴pyautogui.hotkey('ctrl','v')也可以用keyDown()和keyUp()来组合模拟组合快捷键功能。——pyautogui.KEYBOARD_KEYS['\t','\n','\r','','!','"','#',','%','&',"'",'(',')','*','+',',','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','','?','@','[','\\',']','^','_','`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','{','|','}','~','accept','add','alt','altleft','altright','apps','backspace','browserback','browserfavorites','browserforward','browserhome','browserrefresh','browsersearch','browserstop','capslock','clear','convert','ctrl','ctrlleft','ctrlright','decimal','del','delete','divide','down','end','enter','esc','escape','execute','f1','f10','f11','f12','f13','f14','f15','f16','f17','f18','f19','f2','f20','f21','f22','f23','f24','f3','f4','f5','f6','f7','f8','f9','final','fn','hanguel','hangul','hanja','help','home','insert','junja','kana','kanji','launchapp1','launchapp2','launchmail','launchmediaselect','left','modechange','multiply','nexttrack','nonconvert','num0','num1','num2','num3','num4','num5','num6','num7','num8','num9','numlock','pagedown','pageup','pause','pgdn','pgup','playpause','prevtrack','print','printscreen','prntscrn','prtsc','prtscr','return','right','scrolllock','select','separator','shift','shiftleft','shiftright','sleep','space','stop','subtract','tab','up','volumedown','volumemute','volumeup','win','winleft','winright','yen','command','option','optionleft','optionright']共194个KEYBOARD_KEYS键盘常量。消息弹窗函数PyAutoGUI通过Tkinter实现了4种纯Python的消息弹窗函数,和JavaScript类似。1、pyautogui.alert(text='',title='',button='OK')显示一个简单的带文字和OK按钮的消息弹窗。用户点击后返回button的文字。参数说明:text(可选):弹出框中显示的文本内容,可以是字符串。默认为空字符串。title(可选):弹出框的,可以是字符串。默认为空字符串。button(可选):弹出框上显示的按钮文本,可以是字符串。默认为'OK'。示例:importpyautogui#显示一个简单的弹出框pyautogui.alert('这是一个示例弹出框','提示','好的')2、pyautogui.confirm(text='',title='',buttons=['OK','Cancel'])显示一个简单的带文字、OK和Cancel按钮的消息弹窗,用户点击后返回被点击button的文字,支持自定义数字、文字的列表。参数说明:text(可选):确认框中显示的文本内容,可以是字符串。默认为空字符串。title(可选):确认框的,可以是字符串。默认为空字符串。buttons(可选):确认框上显示的按钮文本,是一个列表,其中包含要显示的按钮文本。默认为['OK','Cancel']。示例:importpyautogui#显示一个简单的弹出框pyautogui.confirm('这是一个示例弹出框','提示',range(10)3、pyautogui.prompt(text='',title='',default='')可以输入的消息弹窗,带OK和Cancel按钮。用户点击OK按钮返回输入的文字,点击Cancel按钮返回None。参数说明:text(可选):提示框中显示的文本内容,可以是字符串。默认为空字符串。title(可选):提示框的,可以是字符串。默认为空字符串。default(可选):提示框中文本输入框的默认值,可以是字符串。默认为空字符串。示例:importpyautogui#获取用户输入的用户名username=pyautogui.prompt('请输入用户名:','输入',default='')#根据用户输入进行相应的操作ifusername:    print('用户输入的用户名是:',username)else:    print('用户点击了取消按钮')4、pyautogui.password(text='',title='',default='',mask='*')样式同prompt(),用于输入密码,消息用*表示。带OK和Cancel按钮。用户点击OK按钮返回输入的文字,点击Cancel按钮返回None。参数说明:text(可选):提示框中显示的文本内容,可以是字符串。默认为空字符串。title(可选):提示框的,可以是字符串。默认为空字符串。default(可选):提示框中密码输入框的默认值,可以是字符串。默认为空字符串。mask(可选):用于掩盖用户输入的掩码字符,可以是单个字符。默认为 '*'。示例:importpyautogui#获取用户输入的密码password=pyautogui.password('请输入密码:','输入',mask='A')#根据用户输入进行相应的操作ifpassword:    print('用户输入的密码是:',password)else:    print('用户点击了取消按钮')截屏函数PyAutoGUI可以截屏并保存为图片文件,然后定位这些截屏在屏幕上的位置。与sikuli类似,把屏幕上的按键截取下来,然后定位,就可以执行点击等操作了。截屏功能需要安装Pillow模块。OSX用screencapture命令,是系统自带的。Linux用户用scrot命令,可以通过sudoapt-getinstallscrot安装。1、pyautogui.screenshot(region=(left,top,width,height))用于获取屏幕上的截图并可保存为文件。参数说明:region(可选):指定截图的区域,是一个包含左上角坐标 (left,top) 和宽度高度 (width,height) 的元组。默认为整个屏幕的区域。返回值:返回一个 IL.Image 对象,可以使用PIL(PythonImagingLibrary)中的方法进行进一步的处理和保存。示例1:screenshot()函数会返回Image对象(参考Pillow或PIL模块文档),也可以设置文件名importpyautoguiimg1=pyautogui.screenshot()img2=pyautogui.screenshot('img2.png')示例2:在一个$1920\times1080$的屏幕上,screenshot()函数要消耗100微秒——不快也不慢。如果你不需要截取整个屏幕,还有一个可选的region参数。你可以把截取区域的左上角XY坐标值和宽度、高度传入截取。importpyautoguiimg1=pyautogui.screenshot()img2=pyautogui.screenshot('img.png',region=(0,0,300,300))示例3:importpyautogui#获取整个屏幕的截图screenshot=pyautogui.screenshot()#保存截图screenshot.save('screenshot.png')#获取屏幕某个区域的截图region_screenshot=pyautogui.screenshot(region=(100,100,300,300))#显示截图region_screenshot.show()定位函数从0.9.41版本开始若未找到指定图片的定位,会引发ImageNotFoundException异常而不是返回None。你可以用图片来定位你在屏幕上看到的东西,如查找屏幕上是否打开了计算器:如果你不知道计算器按钮在屏幕上的具体坐标,就无法调用moveTo()和click()函数来操作它。不管计算器位于屏幕哪个位置,或随时会变换位置,只要你有计算器按钮的图片就可以实时定位它的位置,如按钮7:你可以调用locateOnScreen('calc7key.png')函数来定位它的坐标。函数会返回一个包含4个整数的元组。这个元组可以传递给center()函数以获取在这个区域中心点的x和y坐标,如果屏幕中无法定位到这个图片则会引发图片未找到异常。1、pyautogui.locateOnScreen(image,grayscale=False,confidence=0.8)用于在屏幕上定位给定图像的第一个匹配项的位置。这对于图形用户界面(GUI)自动化特别有用,因为它允许脚本通过识别屏幕上的图像来找到并点击按钮、图标或其他界面元素。参数:image (str或PIL.Image.Image):要查找的图像的文件路径或 illow (PIL) Image 对象。grayscale (bool,可选):是否将图像转换为灰度格式以加速查找过程。默认为 False,即使用彩色图像进行匹配。confidence (float,可选):图像匹配的置信度水平,范围从0.0到1.0。只有OpenCV安装后才可用,并且 image 参数必须是一个文件路径(不能是PILImage对象)。此参数允许函数在找到匹配项时具有一定的容错性。默认为 0.8,但如果未安装OpenCV,则忽略此参数。PS:务必使用confidence参数,否则很难匹配到指定图像的位置使用 confidence 参数,还需要安装 opencv-python 库。你可以使用 pip 来安装它们:pipinstallpyautoguiopencv-python返回值:如果找到匹配项,则返回一个四元素的元组,表示匹配图像区域的左上角坐标(x,y)和其宽度和高度(width,height)。如果未找到匹配项,则返回 None。或者直接报错:pyautogui.ImageNotFoundException示例:importpyautogui   #假设你有一个名为'button.png'的图像文件,你想要在屏幕上找到它 #PS:务必使用confidence参数,否则很难匹配到指定图像的位置location=pyautogui.locateOnScreen('user.png',confidence=0.8)   iflocationisnotNone:     #如果找到了图像,获取其坐标,并可以执行点击等操作     x,y,width,height=location     print(f'找到图像,位置:{x},{y},宽度:{width},高度:{height}')     pyautogui.click(x+width//2,y+height//2) #点击图像的中心 else:     print('未在屏幕上找到图像')——pyautogui.center(coords) 获取一个坐标区域中中心点x和y的坐标。参数说明:coords:一个包含4个整数的元组(可以先用locateOnScreen()获取指定图片的位置区域,再传递给center()获取区域的中心点)例:importpyautogui#输出计算器按钮7的中心点x和y坐标print(pyautogui.center(pyautogui.locateOnScreen('calc7key.png',confidence=0.8)))#Point(x=275,y=647)2、locateCenterOnScreen(image,grayscale=False,confidence=0.8)用于找到屏幕上特定图像的中心位置。参数:image (str或PIL.Image.Image):要查找的图像的文件路径或 illow (PIL) Image 对象。grayscale (bool,可选):是否将图像转换为灰度格式以加速查找过程。默认为 False,即使用彩色图像进行匹配。confidence (float,可选):图像匹配的置信度水平,范围从0.0到1.0。只有OpenCV安装后才可用,并且 image 参数必须是一个文件路径(不能是PILImage对象)。此参数允许函数在找到匹配项时具有一定的容错性。默认为 0.8,但如果未安装OpenCV,则忽略此参数。返回值:如果找到匹配项,则返回一个四元素的元组,表示匹配图像区域的左上角坐标(x,y)和其宽度和高度(width,height)。如果未找到匹配项,则返回 None。或者直接报错:pyautogui.ImageNotFoundException示例:importpyautoguilocation=pyautogui.locateCenterOnScreen('111.png',grayscale=False,confidence=0.8)print(location)输出:Point(x=115,y=233)3、locateAllOnScreen(image,grayscale=False,confidence=0.8)用于在给定的图像或屏幕上找到所有匹配的子图像或目标。参数:image (str或PIL.Image.Image):要查找的图像的文件路径或 illow (PIL) Image 对象。grayscale (bool,可选):是否将图像转换为灰度格式以加速查找过程。默认为 False,即使用彩色图像进行匹配。confidence (float,可选):图像匹配的置信度水平,范围从0.0到1.0。只有OpenCV安装后才可用,并且 image 参数必须是一个文件路径(不能是PILImage对象)。此参数允许函数在找到匹配项时具有一定的容错性。默认为 0.8,但如果未安装OpenCV,则忽略此参数。返回值:locations:一个列表,包含所有屏幕中找到的图像的位置(例如,坐标)。如果没有找到任何匹配项,则可能返回一个空列表。示例:importpyautoguiforiinpyautogui.locateAllOnScreen('111.png',grayscale=False,confidence=0.8):    print(i)输出:Box(left=92,top=207,width=46,height=52)#print(i.left)=92Box(left=168,top=207,width=46,height=52)Box(left=168,top=308,width=46,height=52)Box(left=92,top=409,width=46,height=52)Box(left=522,top=589,width=46,height=52)Box(left=602,top=589,width=46,height=52)4、locate(needleImage, haystackImage, grayscale=False)返回找到的第一个截图Image对象在haystackImage里面的坐标(left,top,width,height),如果没找到引发ImageNotFoundException异常。参数:needleImage:要定位的图片路径(如计算器按钮7)haystackImage:被定位的图片路径(如屏幕截图)示例:importpyautogui#保存当前屏幕截图pyautogui.screenshot('current.png')#查找按钮7在前面保存截图中的位置print(pyautogui.locate('7.png','current.png'))5、locateAll(needleImage,haystackImage,grayscale=False)返回找到的所有相同截图Image对象在haystackImage里面的坐标(left,top,width,height)的生成器locateall函数都可以用for循环或list()列表输出:>>>importpyautogui>>>forposinpyautogui.locateAllOnScreen('someButton.png')...  print(pos)...(1101,252,50,50)(59,481,50,50)(1395,640,50,50)(1838,676,50,50)>>>list(pyautogui.locateAllOnScreen('someButton.png'))[(1101,252,50,50),(59,481,50,50),(1395,640,50,50),(1838,676,50,50)]这些'locate'函数都很消耗资源,他们会用4秒来运行。最好的办法是指定一个区域参数,以避免在整个屏幕中搜索。>>>import pyautogui>>>pyautogui.locateOnScreen('someButton.png',region=(0,0,300,400))灰度值匹配可以把grayscale参数设置为True来加速定位(大约提升30%),默认为False。这种去色(desaturate)方法可以加速定位,但是也可能导致假阳性(false-positive)匹配:>>>import pyautogui>>>button7location= pyautogui.locateOnScreen('calc7key.png',grayscale=True)>>>button7location(1416,562,50,41)像素匹配要获取截屏某个位置像素点的RGB颜色值,可以用Image对象的getpixel()方法:>>>import pyautogui>>>im= pyautogui.screenshot()>>>im.getpixel((100,200))(130,135,144)也可以用PyAutoGUI的pixel()函数,是之前调用的包装:>>>import pyautogui>>>pix= pyautogui.pixel(100,200)>>>pixRGB(red=130,green=135,blue=144)>>>pix[0]130>>>pix.red1301、pyautogui.pixel(x,y)用于获取屏幕上的指定像素点的颜色值。参数说明:x 和 y:表示像素点的坐标。示例:importpyautoguirgb=pyautogui.pixel(100,200)print(rgb)#(239,235,239)如果你只是要检验一下指定位置像素点的RGB颜色值,可以用pixelMatchesColor()函数,把X、Y和RGB元组值穿入即可:2、pyautogui.pixelMatchesColor(x,y,expected_red,expected_green,expected_blue[,tolerance])用于检查屏幕上的指定像素点的RGB颜色是否与指定的RGB颜色值匹配。参数说明:x 和 y:表示像素点的坐标。expected_red、expected_green 和 expected_blue:分别表示期望的像素点的RGB颜色值中的红色、绿色和蓝色分量。tolerance(可选参数):一个整数,表示颜色匹配的容差范围。默认值为0。示例:importpyautoguiisMatch=pyautogui.pixelMatchesColor(100,200,(130,135,144),tolerance=0.9)print(isMatch)#False四、其他函数1、pyautogui.sleep(seconds)        休眠秒数,同time.sleep()函数功能。到此Python中PyAutoGUI的帮助文档就介绍完了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 05:48 , Processed in 1.167514 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表