文章目录(Table of Contents)
简介
之前我们介绍过一个Python的浏览器自动化测试框架, Python selenium介绍. 但是他只能对浏览器进行测试, 更加宽泛的操作, 例如可以操作键盘和鼠标, 进行一些模拟人类行为的操作, 这个时候就需要使用另外一个Python的库了, PyAutoGUI.
这一篇简单介绍一下PyAutoGUI的使用, 包括控制键盘, 控制鼠标, 和屏幕的截图.
参考资料
- 官方文档: PyAutoGUI's documentation
- Github仓库链接: PyAutoGUI
鼠标控制
首先说明一下, PyAutoGUI是只能控制一个屏幕的. 也就是说, 如果是双显示器, 那么鼠标只能在主显示器上进行移动.
我们可以通过下面的代码, 来查看屏幕中各个位置对应的坐标是什么.
- import pyautogui, sys
- print('Press Ctrl-C to quit.')
- try:
- while True:
- 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)
- except KeyboardInterrupt:
- print('\n')
它可以显示显示器上每个位置对应的坐标是什么. 有了这个坐标, 就可以方便后面的点击操作.
鼠标的移动
关于鼠标的移动, 使用moveTo来进行完成. 我们看一下下面的例子. 下面的代码表示鼠标在2秒内, 移动到(100,200)的位置.
- pyautogui.moveTo(100, 200, 2) # moves mouse to X of 100, Y of 200 over 2 seconds
这里鼠标移动的速度是线性的, 也就是匀速移动. 我们可以对鼠标的移动速度进行改变. 详细的介绍看下面的例子.
- >>> pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad) # start slow, end fast
- >>> pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad) # start fast, end slow
- >>> pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad) # start and end fast, slow in middle
- >>> pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce) # bounce at the end
- >>> pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic) # rubber band at the end
鼠标的点击
在鼠标移动到某个位置之后, 我们需要进行点击的操作. 鼠标的点击通过click来完成. 下面是一个简单的例子.
- pyautogui.click() # click the mouse
当然, 鼠标的点击时可以控制左键还是右键的, 可以直接通过button来进行指定. 也可以控制点击的次数和点击的间隔时间.
- >>> pyautogui.click(clicks=2) # double-click the left mouse button
- >>> pyautogui.click(clicks=2, interval=0.25) # double-click the left mouse button, but with a quarter second pause in between clicks
- >>> pyautogui.click(button='right', clicks=3, interval=0.25) ## triple-click the right mouse button with a quarter second pause in between clicks
鼠标滚轮的操作
我们通过scroll来模拟鼠标的滚轮操作. 关于向上还是向下进行滚动, 是通过正负来进行改变的.
- >>> pyautogui.scroll(10) # scroll up 10 "clicks"
- >>> pyautogui.scroll(-10) # scroll down 10 "clicks"
键盘的操作
键盘的主要操作时write函数. 他可以键入各种字符串. 同时我们也是可以控制输入的时间.
- # prints out "Hello world!" with a quarter second delay after each character
- >> pyautogui.write('Hello world!', interval=0.25)
关于一些快捷键
有一些按键需要配合进行使用, 例如按住shift, 再按别的键. 这个时候就需要使用press, keydown和keyup了. 首先简单介绍一下这三个函数.
- press: 按下某个键
- keydown: 按住某个键
- keyup: 松开某个键
例如下面的例子, 我们进行了简单的说明
- >>> pyautogui.keyDown('shift') # hold down the shift key
- >>> pyautogui.press('left') # press the left arrow key
- >>> pyautogui.press('left') # press the left arrow key
- >>> pyautogui.press('left') # press the left arrow key
- >>> pyautogui.keyUp('shift') # release the shift key
若上面的操作觉得过于复杂, 我们可以直接使用hotkey函数. 例如下面的操作:
- >>> pyautogui.hotkey('ctrl', 'shift', 'esc')
他是等价于下面的6行代码的.
- >>> pyautogui.keyDown('ctrl')
- >>> pyautogui.keyDown('shift')
- >>> pyautogui.keyDown('esc')
- >>> pyautogui.keyUp('esc')
- >>> pyautogui.keyUp('shift')
- >>> pyautogui.keyUp('ctrl')
屏幕截图
关于屏幕截图, 可以直接使用screenshot函数来完成.
- im2 = pyautogui.screenshot('./my_screenshot.png')
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论