windwos自动化测试--pyautogui

windwos自动化测试–pyautogui

python模拟电脑-自动化

如何使用python模拟电脑自动化呢

1.首先我们需要下载第三方库——pyautogui,可以使用pip/pip3安装,或者在官网上下载压缩包安装。

2.我们要知道干什么,比如我们想要点击浏览器,需要手动双击,在打开浏览器,输入想要搜索的内容,在回车。类似这种selenium更简单化,但是遇到是小程序或者pc端的应用该如何是好呢。下面重点给大家介绍pyautogui的使用。

3.针对一台电脑上程序固定的位置如下操作,如果针对多台电脑,程序和显示不一致的时候,可以利用下面的定位。

鼠标控制功能

屏幕和鼠标位置
pyautogui.size()
# 屏幕分辨率大小由size()函数作为两个整数的元组返回。鼠标光标的当前 X 和 Y 坐标由position()函数返回。
鼠标移动
pyautogui.moveTo(100, 200) # 将鼠标移动到X/100,Y/200。
pyautogui.moveTo(None, 500)  # 将鼠标移动到X/100,Y/500。
pyautogui.moveTo(600, None) # 将鼠标移动到X/600,Y/500。
鼠标拖动
pyautogui.dragTo(100, 200, button='left') # x,y,秒,方向
补间/缓动函数
pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad) 	# 开始慢,结束快
pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad) 	# 开始快,结束慢
pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad) 	# 开始和结束快,中间慢
pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce) 	# 最后反弹
pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic) 	# 末端的
鼠标点击
# 点击鼠标
pyautogui.click() 

# 移动到100,200,然后单击鼠标左键。
pyautogui.click(x=100, y=200)

# 右击鼠标
pyautogui.click(button='right')

# 双击鼠标左键
pyautogui.click(clicks=2)

# 双击鼠标左键,但在两次单击之间有四分之一秒的停顿
pyautogui.click(clicks=2, interval=0.25)

# 三次单击鼠标右键,在单击之间暂停四分之一秒
pyautogui.click(button='right', clicks=3, interval=0.25)

# 执行左键双击
pyautogui.doubleClick()

# 执行与鼠标左键单击相同的操作
pyautogui.mouseDown(); pyautogui.mouseUp()

# 鼠标点击和拖动包括按下鼠标按钮和松开鼠标按钮。如果要分别执行这些操作,请调用mouseDown()和mouseUp()函数。它们具有相同的x, y, 和button
# 按下右边的按钮
pyautogui.mouseDown(button='right') 

# 将鼠标移动到100,200,然后向上释放右键。
pyautogui.mouseUp(button='right', x=100, y=200) 
鼠标滚动
# 向上滚动10次“点击”
pyautogui.scroll(10)

# 向下滚动10次“点击”
pyautogui.scroll(-10)

# 将鼠标光标移动到100,200,然后向上滚动10次“点击”
pyautogui.scroll(10, x=100, y=100) 

# 向右滚动10次“点击”
pyautogui.hscroll(10) 

# 向左滚动10次“点击”
pyautogui.hscroll(-10)

键盘控制功能

write() 函数
# 立即打印出“你好,世界!”
pyautogui.write('Hello world!')

# 打印“Hello world!”,每个字符后延迟四分之一秒
pyautogui.write('Hello world!', interval=0.25) 
press()、keyDown() 和 keyUp() 函数

# 按回车键
pyautogui.press('enter') 

 # 按F1键
pyautogui.press('f1')

# 按左箭头键
pyautogui.press('left')

# 按住shift键
pyautogui.keyDown('shift')

# 按左箭头键
pyautogui.press('left')

# 松开shift键
pyautogui.keyUp('shift') 

# 要按类似于什么的多个键write(),请将字符串列表传递给press()
pyautogui.press(['left', 'left', 'left'])

# 或者您可以设置按下多少次left
pyautogui.press('left', presses=3) 
hold() 上下文管理器
# 为了方便保存键,该hold()函数可以用作上下文管理器,并从、、pyautogui.KEYBOARD_KEYS等传递一个字符串,并且该键将在上下文块的持续时间内保持  **shift**,**ctrl**,**alt**,**with**
with pyautogui.hold('shift'):
        pyautogui.press(['left', 'left', 'left'])
上述相当于以下操作
pyautogui.keyDown('shift') # 按住shift键
pyautogui.press('left') # 按左箭头键
pyautogui.press('left') # 按左箭头键
pyautogui.press('left') # 按左箭头键
pyautogui.keyUp('shift') # 松开shift键
hotkey() 函数
pyautogui.hotkey('ctrl', 'shift', 'esc')
相当于以下代码:
pyautogui.keyDown('ctrl') # 按住ctrl键
pyautogui.keyDown('shift') # 按住shift键
pyautogui.keyDown('esc') # 按住esc键
pyautogui.keyUp('esc') # 松开esc键
pyautogui.keyUp('shift') # 松开shift键
pyautogui.keyUp('ctrl') # 松开ctrl键
KEYBOARD_KEYS
以下是有效字符串传递给press(),keyDown(),keyUp(),和hotkey()功能:
['\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']

消息框功能

alert() 函数
alert(text='', title='', button='OK')
# 显示一个带有文本和单个 OK 按钮的简单消息框。返回单击的按钮的文本。

# text文本内容,title标题,button确定键.
pyautogui.alert(text='你是狗?', title='你好', button='是')
确认()函数
confirm(text='', title='', buttons=['OK', 'Cancel'])
# 显示带有确定和取消按钮的消息框。可以自定义按钮的数量和文本。返回单击的按钮的文本。

# text文本内容,title标题,button确定键和取消键.
pyautogui.confirm(text='你是狗?', title='你好', buttons=['是', '否'])
prompt() 函数
prompt(text='', title='' , default='')
# 显示带有文本输入和确定和取消按钮的消息框。返回输入的文本,如果单击取消,则返回 None。

# text内容,title标题,default输入框
pyautogui.prompt(text='你是狗?', title='你好' , default='hello world') 
password() 函数
password(text='', title='', default='', mask='*')
# 显示带有文本输入和确定和取消按钮的消息框。键入的字符显示为*。返回输入的文本,如果单击取消,则返回 None。

# text内容,title标题,default密码,mask密码显示的样式
pyautogui.password(text='你是狗?', title='你好', default='1234567', mask='') 

截图功能

screenshot()函数
im1 = pyautogui.screenshot()
im2 = pyautogui.screenshot('my_screenshot.png')
# 在 1920 x 1080 屏幕上,该screenshot()函数大约需要 100 毫秒 - 速度不快但也不慢
im = pyautogui.screenshot(region=(0,0, 300, 400))
# region如果您不想要整个屏幕的屏幕截图,还有一个可选的关键字参数。可以传递一个区域的左、上、宽、高的四整数元组来捕获
定位功能

如果您有它的图像文件,您可以在屏幕上直观地找到它。
如果您不知道计算器按钮所在位置的确切屏幕坐标,则无法调用moveTo()和click()函数。应用程序每次启动时可能会出现在略有不同的位置,导致您每次都重新找到坐标。但是,如果您有按钮的图像,例如 计算机的数字7 按钮的图像:
…您可以调用该locateOnScreen(‘calc7key.png’)函数来获取屏幕坐标。返回值是一个 4 整数元组:(左、上、宽、高)。可以传递此元组center()以获取该区域中心的 X 和 Y 坐标。如果在屏幕上找不到图像,则locateOnScreen()引发ImageNotFoundException.

import pyautogui

button7location = pyautogui.locateOnScreen('calc7key.png')
print(button7location) # Box(left=1416, top=562, width=50, height=41)

print(button7location[0]) # 打印结果1416

print(button7location.left) # 打印结果1416

button7point = pyautogui.center(button7location)
print(button7point) # 打印结果Point(x=1441, y=582)
print(button7point[0]) # 打印结果1441
print(button7point.x) # 打印结果1441

button7x, button7y = button7point
pyautogui.click(button7x, button7y)  # 单击找到7按钮的中心
pyautogui.click('calc7key.png') # 单击7按钮所在位置的中心的快捷方式版本

可选的confidence关键字参数指定函数在屏幕上定位图像的准确性。如果由于像素差异可忽略不计,函数无法定位图像,这将很有帮助:

import pyautogui
button7location = pyautogui.locateOnScreen('calc7key.png', confidence=0.9)
print(button7location )# 打印结果Box(left=1416, top=562, width=50, height=41)

注意:您需要安装OpenCV才能使confidence关键字工作。
该locateCenterOnScreen()函数结合了locateOnScreen()和center():

import pyautogui
x, y = pyautogui.locateCenterOnScreen('calc7key.png')
pyautogui.click(x, y)

在 1920 x 1080 屏幕上,定位函数调用大约需要 1 或 2 秒。这对于动作视频游戏来说可能太慢了,但适用于大多数目的和应用程序。

locateOnScreen(image, grayscale=False)- 返回image屏幕上第一个找到的实例的(左、上、宽、高)坐标。ImageNotFoundException如果在屏幕上找不到,则引发。

locateCenterOnScreen(image, grayscale=False)- 返回image屏幕上第一个找到的 实例中心的 (x, y) 坐标。ImageNotFoundException如果在屏幕上找不到,则引发。

locateAllOnScreen(image, grayscale=False) - 返回一个生成器,该生成器为在屏幕上找到图像的位置生成(左、上、宽、高)元组。

locate(needleImage, haystackImage, grayscale=False)- 返回第一个找到的needleImagein实例的(左、上、宽、高)坐标haystackImage。

ImageNotFoundException如果在屏幕上找不到,则引发。

locateAll(needleImage, haystackImage, grayscale=False)- 返回一个生成器,该生成器为needleImage在haystackImage.

“定位所有”函数可用于 for 循环或传递给list():

import pyautogui

for pos in pyautogui.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)]

这些“定位”功能相当昂贵;他们可能需要整整一秒钟的时间才能运行。加速它们的最好方法是传递一个region参数(一个 4 整数元组(左、上、宽、高))来只搜索屏幕的较小区域而不是全屏

import pyautogui
pyautogui.locateOnScreen('someButton.png', region=(0,0, 300, 400))
灰度匹配

或者,您可以传递grayscale=True给 locate 函数以提供轻微的加速(大约 30% 左右)。这会降低图像和屏幕截图的颜色饱和度,加快定位速度,但可能会导致误报匹配。

import pyautogui

button7location = pyautogui.locateOnScreen('calc7key.png', grayscale=True)
print(button7location) # 打印结果(1416, 562, 50, 41)
像素匹配

要获取屏幕截图中像素的 RGB 颜色,请使用 Image 对象的getpixel()方法:

import pyautogui

im = pyautogui.screenshot()
print(im.getpixel((100, 200))) # 打印结果(130, 135, 144)

或者作为单个函数,调用pixel()PyAutoGUI 函数,它是之前调用的包装器

import pyautogui

pix = pyautogui.pixel(100, 200)
print(pix )# 打印结果RGB(red=130, green=135, blue=144)
print(pix[0]) # 打印结果130
print(pix.red) # 打印结果130

如果您只需要验证单个像素是否与给定像素匹配,请调用该pixelMatchesColor()函数,并将其表示的颜色的 X 坐标、Y 坐标和 RGB 元组传递给它:

import pyautogui

pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))
# 打印结果 True

pyautogui.pixelMatchesColor(100, 200, (0, 0, 0))
# 打印结果 False

可选的tolerance关键字参数指定每个红色、绿色和蓝色值在仍然匹配时可以变化的程度

import pyautogui

pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))
# 打印结果 True

pyautogui.pixelMatchesColor(100, 200, (140, 125, 134))
# 打印结果 False

pyautogui.pixelMatchesColor(100, 200, (140, 125, 134), tolerance=10)
# 打印结果 True
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值