- 内容提要
- 作者简介
- 技术评审者简介
- 致谢
- 译者序 会编程的人不一样
- 前言
- 本书的读者对象
- 编码规范
- 什么是编程
- 本书简介
- 下载和安装 Python
- 启动 IDLE
- 如何寻求帮助
- 聪明地提出编程问题
- 小结
- 第一部分 Python 编程基础
- 第1章 Python 基础
- 第2章 控制流
- 第3章 函数
- 第4章 列表
- 第5章 字典和结构化数据
- 第6章 字符串操作
- 第二部分 自动化任务
- 第7章 模式匹配与正则表达式
- 第8章 读写文件
- 第9章 组织文件
- 第10章 调试
- 第11章 从 Web 抓取信息
- 第12章 处理 Excel 电子表格
- 第13章 处理 PDF 和 Word 文档
- 第14章 处理 CSV 文件和 JSON 数据
- 第15章 保持时间、计划任务和启动程序
- 第16章 发送电子邮件和短信
- 第17章 操作图像
- 第18章 用 GUI 自动化控制键盘和鼠标
- 附录A 安装第三方模块
- 附录B 运行程序
- 附录C 习题答案
18.9 控制键盘
pyautogui也有一些函数向计算机发送虚拟按键,让你能够填充表格,或在应用中输入文本。
18.9.1 通过键盘发送一个字符串
pyautogui.typewrite() 函数向计算机发送虚拟按键。这些按键产生什么效果,取决于当前获得焦点的窗口和文本输入框。可能需要先向文本输入框发送一次鼠标点击,确保它获得焦点。
举一个简单的例子,让我们用Python自动化在文件编辑窗口中输入Hello world!。首先,打开一个新的文件编辑窗口,将它放在屏幕的左上角,以便pyautogui点击正确的位置,让它获得焦点。然后,在交互式环境中输入以下内容:
>>> pyautogui.click(100, 100); pyautogui.typewrite('Hello world!')
请注意,在同一行中放两条命令,用分号隔开,这让交互式环境不会在两个指令之间提示输入。这防止了你在click() 和typewrite() 调用之间,不小心让新的窗口获得焦点,从而让这个例子失败。
Python首先在坐标(100,100)处发出虚拟鼠标点击,这将点击文件编辑窗口,让它获得焦点。typewrite() 函数调用将向窗口发送文本Hello world!,结果就像图18-3。现在有了替你打字的代码!
图18-3 用PyAutogGUI点击文件编辑器窗口,在其中输入 Hello world!
默认情况下,typewrite() 函数将立即打印出完整字符串。但是,你可以传入可选的第二参数,在每个字符之间添加短时间暂停。例如,pyautogui.typewrite('Helloworld!',0.25)将在打出H后等待1/4秒。打出e以后再等待1/4秒,如此等等。这种渐进的打字机效果,对于较慢的应用可能有用,它们处理击键的速度不够快,跟不上pyautogui。
对于A或!这样的字符,pyautogui将自动模拟按住Shift键。
18.9.2 键名
不是所有的键都很容易用单个文本字符来表示。例如,如何把Shift键或左箭头键表示为单个字符?在PyAutoGUI中,这些键表示为短的字符串值:'esc' 表示Esc键,'enter' 表示Enter。
除了单个字符串参数,还可以向typewrite() 函数传递这些键字符串的列表。例如,以下的调用表示按a键,然后是b键,然后是左箭头两次,最后是X和Y键:
>>> pyautogui.typewrite(['a', 'b', 'left', 'left', 'X', 'Y'])
因为按下左箭头将移动键盘光标,所以这会输出XYab。表18-1列出了pyautogui的键盘键字符串,你可以将它们传递给typewrite() 函数,模拟任何按键组合。
也可以查看pyautogui.KEYBOARD_KEYS列表,看看pyautogui接受的所有可能的键字符串。'shift' 字符串指的是左边的Shift键,它等价于 'shiftleft'。'ctrl'、'alt' 和 'win' 字符串也一样,它们都是指左边的键。
表18-1 PyKeyboard属性
键盘键字符串
含义
'a', 'b', 'c', 'A', 'B', 'C', '1', '2', '3', '!', '@', '#',等等
单个字符的键
'enter'(or 'return' or '\n')
回车键
'esc'
Esc键
'shiftleft', 'shiftright'
左右Shift键
'altleft', 'altright'
左右Alt键
'ctrlleft', 'ctrlright'
左右Ctrl键
'tab'(or '\t')
Tab键
'backspace', 'delete'
Backspace和Delete键
'pageup', 'pagedown'
Page Up和Page Down键
'home', 'end'
Home和End键
'up', 'down', 'left', 'right'
上下左右箭头键
'f1', 'f2', 'f3',等等
F1至F12键
'volumemute', 'volumedown', 'volumeup'
静音、减小音量、放大音量键(有些键盘没有这些键,但你的操作系统仍能理解这些模拟的按键)
'pause'
Pause键
'capslock', 'numlock', 'scrolllock'
Caps Lock,Num Lock和Scroll Lock键
'insert'
Ins或Insert键
'printscreen'
Prtsc或Print Screen键
'winleft', 'winright'
左右Win键(在Windows上)
'command'
Command键(在OS X上)
'option'
Option键(在OS X上)
18.9.3 按下和释放键盘
就像mouseDown() 和mouseUp() 函数一样,pyautogui.keyDown() 和pyautogui. keyUp() 将向计算发送虚拟的按键和释放。它们将根据参数发送键字符串(参见表18-1)。方便起见,pyautogui提供了pyautogui.press() 函数,它调用这两个函数,模拟完整的击键。
运行下面的代码,它将打印出美元字符(通过按住Shift键并按4得到):
>>> pyautogui.keyDown('shift'); pyautogui.press('4'); pyautogui.keyUp('shift')
这行代码按下Shift,按下(并释放)4,然后再释放Shift。如果你需要在文本输入框内打一个字符串,typewrite() 函数就更适合。但对于接受单个按键命令的应用,press() 函数是更简单的方式。
18.9.4 热键组合
“热键”或“快捷键”是一种按键组合,它调用某种应用功能。拷贝选择内容的常用热键是Ctrl-C(在Windows和Linux上)或⌘-C(在OS X上)。用户按住Ctrl键,然后按C键,然后释放C和Ctrl键。要用pyautogui的keyDown() 和keyUp() 函数来做到这一点,必须输入以下代码:
pyautogui.keyDown('ctrl') pyautogui.keyDown('c') pyautogui.keyUp('c') pyautogui.keyUp('ctrl')
这相当复杂。作为替代,可以使用pyautogui.hotkey() 函数,它接受多个键字符串参数,按顺序按下,再按相反的顺序释放。例如对于Ctrl-C,代码就像下面这样简单:
pyautogui.hotkey('ctrl', 'c')
对于更大的热键组合,这个函数特别有用。在Word中,Ctrl-Alt-Shift-S热键组合显示Style(样式)窗口。不必使用8次不同的函数调用(4次keyDown() 调用和4次keyUp() 调用),你只要调用hotkey('ctrl', 'alt', 'shift', 's')。
在屏幕的左上角打开一个新的IDLE文件编辑窗口,在交互式环境中输入以下内容(在OS X中,用 'ctrl' 代替 'alt'):
>>> import pyautogui, time >>> def commentAfterDelay(): ❶ pyautogui.click(100, 100) ❷ pyautogui.typewrite('In IDLE, Alt-3 comments out a line.') time.sleep(2) ❸ pyautogui.hotkey('alt', '3') >>> commentAfterDelay()
这定义了一个函数commentAfterDelay(),在被调用时,将点击文件编辑窗口,让它获得焦点❶,输出“In IDLE,Alt-3 comments out a line”❷,暂停2秒钟,然后模拟按下Alt-3热键(或OS X上的ctrl-3)❸。这个快捷键在当前行加上两个#字符,将它注释掉(在IDLE中编写你自己的代码时,这是一个有用的技巧,应该知道)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论