【问题标题】:Automate Windows GUI operations with Python使用 Python 自动化 Windows GUI 操作
【发布时间】:2011-01-22 04:13:39
【问题描述】:

我想制作一个 Python 脚本来自动执行在 Windows XP 中设置 VPN 服务器的过程,但我知道如何做到这一点的唯一方法是使用 Windows GUI 对话框。我将如何弄清楚这些对话框对系统做了什么并设计一个 Python 脚本来自动化它?

【问题讨论】:

标签: python winapi


【解决方案1】:

您还可以使用 pywinauto 进行 GUI 自动化。

编辑:现在似乎有用于创建脚本的 GUI,swapy

【讨论】:

    【解决方案2】:

    您可以尝试使用Automa - 它是一个可用作 python 库的 Windows 自动化工具:

    from automa.api import *
    

    然后您可以使用诸如 start(..)、click(..) 和 enter(..) 之类的命令在 UI 上进行操作。您还可以从其自己的控制台窗口将该工具用作独立应用程序。如果 GUI 元素的名称不明显,Automa 提供了一个名为 get_name_under_mouse() 的函数 - 您可以将鼠标悬停在任何 GUI 元素上以查找其名称。

    披露:我参与了Automa 的开发

    【讨论】:

    • 请注意 Automa 不是免费的,您从网上下载的版本是有时间限制的试用版。如果您不愿意为它支付许可证,请不要使用 Automa 构建任何东西。
    • 截至 2021 年,上述链接已失效,无法在 web 和 github 上跟踪它们。上面的链接被重定向到一些垃圾邮件网站。请求 SOF 验证内容。
    【解决方案3】:

    看看SIKULI - 有一些报告称在 Windows 中的操作不够完美,但它真的很容易玩弄并启动和运行一个简单的脚本。

    【讨论】:

    • 似乎它确实适用于 python。但是使用 Jython。看起来真的很酷。它还有一个 IDE,您几乎可以在其中输入和粘贴图像youtube.com/watch?v=WGEX0dz_f_w&t=23s。这家伙做了一些非常复杂的事情,而且似乎与操作系统和应用程序无关..
    • @swanson,sikuli 与 pywinauto 或 pyautogui 或 autopy 相比如何?
    【解决方案4】:

    您可以使用SendKeys 将击键发送到相关对话框,如果您还需要鼠标操作,则可以使用a few extra tricks

    或者,您可以使用StraceNT 来监控在您手动浏览对话框时进行的所有系统调用,并使用 Python win32 extensionsctypes 在 Python 中重现它们。

    【讨论】:

    • 我认为 strace 是我需要的,但我认为它不会起作用,因为一切都发生在资源管理器中。有太多的事情要隔离正确的电话。有什么建议吗?
    • sendkeys 网站目前已关闭,值得一提的是 Automa 是一个商业包 - 99 美元供个人使用。
    【解决方案5】:

    了解如何使用命令(在命令行上)执行您想要的操作,并改为编写这些命令的脚本。

    【讨论】:

    • 这似乎是最好的主意,但我不知道如何通过命令行执行此操作。知道我应该从哪里开始寻找吗?
    • @tehr,我不熟悉您使用的工具,但我认为这在 MSDN 上的某个地方隐藏了一些东西
    • Microsoft 并不总是可以通过命令行来完成任务。您可以(通常)希望的最好结果是可以从 PowerShell 或 VBScript 调用您需要调用的 API 函数。有些任务虽然在 GUI 中很简单,但需要完成大量的编程工作(多个对象创建/配置等)。简而言之:有时(甚至是笨拙的)GUI 自动化是完成您需要的唯一可行的方法。
    • 同意.. 使用命令行可能是最强大的方法,但对于许多第 3 方程序.. API 可能不可用。对于那些程序,你将如何通过命令行运行它?
    【解决方案6】:

    PyAutoGUI 可以通过 PyPI 的 pip 安装。它是跨平台的,可以控制鼠标和键盘。它具有 pywinauto 的功能以及更多功能。它无法识别窗口或 GUI 控件,但它确实具有基本的屏幕截图和图像识别功能,可以单击特定按钮。而且它有据可查并得到很好的维护。

    pip install pyautogui

    【讨论】:

      猜你喜欢
      • 2011-02-26
      • 2012-01-22
      • 2020-10-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      相关资源
      最近更新 更多