1. 走对路
在开始GUI之前,你应该知道如何避免可能发生的问题。可以通过以下方式来防止或恢复GUI自动化问题。
1) 通过注销关闭所有程序
停止失去控制的 GUI 自动化程序,最简单的方法可能是注销,这将关闭所有运行的程序。Windows上,注销的热键是:Ctrl+Alt+Delete。通过注销,你会丢失所有未保存的工作。
2) 暂停和自动防故障装置
使用pyautogui.PAUSE设置脚本在每次函数调用后暂停一会儿。让你有很短的时间窗口来控制鼠标和键盘。pyautogui 也有自动防故障功能。将鼠标移到屏幕的左上角,这将导致 pyautogui产生 pyautogui .FailSafeException 异常。示例:
>>> import pyautogui
>>> pyautogui.PAUSE = 1
>>> pyautogui.FAILSAFE = True
2. 控制鼠标移动
pyautogui 的鼠标函数使用 x、y 坐标。原点的 x、y 都是零,在屏幕的左上角。向右 x 坐标增加,向下 y 坐标增加。所有坐标都是正整数,没有负数坐标。
pyautogui.size()函数返回两个整数的元组,包含屏幕的宽和高的像素数。示例:
>>>import pyautogui
>>>pyautogui.size()
(1920, 1080)
>>>width, height = pyautogui.size()
1) 移动鼠标
pyautogui.moveTo(x,y,duration)函数将鼠标立即移动到屏幕的指定位置。x、y 坐标的整数值分别构成了函数的第一个和第二个参数。可选的 duration 整数或浮点数关键字参数,指定了将鼠标移到目的位置所需的秒数。如果不指定,默认值是零,表示立即移动(在 PyAutoGUI 函数中,所有的 duration 关键字参数都是可选的)。示例:
>>> importpyautogui
>>> fori in range(10):
pyautogui.moveTo(100,100, duration=0.25)
pyautogui.moveTo(200,100, duration=0.25)
pyautogui.moveTo(200,200, duration=0.25)
pyautogui.moveTo(100,200, duration=0.25)
pyautogui.moveRel()函数相对于当前的位置移动鼠标。pyautogui.moveRel() 也接受 3 个参数:向右水平移动多少个像素,向下垂直移动多少个像素,以及(可选的)花多少时间完成移动。为第一第二个参数提供负整数,鼠标将向左或向上移动。示例:
>>>import pyautogui
>>> fori in range(10):
pyautogui.moveRel(100,0, duration=0.25)
pyautogui.moveRel(0,100, duration=0.25)
pyautogui.moveRel(-100,0, duration=0.25)
pyautogui.moveRel(0,-100, duration=0.25)
2) 获取鼠标位置
pyautogui.position()函数,可以确定鼠标当前的位置。它将返回函数调用时,鼠标 x、y坐标的元组。示例:
>>>pyautogui.position()
(764, 240)
3. 控制鼠标交互
1) 点击鼠标
pyautogui.click()可以想计算机发送虚拟的鼠标点击。默认情况下,点击将使用鼠标左键,点击发生在鼠标当前所在位置。
如果希望点击在鼠标当前位置以外的地方发生,可以传入 x、y 坐标作为可选的第一第二参数。如果想指定鼠标按键,就加入 button 关键字参数,值分别为 'left'、'middle'或 'right'。示例:
>>>import pyautogui
>>>pyautogui.click(10, 5)
实现点击也可以调用pyautogui.mouseDown(),这只是按下鼠标按键,再调用 pyautogui.mouseUp(),这只是释放鼠标按键。为 了 进 一 步 方 便 ,pyautogui.doubleClick() 函 数 只 执 行 双 击 鼠 标 左 键 。pyautogui.rightClick()和pyautogui.middleClick() 函数将分别执行双击右键和双击中键。
2) 拖动鼠标
“拖动”意味着移动鼠标,同时按住一个按键不放。例如,可以通过拖动文件图标,在文件夹之间移动文件,或在日历应用中移动预约。
PyAutoGUI 提供了 pyautogui.dragTo() 和 pyautogui.dragRel() 函数,将鼠标拖动到一个新的位置,或相对当前位置的位置。dragTo() 和 dragRel() 的参数与moveTo() 和 moveRel() 相同:x 坐标/水平移动,y 坐标/垂直移动,以及可选的时间间隔,示例:
import pyautogui
import time
time.sleep(5)
# click to putdrawing program in focus
pyautogui.click()
distance = 200
while distance> 0:
# move right
pyautogui.dragRel(distance, 0,duration=0.2)
distance = distance - 5
# move down
pyautogui.dragRel(0, distance,duration=0.2)
# move left
pyautogui.dragRel(-distance, 0,duration=0.2)
# move up
distance = distance - 5
pyautogui.dragRel(0, -distance,duration=0.2)
运行结果:
3) 滚动鼠标
pyautogui.scroll()用于控制鼠标滚动。向它提供一个整型参数,说明向上或向下滚动多少单位。单位的意义在每个操作系统和应用上不一样。滚动发生在鼠标的当前位置。传递正整数表示向上滚动,传递负整数表示向下滚动。示例:
>>>pyautogui.scroll(200)
4. 处理屏幕
1) 获取屏幕快照
要在 Python 中获取屏幕快照,就调用 pyautogui.screenshot() 函数获得一个Image对象。示例:
>>> import pyautogui
>>> im = pyautogui.screenshot()
Image对象的用法和其他Image对象一致。
2) 分析屏幕快照
如果屏幕上指定的 x、y 坐标处的像素与指定的颜色匹配,PyAutoGUI 的pixelMatchesColor() 函数将返回 True。第一和第二个参数是整数,对应 x 和 y 坐标。第三个参数是一个元组,包含 3 个整数,是屏幕像素必须匹配的 RGB 颜色。
>>>import pyautogui
>>> im= pyautogui.screenshot()
>>>im.getpixel((50, 200))
(130, 135, 144)
>>>pyautogui.pixelMatchesColor(50, 200, (130, 135, 144))
True
>>>pyautogui.pixelMatchesColor(50, 200, (255, 135, 144))
False