想写一个自动化操作WX的程序
碰到有些控件不知如何定位到
比如下面这个 【48条新消息】的按扭,如何定位到,并点击呢
inspect 它的层级结构
参考 https://blog.csdn.net/robbyzhan/article/details/126818209
不建议去折腾,github上有个著名的第三方插件:微信小助手,迭代了好多个版本后,被企鹅请去喝茶了,原作者删除代码库。后被他人克隆继续迭代,不久之后也被企鹅警告,并且使用该插件的部分人还被永久或10年封禁微信账号。
同时,企鹅明确禁止第三方客户端或插件,若果发现,封禁账号。
项目地址:
工作中资源更新需要重复行操作软件,这不符合程序的一贯作风,所以使用pywinauto 这个python 模块,实现自动化操作软件。只需鼠标一点,就可以不用管了。是不是很方便。
1当前的需求: 技术人员在每次资源更新的时候,需要重复操作软件来进行版本号的制作,安装包的制作,希望减少这种工作量。
2 用到的工具 pycharm + Unity
我可以为您提供一个大致的解决方案来使用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
自动化操作桌面应用,需要对该应用的一些控件进行了解,但是这属于未开原的知识点,比较难实现呢
一些快速定位控件标识符的方法:
使用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
app = Application(backend="uia").start("微信.exe")
main_window = app.window(class_name="WeChatMainWndForPC")
使用Spy++或类似工具确定控件的属性,如控件名称、类名、父窗口等。
使用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进行自动化操作时,要快速定位到控件,可以使用以下几种方法:
使用控件的类名和标题进行定位:
from pywinauto import Application
app = Application().connect(class_name='窗口类名', title='窗口标题')
dlg = app['窗口标题']
btn = dlg['按钮标题']
btn.click()
使用控件的顺序进行定位:
from pywinauto import Application
app = Application().connect(class_name='窗口类名', title='窗口标题')
dlg = app['窗口标题']
btn = dlg.child_window(control_type='按钮', found_index=0)
btn.click()
使用控件的可识别属性进行定位:
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 点击未读信息:一旦定位到未读信息,您可以将其呈现在模拟器或真机上,并通过自动化脚本模拟用户操作来点击未读信息。
需要注意的是,由于微信的接口和功能可能会随时更新和变化,因此您需要定期检查代码和更新接口和脚本,以确保其正常运行。同时,为了遵守微信的使用规定和隐私政策,您需要确保您的自动化脚本不会对用户造成干扰或侵犯用户的隐私。