Python3使用pywinauto如何检测需要获取程序元素

 更新时间:2025年02月26日 09:16:33   作者:诸神缄默不语  
这篇文章主要为大家详细介绍了Python3使用pywinauto如何检测需要获取程序元素,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下

以微信为例。其实我是想找个可以用pywinauto操作全流程的例子但是没找到,所以就先操作定位窗口和查看控件两部分了。

因为我一开始是想用pywinauto操作关注微信公众号界面的,发现显示不出来……也就是说面对这种情况比较合适的解决方案是找别的工具,呃编程就是这样的,你要欣然接受新工具才对。

我下次遇到用pywinauto对程序内部进行操作的更具体的工具我再来写那一部分。

1. 安装包

pip install pywinauto

2. 检测需要如何获取程序元素的过程

1. 定位微信窗口

首先需要看微信这个进程打开了多少个窗口(这个title就是任务管理栏显示的进程标题,可以用正则表达式。如果是不会在任务管理栏显示,使用1.5节的代码):

代码:

from pywinauto import findwindows

# 查找所有匹配的窗口
windows = findwindows.find_elements(title='微信', backend='win32', visible_only=False)

# 打印所有匹配的窗口信息
for i, window in enumerate(windows):
    print(f"Window {i+1}:")
    print(f"  Title: {window.name}")
    print(f"  Class Name: {window.class_name}")
    print(f"  Handle: {window.handle}")
    print(f"  Process ID: {window.process_id}")
    print(f"  Rectangle: {window.rectangle}")
    print("-" * 50)

输出是:

Window 1:
  Title: 微信
  Class Name: TrayNotifyWnd
  Handle: omit
  Process ID: omit
  Rectangle: (L1334, T848, R1667, B1021)
--------------------------------------------------
Window 2:
  Title: 微信
  Class Name: WeChatMainWndForPC
  Handle: omit
  Process ID: omit
  Rectangle: (L0, T-2, R1920, B1020)
--------------------------------------------------
Window 3:
  Title: 微信
  Class Name: Chrome_WidgetWin_0
  Handle: omit
  Process ID: omit
  Rectangle: (L0, T0, R1920, B1020)
--------------------------------------------------

TrayNotifyWnd是一个通常用于托盘通知的窗口,Chrome_WidgetWin_0看起来像是一个基于 Chromium 引擎的窗口(可能是通过 Webview 或者嵌入式浏览器来实现的)。所以应该选择 Window 2,即 Class Name: WeChatMainWndForPC,这是微信的主界面窗口。

(↑这是我问ChatGPT得知的,所以如果你不确定的话,直接也问ChatGPT就vans。直接设置visible_only参数为True应该也没问题)

如果进程不在任务管理栏显示,通过psutil获取所有进程的标题来找到所需进程

这个当然首先假设你这个进程是有标题的,而且你能猜到这标题是什么意思……

代码是:

import psutil

for proc in psutil.process_iter():
    try:
        print(proc.name())
    except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
        pass

2. 连接微信窗口并查看其中的可操作项

代码中的omit就是Window 2的Handle值:

from pywinauto import Application

app=Application(backend="uia").connect(handle=omit)
dlg=app.window(title="微信")
dlg.print_control_identifiers()

backend还可以换成win32

connect()函数还可以通过标题作为参数,如果用正则表达式的话参数就是title_re

dlg也可以用top_window()函数来获取。还有一个函数是windows(),这里面第一个也是这个指定窗口。

print_control_identifiers()参数默认应该是打印所有内容,可以设置depth参数来设置打印多少层。

需要注意的是如果直接运行这个代码会导致运行慢而且打印过多,反正我是没打印完,因为它会把所有聊天记录什么的全都打印出来。

但是我在关注公众号界面(也就是我本来想实现自动化操作的界面)打印控件又打印不出东西,打印出来是这样的:

Control Identifiers:

Dialog - '微信'    (L0, T-2, R1920, B1020)
['Dialog', '微信', '微信Dialog']
child_window(title="微信", control_type="Window")

到此这篇关于Python3使用pywinauto如何检测需要获取程序元素的文章就介绍到这了,更多相关Python3 pywinauto获取程序元素内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python opencv判断图像是否为空的实例

    python opencv判断图像是否为空的实例

    今天小编就为大家分享一篇python opencv判断图像是否为空的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python使用PyCrypto实现AES加密功能示例

    Python使用PyCrypto实现AES加密功能示例

    这篇文章主要介绍了Python使用PyCrypto实现AES加密功能,结合具体实例形式分析了PyCrypto实现AES加密的操作步骤与相关实现技巧,需要的朋友可以参考下
    2017-05-05
  • 详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系

    详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系

    这篇文章主要介绍了详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python中关于CIFAR10数据集的使用

    python中关于CIFAR10数据集的使用

    这篇文章主要介绍了python中关于CIFAR10数据集的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • pygame学习笔记之设置字体及显示中文

    pygame学习笔记之设置字体及显示中文

    游戏界面中文字也是非常常见的元素之一,pygame专门提供了Font模块来支持文字的显示,下面这篇文章主要给大家介绍了关于pygame学习笔记之设置字体及显示中文的相关资料,需要的朋友可以参考下
    2022-07-07
  • 使用Python实现广告点击率预测

    使用Python实现广告点击率预测

    广告点击率是指有多少用户点击了您的广告与有多少用户查看了您的广告的比率,本文主要为大家介绍了如何使用Python实现广告点击率预测,感兴趣的小伙伴可以了解下
    2023-10-10
  • 在python中将list分段并保存为array类型的方法

    在python中将list分段并保存为array类型的方法

    今天小编就为大家分享一篇在python中将list分段并保存为array类型的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python实现程序的单一实例用法分析

    Python实现程序的单一实例用法分析

    这篇文章主要介绍了Python实现程序的单一实例用法,较为详细的分析了Python窗口的相关操作技巧,需要的朋友可以参考下
    2015-06-06
  • 一篇文章彻底搞懂Python魔法参数args和kwargs(通俗易懂)

    一篇文章彻底搞懂Python魔法参数args和kwargs(通俗易懂)

    这篇文章主要介绍了Python中的*args和**kwargs,它们分别是可变位置参数和可变关键字参数,文章通过实际例子展示了如何在函数、装饰器等场景中使用*args和**kwargs,帮助读者理解并掌握这些灵活的参数处理方式,需要的朋友可以参考下
    2025-02-02
  • 如何使用Python自动控制windows桌面

    如何使用Python自动控制windows桌面

    这篇文章主要介绍了如何使用Python自动控制windows桌面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论