书籍《Python编程快速上手(第2版)》阅读心得12、用GUI自动化控制键盘和鼠标(2)
[复制链接]
本帖最后由 xinmeng_wit 于 2024-6-7 20:35 编辑
除了上一篇讲到的获取屏幕尺寸,移动鼠标指针以外,pyautogui模块还有很多其它的功能,这一篇继续探索好玩有趣的内容。
既然能移动鼠标指针,那么肯定也能点击鼠标,拖动鼠标和滚动鼠标滚轮。
单击鼠标可以通过调用pyautogui.click()方法来实现,该方法可以指定单击的位置坐标和按键(left,middle,right)。
还可以调用pyautogui.doubleClick()实现双击,pyautogui.rightClick()实现右击,pyautogui.middleClick()实现滚轮单击。
另外,pyautogui模块还可以通过调用pyautogui.dragTo()和pyautogui.drag()方法实现鼠标的拖动,拖动意味着按着鼠标左键不放移动鼠标位置。
pyautogui.scroll()方法用来滚动鼠标,滚动多少单位可以通过参数来指定。
接下来,通过一个程序例子来说明这些方法。
import pyautogui, time
# 单击鼠标,位置(10 , 5)
pyautogui.click(10, 5)
# 延时5s
time.sleep(5)
# 单击,激活窗口
pyautogui.click()
# 在画板上画图
distance = 300
change = 20
while distance > 0:
pyautogui.drag(distance, 0, duration=0.2) # 鼠标向右拖动
distance = distance - change
pyautogui.drag(0, distance, duration=0.2) # 鼠标向下拖动
pyautogui.drag(-distance, 0, duration=0.2) # 鼠标向左拖动
distance = distance - change
pyautogui.drag(0, -distance, duration=0.2) # 鼠标向上拖动
# 滚动鼠标
pyautogui.scroll(200)
上面程序在画板上画出的图形如下,左右两幅图选择的画笔不一样,还是蛮有趣的。
除了以上内容,pyautogui还能获取屏幕上指定位置的RGB值,同时能判断该RGB值是否与给定值相等,这个方法可以用来识别按钮的颜色,如果按钮的颜色与预期的颜色相匹配就可以执行点击操作,如果不匹配,说明窗口位置移动了,不能点击。
import pyautogui
# 获取(0,0)位置的颜色
print(pyautogui.pixel(0,0))
# 匹配(0,0)位置的颜色,如果匹配则返回True,如果不匹配返回False
print(pyautogui.pixelMatchesColor(0,0,(125, 182, 191)))
运行结果:
为了方便python程序很好的识别要点击的窗口,pyautogui模块提供了一些接口用于获取窗口信息,和操作窗口。
详细的接口说明已经写在了代码注释里,就不过多解释了。
import pyautogui,time
# 获取当前活动窗口
fw = pyautogui.getActiveWindow()
# 打印窗口信息
print(str(fw))
# 获取title
print(fw.title)
# 获取窗口大小
print(fw.size)
# 调整窗口宽度为800
fw.width = 800
# 窗口是否最大化,返回True/False
print(fw.isMaximized)
# 窗口是否最小化,返回True/False
print(fw.isMinimized)
# 窗口是否激活,返回True/False
print(fw.isActive)
# 最大化窗口
fw.maximize()
# 撤销最大化操作
fw.restore()
# 等待5s
time.sleep(5)
# 关闭窗口
fw.close()
运行结果:
等待5s后,窗口自动关闭了。
除了对鼠标和窗口的操作,最后一个部分,还可以对键盘进行操作,模拟键盘的按下,这个功能能实现程序控制打字。
模拟按键接口很简单,只需调用pyautogui.write()方法就能实现任意按键的输入。
我们可以用python程序在记事本中自动打出字符串“Hello world!”,运行程序后,记得将光标放在记事本界面
import pyautogui,time
# 等待5s,用于准备
time.sleep(5)
# 模拟键盘输入
pyautogui.write('Hello world!', 0.25)
运行以上程序后,就会在记事本中打印出对应的字符串。
除了这种简单的字母以外,pyautogui模块还能模拟回车键(‘enter’),esc键(‘esc’),shift键等等。
各种按键对应的pyautogui里面的字符/字符串列表如下:
除了pyautogui.write()方法能模拟按键信号以外,还有几个方法也可以模拟按键的按下和松开的行为,如pyautogui.keyDown(),pyautogui.keyUp(), pyautogui.press()
pyautogui.keyDown()表示按键按下,不松开,pyautogui.keyUp()表示按键松开,pyautogui.press()表示按下后,再松开。
这三个方法对模拟键盘的组合键非常有用。
看个例子:
import pyautogui,time
pyautogui.keyDown('shift')
pyautogui.press('4')
pyautogui.keyUp('shift')
运行上面的代码,就能输出美元符号,模拟了shift + 4 的组合键。
用这种方式来实现组合键还是很麻烦,因为要写多行代码,pyautogui模块的作者应该是考虑到了这个问题,所有又提供了一个专门模拟组合键的方法,就是pyautogui.hotkey()方法。
这个方法,只需要按顺序传入对应的键值就可以完成组合键的按下释放了,非常方便。
例如下面的一行代码就能模拟按下键盘ctrl + c组合键。
pyautogui.hotkey('ctrl', 'c')
是不是特别方便。
好了,到这里本章的GUI自动化控制鼠标和键盘就结束了,本章的内容其实是非常有趣的,给用python做GUI自动化的朋友很多的启发和帮助,也希望各位朋友以后能有机会用在自己的项目中,提高工作效率,解放双手,早日脱离加班的苦海,按时下班,享受生活!!!
|