pywinauto如何快速定位到控件

想写一个自动化操作WX的程序
碰到有些控件不知如何定位到
比如下面这个 【48条新消息】的按扭,如何定位到,并点击呢

img

inspect 它的层级结构

参考 https://blog.csdn.net/robbyzhan/article/details/126818209

不建议去折腾,github上有个著名的第三方插件:微信小助手,迭代了好多个版本后,被企鹅请去喝茶了,原作者删除代码库。后被他人克隆继续迭代,不久之后也被企鹅警告,并且使用该插件的部分人还被永久或10年封禁微信账号。
同时,企鹅明确禁止第三方客户端或插件,若果发现,封禁账号。
项目地址:

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7484010
  • 这篇博客你也可以参考下:pywinauto WXWork(企业微信) 获取工作台中的信息
  • 除此之外, 这篇博客: Python学习(六) 史上最全Pywinauto模块自动化操作软件中的 1本文设计内容较多,但是都不难,都是干货。耐心看下文。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 工作中资源更新需要重复行操作软件,这不符合程序的一贯作风,所以使用pywinauto 这个python 模块,实现自动化操作软件。只需鼠标一点,就可以不用管了。是不是很方便。
    1当前的需求: 技术人员在每次资源更新的时候,需要重复操作软件来进行版本号的制作,安装包的制作,希望减少这种工作量。
    2 用到的工具 pycharm + Unity

  • 以下回答由chatgpt基于相关博客总结生成:

    我可以为您提供一个大致的解决方案来使用pywinauto来定位和点击一个标有【48条新消息】的按钮。以下是步骤:

    1.点击按钮。首先,您需要找到该按钮的控件属性,如按钮的窗口标题、控件类名、控件索引等。您可以使用Spy++或pywinauto中的print_control_identifiers()方法来获取这些属性。

    2.使用应用程序启动器。使用start方法从应用程序路径启动应用程序,并使用connect()方法连接到已经运行的应用程序的句柄。这将允许您操作应用程序的控件。

    from pywinauto.application import Application
    
    # 启动应用程序
    app = Application().start(r"path_to_your_application.exe")
    
    # 连接到应用程序的句柄
    app = Application().connect(path="path_to_your_application.exe")
    

    3.获取按钮控件。使用window()方法来找到应用程序的主窗口,然后使用child_window()方法找到按钮控件。

    # 获取主窗口
    main_window = app.window(title="main_window_title")
    
    # 获取按钮控件
    button = main_window.child_window(title="48条新消息")
    

    4.点击按钮。使用click_input()方法来模拟点击按钮。

    # 点击按钮
    button.click_input()
    

    以上步骤是一个大致的解决方案,可以根据您的具体情况进行调整和修改。请确保已经安装了pywinauto库。如果您遇到了困难或问题,请随时向我咨询。

pywinauto是一个用于自动化Windows应用程序的Python库。它提供了一种简单且可靠的方法来定位和操作桌面上的各种控件。

要定位到微信应用程序中的控件,你可以使用pywinauto库中的一些方法来实现。首先,你需要安装pywinauto库,可以通过在命令行运行pip install pywinauto来安装。

下面是一个使用pywinauto来定位和点击微信应用程序中的【48条新消息】按钮的示例代码:

from pywinauto.application import Application

# 启动微信应用程序
app = Application().start("微信.exe")

# 等待微信应用程序完全启动
main_window = app.window(title_re=".*微信")

# 定位【48条新消息】按钮
new_message_button = main_window.child_window(title="48条新消息", control_type="Button")

# 点击【48条新消息】按钮
new_message_button.click()

在上面的代码中,首先我们使用Application().start()方法启动微信应用程序,并保存对应的应用程序对象为app。然后,我们使用app.window()方法来获取微信的主窗口对象main_window,通过设置title_re参数来模糊匹配窗口的标题。

接下来,我们使用main_window.child_window()方法来定位【48条新消息】按钮,通过设置title参数来精确匹配按钮的标题,设置control_type参数为Button匹配按钮的控件类型。

最后,我们使用new_message_button.click()方法来模拟点击【48条新消息】按钮。

这样,当你运行以上代码时,程序将会自动打开微信应用程序并点击【48条新消息】按钮。

希望以上解释对你有帮助。

pywinauto 定位windows原生控件入门
可以参考下,
https://blog.csdn.net/robbyzhan/article/details/126818209

img

自动化操作桌面应用,需要对该应用的一些控件进行了解,但是这属于未开原的知识点,比较难实现呢

一些快速定位控件标识符的方法:
使用Spy++工具,使用Spy++可以快速找到控件的类名、句柄、标题等标识符。
pywinauto提供了一些方便的方法来查找控件,如通过控件的类名、标题、程序名称等进行查找。可以使用这些方法来快速定位控件标识符。使用UIUI Automation Spy是Microsoft提供的一个工具,可以用于检查Windows应用程序的UI元素。它可以快速找到控件的自动化ID、名称、控件类型等标识符。
pywinauto Recorder是一个录制脚本的工具,它可以自动化记录和识别控件的标识符。可以使用这个工具来快速定位控件标识符,并生成相应的pywinauto脚本。

可以通过相对位置识别定位

基于new bing部分指引作答:
在使用pywinauto进行自动化操作时,快速定位到控件是非常重要的。在定位控件时,可以使用控件的属性或者相对位置等信息来识别它们。

对于微信中的聊天窗口里有几十条未读消息的按钮,可以尝试以下方法来定位:

使用控件的文本信息定位:尝试使用按钮的文本信息,通常这个未读消息的按钮上可能会有一些文字标示,比如“未读消息”等。可以使用pywinauto的window_text属性或draw_outline()方法来查看控件的文本信息,然后用该文本信息进行定位。

from pywinauto import Application

# 启动微信应用
app = Application(backend="uia").start("wechat.exe")

# 等待微信窗口出现
main_window = app['微信']

# 使用控件的文本信息定位
unread_button = main_window.child_window(title="未读消息", control_type="Button")

1、使用控件的类名定位:控件的类名是控件的类型标识,微信中的按钮通常有独特的类名,可以使用这个类名来定位。

from pywinauto import Application

# 启动微信应用
app = Application(backend="uia").start("wechat.exe")

# 等待微信窗口出现
main_window = app['微信']

# 使用控件的类名定位
unread_button = main_window.child_window(class_name="SomeClassName")

2、使用相对位置定位:如果目标控件的父级窗口或者同级控件是可以唯一标识的,可以通过相对位置来定位目标控件。

from pywinauto import Application

# 启动微信应用
app = Application(backend="uia").start("wechat.exe")

# 等待微信窗口出现
main_window = app['微信']

# 使用相对位置定位
parent_window = main_window.child_window(title="聊天窗口标题", control_type="SomeType")
unread_button = parent_window.child_window(title="未读消息", control_type="Button")

在实际使用过程中,你可能需要对以上方法进行一些调试和修改,根据微信版本和控件的特征来找到最适合的定位方式。如果你遇到困难或者无法找到合适的定位方法,可以尝试使用print_control_identifiers()方法来查看控件的详细信息,帮助你更好地定位控件。

print(unread_button.print_control_identifiers()

随着微信版本的更新和界面的变化,控件的属性和位置可能会发生变化,因此在编写自动化脚本时,需要经常进行验证和调整。

源于chatGPT仅供参考

在使用pywinauto进行自动化操作时,可以使用以下方法定位到控件并点击它:

1. 导入pywinauto库:

```python
from pywinauto import Application
  1. 启动微信应用:
app = Application(backend="uia").start("微信.exe")
  1. 连接微信主窗口:
main_window = app.window(class_name="WeChatMainWndForPC")
  1. 使用Spy++或类似工具确定控件的属性,如控件名称、类名、父窗口等。

  2. 使用pywinauto的child_window()方法来定位到控件,然后调用click()方法来点击它。假设"48条新消息"按钮是在顶级窗口(main_window)下的一个直接子控件:

new_messages_button = main_window.child_window(title="48条新消息", control_type="Button")
new_messages_button.click()

这样,程序就会定位到"48条新消息"的按钮,并执行点击操作。

请注意,控件的定位可能需要根据实际情况进行调整和修改,具体的属性值取决于控件的特征。使用Spy++等工具可以帮助您获取更准确的控件属性信息。

```

以下答案参考newbing,回答由博主波罗歌编写:
在使用pywinauto进行自动化操作时,要快速定位到控件,可以使用以下几种方法:

  1. 使用控件的类名和标题进行定位:

    from pywinauto import Application
    
    app = Application().connect(class_name='窗口类名', title='窗口标题')
    dlg = app['窗口标题']
    btn = dlg['按钮标题']
    btn.click()
    
  2. 使用控件的顺序进行定位:

    from pywinauto import Application
    
    app = Application().connect(class_name='窗口类名', title='窗口标题')
    dlg = app['窗口标题']
    btn = dlg.child_window(control_type='按钮', found_index=0)
    btn.click()
    
  3. 使用控件的可识别属性进行定位:

    from pywinauto import Application
    from pywinauto import findwindows
    
    handle = findwindows.find_windows(class_name='窗口类名', title='窗口标题')[0]
    dlg = Application().window(handle=handle)
    btn = dlg.child_window(class_name='按钮类名', title='按钮标题')
    btn.click()
    

在上述代码中,需要将窗口类名窗口标题按钮标题等根据实际情况进行替换。其中,窗口类名可以使用全局类名,如'MainWindow';也可以使用具体类名,如'wxWindowClassNR'。按钮标题可以具体到按钮上显示的文本内容。

希望以上解答能帮到您。
如果我的回答解决了您的问题,请采纳!

以下是一个可能的实现方案:

1 开发接口:使用微信公众平台的开发接口,您可以通过编写代码来访问微信服务器上的数据和功能。具体来说,您可以使用微信接口中的“客服接口”来获取聊天记录,并使用“模板消息”接口来发送消息。
2 自动化脚本:使用自动化脚本来执行一系列操作,包括获取聊天记录、定位未读信息、点击未读信息等。您可以使用一些自动化测试工具,如Selenium、Appium等来编写自动化脚本。
3 定位未读信息:在获取聊天记录后,您需要定位未读信息。您可以使用微信接口返回的JSON数据中的相关字段来定位未读信息,例如“消息类型”、“消息时间”、“消息发送者”等。
4 点击未读信息:一旦定位到未读信息,您可以将其呈现在模拟器或真机上,并通过自动化脚本模拟用户操作来点击未读信息。

需要注意的是,由于微信的接口和功能可能会随时更新和变化,因此您需要定期检查代码和更新接口和脚本,以确保其正常运行。同时,为了遵守微信的使用规定和隐私政策,您需要确保您的自动化脚本不会对用户造成干扰或侵犯用户的隐私。