引言:
在自动化桌面应用程序时,能够准确地定位和操作窗口是至关重要的技能。Pywinauto 提供了强大的功能,帮助我们根据窗口的标题、控件的类型、控件的位置等条件来定位和操作目标窗口。今天我们将重点学习 窗口定位 和 鼠标点击 的相关操作。
1. 窗口定位与操作
在 Pywinauto 中,窗口定位 是通过窗口的属性(如窗口标题、类名、控件类型等)来找到目标窗口。Pywinauto 提供了几种常用的方式来定位窗口和其控件。
1.1 按照窗口标题定位
最常见的方式是通过 窗口标题 来定位一个窗口。Application().window() 方法允许我们通过指定标题来获取一个窗口。
from pywinauto import Application
# 启动记事本
app = Application().start("notepad.exe")
# 获取标题为“无标题 - 记事本”的窗口
notepad_window = app.window(title="Untitled - Notepad")
# 检查窗口是否已经可见
notepad_window.wait('visible')
# 窗口操作:输入文本
notepad_window.Edit.type_keys("Hello, Pywinauto!", with_spaces=True)
在此示例中,app.window(title="Untitled - Notepad") 会找到标题为“无标题 - 记事本”的窗口,并进行进一步的操作。
1.2 按照窗口类名定位
除了标题,还可以通过窗口的 类名 来定位窗口。class_name 属性帮助我们找到类名相同的窗口,适用于多个相似窗口的情况。
# 根据类名查找窗口(例如记事本的类名通常是 "Notepad")
notepad_window = app.window(class_name="Notepad")
notepad_window.wait('visible')
notepad_window.Edit.type_keys("Testing class_name locator.", with_spaces=True)
1.3 使用其他定位方式
Pywinauto 还提供了通过 控件的其他属性(如控件类型、控件的文本等)来定位窗口或控件。你可以使用 child_window() 方法来根据控件的各种属性进行查找。
# 查找窗口中的 "编辑" 控件
edit_control = notepad_window.child_window(control_type="Edit")
edit_control.type_keys("Text in the Edit control.", with_spaces=True)
2. 鼠标点击操作
Pywinauto 支持通过鼠标模拟点击操作,可以进行单击、双击、右键点击等。以下是一些常见的鼠标点击操作。
2.1 单击操作
最常见的操作是通过鼠标单击控件。例如,我们可以模拟点击窗口中的按钮、菜单项或其他控件。
# 模拟点击“文件”菜单
notepad_window.menu_select("File")
如果需要对控件进行更精确的点击操作,可以使用 click_input() 来模拟鼠标单击。
# 模拟点击记事本中的“编辑”区域
notepad_window.Edit.click_input()
# 点击“文件”菜单中的“打开”项
notepad_window.menu_select("File->Open")
2.2 双击操作
如果你需要模拟双击,可以使用 double_click_input() 来实现。
# 双击“文件”菜单
notepad_window.menu_select("File").double_click_input()
# 双击桌面上的一个文件图标(假设文件路径)
desktop_window = app.window(title="File Explorer")
desktop_window.child_window(control_type="Tree").get_item('Desktop').double_click_input()
2.3 右键点击
右键点击常用于打开上下文菜单。我们可以使用 right_click_input() 来模拟右键点击。
# 右键点击“编辑”区域
notepad_window.Edit.right_click_input()
# 右键点击菜单中的项并选择操作
notepad_window.menu_select("File").right_click_input()
2.4 鼠标拖放操作
有时候我们需要模拟 鼠标拖放 操作,例如在文件资源管理器中移动文件。Pywinauto 提供了 drag_mouse_input() 和 drop_mouse_input() 方法来模拟拖放操作。
# 模拟鼠标拖动操作
source = notepad_window.child_window(title="Untitled - Notepad")
destination = desktop_window.child_window(title="Desktop")
source.drag_mouse_input(to=destination)
3. 完整示例:自动化文件保存
我们将结合今天学到的知识,编写一个完整的脚本,模拟使用记事本的文件保存操作,涵盖窗口定位、鼠标点击以及输入文本。
from pywinauto import Application
# 启动记事本
app = Application().start("notepad.exe")
# 获取记事本窗口
notepad_window = app.window(title="Untitled - Notepad")
# 等待窗口可见
notepad_window.wait('visible')
# 输入文本
notepad_window.Edit.type_keys("Automated text input for Day 4.", with_spaces=True)
# 打开“文件”菜单并点击“另存为”
notepad_window.menu_select("File->Save As")
# 获取“另存为”对话框窗口
save_as_window = app.window(title="Save As")
# 等待窗口可见
save_as_window.wait('visible')
# 输入文件路径和文件名
save_as_window.Edit.type_keys("C:\\Users\\User\\Desktop\\day4_note.txt", with_spaces=True)
# 点击“保存”按钮
save_as_window.Save.click_input()
# 检查文件是否成功保存(这里可以检查文件是否存在等)
print("File saved successfully on Desktop.")
4. 总结
我们学习了 窗口定位 和 鼠标点击操作。具体包括:
- 使用窗口标题、类名和控件属性来定位目标窗口。
- 模拟常见的鼠标点击操作:单击、双击、右键点击、鼠标拖放等。
- 编写了一个完整的自动化脚本,通过鼠标点击实现记事本的文件保存操作。
明天,我们将进一步探讨 处理弹窗、错误处理 和 多窗口切换 等更高级的技巧。
本文暂时没有评论,来添加一个吧(●'◡'●)