【问题标题】:Python code to automate desktop activities in windows用于在 Windows 中自动执行桌面活动的 Python 代码
【发布时间】:2012-08-03 05:59:10
【问题描述】:

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

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

【问题讨论】:

标签: python windows user-interface ui-automation


【解决方案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 窗口绑定):

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

  2. AutoIt -- 一种自动化脚本语言:Calling AutoIt Functions in Python

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

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 多个易于使用的功能:

        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 的开发者之一

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-09
          • 1970-01-01
          • 2017-07-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多