用于在Windows中自动执行桌面活动的Python代码

sta*_*ion 23 python windows user-interface ui-automation

我想使用Python在Windows环境中自动执行桌面活动.怎么做?一些例子也会有所帮助.

通过桌面活动,我指的是诸如控制鼠标和键盘,访问活动窗口属性,双击桌面上的图标,最小化和最大化窗口,通过键盘将数据输入到输入弹出窗口等操作.

slo*_*oth 19

看看SIKULI.

Sikuli是一种使用图像(屏幕截图)自动化和测试图形用户界面(GUI)的可视化技术.

SIKULI使用非常聪明的组合截取屏幕截图,并将它们嵌入到你的python(实际上是jython)脚本中.


截图:

在此输入图像描述

并在您的代码中使用它们:

在此输入图像描述

  • 项目这还是一件事吗?该网站似乎不再可用。 (4认同)

ree*_*ece 8

在Windows中有不同的自动化用户界面方法,可以通过Python访问(使用ctypes或部分Python窗口绑定):

  1. 原始窗口API - Get/SetCursorPos用于鼠标,HWND API,如GetFocusGetForegroundWindow

  2. AutoIt- 一种自动化脚本语言:在Python中调用AutoIt函数

  3. Microsoft Active Accessibility(MSAA)/ WinEvent - 用于通过Win95中的辅助功能API查询UI的API.

  4. UI/Automation(UIA) - MSAAVista中引入的替代品(适用于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()
Run Code Online (Sandbox Code Playgroud)

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.

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

MSAAUIAAPI不支持鼠标右键点击,所以你需要使用一个Win32 API来触发它.

MSAA模型不支持treeview层次结构信息 - 它将其显示为平面列表.另一方面,UIA只会枚举可见的元素,因此您将无法访问UIA树中折叠的元素.


Tyt*_*tus 8

你可以试试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)
Run Code Online (Sandbox Code Playgroud)

可以在此处找到可用命令的完整列表.

免责声明:我是Automa的开发人员之一.

  • 注意:当前版本(PyPI 上的 0.1.21)不支持 Python 3.x,并且自 2011-05-24 以来尚未更新。 (2认同)