26

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

桌面活动是指控制鼠标和键盘、访问活动窗口属性、双击桌面上的图标、最小化和最大化窗口、通过键盘向输入弹出窗口输入数据等操作。

4

6 回答 6

22

看看斯库力

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

SIKULI 使用了一种非常巧妙的组合截屏,并将它们嵌入到您的 python(实际上是jython)脚本中。


截图:

在此处输入图像描述

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

在此处输入图像描述

于 2012-08-06T11:13:02.157 回答
8

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

  1. 原始 Windows API——Get/SetCursorPos用于鼠标、HWND APIGetFocusGetForegroundWindow

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

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

  4. 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 会将窗口恢复到最大化状态,因此您需要再次恢复它以使其恢复到正常/窗口状态。

和API 不支持鼠标右键点击,所以需要使用 aMSAA来触发。UIAWin32 API

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

于 2012-08-06T10:36:13.357 回答
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)

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

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

于 2013-07-20T07:10:59.710 回答
4

您可以使用PyAutoGUI,它提供了一种跨平台的 Python 方式来执行 GUI 自动化。

鼠标控制

这是将鼠标移动到屏幕中间的简单代码:

import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)

相关问题:使用 Python 控制鼠标

键盘控制

例子:

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

消息框功能

它提供了 JavaScript 样式的消息框。

和别的。


有关其他建议,请查看:用于模拟应用程序中的用户交互的 Python GUI 自动化库

于 2018-01-07T14:24:15.210 回答
1

看看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 库。

于 2021-08-24T14:23:44.350 回答
0

你可以试试ClointFusion

它又是一个基于 Python 的 RPA 平台,在内部使用PyAutoGUI以及其他包。

它有一个友好的基于浏览器的拖放 BOT 生成器:DOST

您可以找到 100 多个易于使用的功能:

  1. 6 个 gui 函数,可从用户那里获取任何输入
  2. 4个鼠标操作功能
  3. 窗口操作的 6 个功能(仅适用于 Windows 操作系统)
  4. 窗口对象的 5 个函数(仅适用于 Windows 操作系统)
  5. 8个文件夹操作功能
  6. Excel 运算的 28 个函数
  7. 3个键盘操作功能
  8. 屏幕抓取操作的 5 个功能
  9. 浏览器操作的 11 种功能
  10. 警报消息的 4 个功能
  11. 字符串操作的 3 个函数
  12. 大量与表情符号、拍照、闪光(弹出)消息等相关的杂项功能

免责声明:我是 ClointFusion 的开发者之一

于 2021-10-12T14:08:23.447 回答