用于在 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,如 GetFocusGetForegroundWindow

    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_MEMBERNOTFOUNDE_NOTIMPL

注意窗口的状态。如果窗口最大化然后最小化,restore 会将窗口恢复到最大化状态,因此您需要再次恢复它以使其恢复到正常/窗口状态。

MSAAUIA 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 代码的主要内容,如果未能解决你的问题,请参考以下文章

保持远程桌面会话“活动”[关闭]

python桌面应用(pyinstaller打包多个py文件)

远程登陆最小化或关闭 模拟键盘操作失效

使用活动目录组策略添加客户端端远程开机自动运行程序

检查Windows 7中的远程桌面连接是否处于活动状态

Ubuntu中Crontab定时执行python文件(可用于定时爬虫)