pywinauto操作笔记

pywinauto教程

1. 环境安装

2. PC端元素定位工具介绍及判断backend

先用win32试一试,出错,改用uia试一试。记事本用uia出错。
  • Inspect
  • ViewWizard
  • Spy++

3. 启动并创建一个实例对象

  • 启动
    start(self, cmd_line, timeout=app_start_timeout) # 默认超时时间为5s
    app = Application(backend = 'uia').start(r"E:\Office\Office14\EXCEL.exe")
  • 连接
    app = Application().connect(process=2341)
    app = Application().connect(handle=0x010f0c)
    app = Application().connect(path=“D:\Office14\EXCEL.exe”)
    app = Application().connect(title_re=".*Notepad", class_name=“Notepad”)

4. 窗口、对话框及控件元素定位方式

  • 窗口、对话框定位
    wind_1 = app.窗口名或类名 # 只能适应于英文系统
    wind_2 = app["窗口名或类名"] #适应于非英文系统
    app.window(class_name = ‘Notepad’) # 关键字 title, title_re,class_name_re等
  • 控件定位
    可以通过print_control_identifiers()这个方法,来获取这个窗口下的直接子控件
    app["窗口名"]["控件名"] # 基于title定位
    app.window(class_name = ’Notepad’).window(class_name = ‘#32770’) # 层级定位
    app.window(class_name = ‘Notepad’).child_window(class_name = ‘#32770’)
    app_window.children()[1].children()[0].children()[0] .children()[2] #定位用户名输入框控件(序号从0开始查)

5. 常用方法

  • 窗口方法
    dlg.minimize()
    dlg.maximize()
    dlg.restore()
    dlg.close()
    dlg.get_show_state() #最大化是1,正常是0
    dlg.rectangle() # 返回窗口上下左右的xy坐标
  • 调试定位控件
    print_control_identifiers(depth = None, filename = None) #depth:打印的深度 filename:将返回的标识存成文件
    draw_outline(colour =’green’,thickness = 2)
    is_dialog 判断是否为dialog
  • 隐式等待
    wait(wait_for, timeout = None, retry_interval = None) # visible,ready: visible + enable
    wait_not(wait_for_not,timeout = None,retry_interval = None)
  • 输入框输入
    Dlg.control.type_keys(“xxxxx”)
  • 菜单栏
    app['窗口名或类名'].menu_select(Edit -> Replace)
  • 鼠标点击
    pywinauto. mouse 需要导入此模块
    move(coords=(x轴坐标,y轴坐标))
    mouse.click(button='left', coords=(40, 40)) # double_click
    mouse.right_click(coords=(400, 400))
    click()
    check() 勾选checkbox
    uncheck() 不勾选checkbox
    is_checked(勾选返回true,为勾选返回false,不定返回None)
    get_check_state() 返回checkbox的勾选状态(0没勾选,1勾选,2不定)
  • 键盘操作
    “+”:Shift
    “^”:Control
    “%”:Alt
    from pywinauto.keyboard import send_keys
    send_keys("^a") # 全选
    send_keys("{VK_RETURN}") # 回车

实例:

from pywinauto import application

app = application.Application(backend="win32") # 默认为win32,设置成‘uia’出错
app.start(r"notepad.exe")
app['Notepad'].wait('ready') # 'Notepad'为类名,用标题名“无标题 - 记事本”也可以,app.UntitledNotepad 也可以

app['Notepad'].menu_select("文件->页面设置...") # 不用加“.click()”,已经点击,“...”不能少
app['页面设置']['ComboBox1'].select(4)  # ComboBox1是第一个,ComboBox2是第二个,select从0开始
app['页面设置']['ComboBox1'].select("A5") #直接选择里面的项

app['页面设置']['取消'].click() # 按钮点击
app['页面设置']['Edit3'].set_edit_text("68") # Edit 置文本
app['页面设置']['Edit2'].type_keys("86")     # Edit 输入按键(输入的插入到前面)
posted @   越自律越自由  阅读(3856)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示