我想使用 Python 在 Windows 环境中自动执行桌面活动。怎么做?一些例子也会有所帮助。
桌面活动是指控制鼠标和键盘、访问活动窗口属性、双击桌面上的图标、最小化和最大化窗口、通过键盘向输入弹出窗口输入数据等操作。
我想使用 Python 在 Windows 环境中自动执行桌面活动。怎么做?一些例子也会有所帮助。
桌面活动是指控制鼠标和键盘、访问活动窗口属性、双击桌面上的图标、最小化和最大化窗口、通过键盘向输入弹出窗口输入数据等操作。
在 Windows 中有多种自动化用户界面的方法,可以通过 Python 访问(使用ctypes
或某些 Python 窗口绑定):
原始 Windows API——Get/SetCursorPos
用于鼠标、HWND APIGetFocus
和GetForegroundWindow
AutoIt
-- 一种自动化脚本语言:在 Python 中调用 AutoIt 函数
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_MEMBERNOTFOUND
或E_NOTIMPL
。
注意窗口的状态。如果窗口最大化然后最小化,restore 会将窗口恢复到最大化状态,因此您需要再次恢复它以使其恢复到正常/窗口状态。
和API 不支持鼠标右键点击,所以需要使用 aMSAA
来触发。UIA
Win32 API
该MSAA
模型不支持树视图层次结构信息——它将其显示为平面列表。另一方面,UIA
只会枚举可见的元素,因此您将无法访问UIA
树中折叠的元素。
你可以试试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 的开发人员之一。
您可以使用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 自动化库。
看看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 库。
你可以试试ClointFusion
它又是一个基于 Python 的 RPA 平台,在内部使用PyAutoGUI以及其他包。
它有一个友好的基于浏览器的拖放 BOT 生成器:DOST
您可以找到 100 多个易于使用的功能:
免责声明:我是 ClointFusion 的开发者之一