用于在 Windows 中自动执行桌面活动的 Python 代码
Posted
技术标签:
【中文标题】用于在 Windows 中自动执行桌面活动的 Python 代码【英文标题】:Python code to automate desktop activities in windows 【发布时间】:2012-08-03 05:59:10 【问题描述】:我想使用 Python 在 Windows 环境中自动执行桌面活动。怎么做?一些示例也会有所帮助。
桌面活动是指控制鼠标和键盘、访问活动窗口属性、双击桌面上的图标、最小化和最大化窗口、通过键盘向输入弹出窗口输入数据等操作.
【问题讨论】:
您能否更具体地定义“桌面活动”或者一些示例? How can I control the keyboard and mouse with Python? 的可能重复项 这是一个很好的总结:gist.github.com/diyan/f3c24653e63c24c99137 @Eloims:你提到的问题是Mac/Linux,这个是Windows。 【参考方案1】:看看SIKULI。
Sikuli 是一种可视化技术,用于自动化和测试图形用户 使用图像(屏幕截图)的界面 (GUI)。
SIKULI 使用了一种非常巧妙的组合截屏,并将它们嵌入到您的 python(实际上是 jython)脚本中。
截图:
并在您的代码中使用它们:
【讨论】:
这还是项目吗?该网站似乎不再可用。【参考方案2】:你可以试试Automa。
这是一个用 Python 编写的 Windows GUI 自动化工具,使用非常简单。例如,您可以执行以下操作:
# to double click on an icon on the desktop
doubleclick("Recycle Bin")
# to maximize
click("Maximize")
# to input some text and press ENTER
write("Some text", into="Label of the text field")
press(ENTER)
可用命令的完整列表可以在here找到。
免责声明:我是 Automa 的开发人员之一。
【讨论】:
注意:当前版本(PyPI 上为 0.1.21)不支持 Python 3.x,并且自 2011-05-24 以来未更新。 现在有什么开源替代品吗?【参考方案3】:在 Windows 中有多种自动化用户界面的方法,可以通过 Python 访问(使用 ctypes
或一些 Python 窗口绑定):
原始窗口 API——Get/SetCursorPos
用于鼠标,HWND API,如 GetFocus
和 GetForegroundWindow
AutoIt
-- 一种自动化脚本语言:Calling AutoIt Functions in Python
Microsoft Active Accessibility (MSAA
) / WinEvent -- 通过 Win95 中的辅助功能 API 询问 UI 的 API。
UI/Automation (UIA
) -- Vista 中引入的 MSAA
的替代品(适用于 XP SP3 IIRC)。
自动化用户界面以对其进行测试是一项艰巨的任务。有很多陷阱会让你大吃一惊。
我建议以自动化方式测试您的自动化框架,以便您可以验证它是否在您正在测试的平台上工作(以识别自动化中的故障API
与应用程序中的故障)。
另一个考虑是如何处理本地化。另请注意,Minimize/Maximize/... 的名称也是本地化的,并且可以使用与应用程序不同的语言(系统与用户区域设置)!
在伪代码中,用于最小化应用程序的 MSAA
程序看起来像:
window = AccessibleObjectFromWindow(FindWindow("My Window"))
titlebar = [x for x in window.AccessibleChildren if x.accRole == TitleBar]
minimize = [x for x in titlebar[0].AccessibleChildren if x.Name == "Minimize"]
if len(minimize) != 0: # may already be minimized
mimimize[0].accDoDefaultAction()
MSAA
可访问项目存储为 (object: IAccessible, childId: int)
对。此处需要注意正确调用(例如get_accChildCount
仅使用IAccessible
,因此当childId
不为0 时,您必须返回0 而不是调用get_accChildCount
)!
IAccessible
调用可以返回不同的错误代码来指示"this object does not support this property"
——例如DISP_E_MEMBERNOTFOUND
或 E_NOTIMPL
。
注意窗口的状态。如果窗口最大化然后最小化,restore 会将窗口恢复到最大化状态,因此您需要再次恢复它以使其恢复到正常/窗口状态。
MSAA
和UIA
API 不支持鼠标右键单击,因此您需要使用Win32 API
来触发它。
MSAA
模型不支持树视图层次结构信息——它将其显示为平面列表。另一方面,UIA
只会枚举可见的元素,因此您将无法访问 UIA
树中折叠的元素。
【讨论】:
【参考方案4】:您可以使用PyAutoGUI,它提供了一种跨平台的 Python 方式来执行 GUI 自动化。
Mouse Control
下面是一个简单的代码将鼠标移动到屏幕中间:
import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)
相关问题:Controlling mouse with Python。
Keyboard Control
例子:
pyautogui.typewrite('Hello world!') # prints out "Hello world!" instantly
pyautogui.typewrite('Hello world!', interval=0.25) # prints out "Hello world!" with a quarter second delay after each character
Message Box Functions
它提供了 javascript 风格的消息框。
还有其他的。
其他建议,请查看:Python GUI automation library for simulating user interaction in apps。
【讨论】:
【参考方案5】:看看BotCity Framework,一个开源 RPA 框架。
它只是 python(没有中间代码,没有 jython 等)。
以下示例执行 SAP 并登录:
from botcity.core import DesktopBot
from botcity.maestro import AlertType, AutomationTaskFinishStatus, Column
class Bot(DesktopBot):
def action(self, execution):
self.execute("saplogon.exe")
# #image:"login"
if not self.find( "user", matching=0.97, waiting_time=10000):
self.not_found("user")
self.click_relative(172, 5)
self.paste(user)
self.tab()
self.paste(pass)
self.enter()
if __name__ == '__main__':
Bot.main()
作为 Sikuli,您拥有一个裁剪元素的工具,并获得有关界面和 UI 元素的视觉线索。但在这种情况下,它是一个用于编辑 .py 文件(不是中间代码)的工具,因此您可以在自动化中使用任何 python 库。
【讨论】:
【参考方案6】:你可以试试ClointFusion
这又是一个基于 Python 的 RPA 平台,在内部使用 PyAutoGUI 以及其他包。
它有一个友好的基于浏览器的拖放 BOT 构建器:DOST
您可以找到 100 多个易于使用的功能:
-
6 个 gui 函数可接收用户的任何输入
鼠标操作的4个功能
窗口操作的 6 个函数(仅适用于 Windows 操作系统)
窗口对象的 5 个函数(仅适用于 Windows 操作系统)
文件夹操作的 8 个函数
Excel 操作中的 28 个函数
3 种键盘操作功能
关于屏幕抓取操作的 5 个函数
浏览器操作的 11 个函数
关于警报消息的 4 个功能
字符串操作的 3 个函数
大量与表情符号、拍照、闪光(弹出)消息等相关的杂项功能
免责声明:我是 ClointFusion 的开发者之一
【讨论】:
以上是关于用于在 Windows 中自动执行桌面活动的 Python 代码的主要内容,如果未能解决你的问题,请参考以下文章