Pywinauto-0.6.8 学习总结笔记 Windows 电脑端软件GUI鼠标键盘Python自动化办公、测试、重复性工作、运维

  1. 初学任何技能不要一上来就各种买买买视频、囤课、计划等不会进步的操作,建议先学习,并请多使用搜索引擎,乃至现在有很多免费的 AI !
  2. 搜:xxx技能怎么学?学习不是小马过河问如何过河,何况该东西是存在的,存在即自然,所以很多你能看到的知识都是拿来即用。
  3. 最好找官方文档,或基础操作教程等,从基础去出发,我写笔记之前看的比较杂,用的最多的还只是那些基础操作。
  4. 请牢记:掌握方法和原理与熟练的使用是两个不同的阶段,先大致看一遍,然后打开有关 Markdown 语言相关的笔记软件开始整理与思考。
  5. 用简单的一句话就是:掌握一项技能建议先学习。
  • 如:学 Python 3
  • 学:满足日常学习和提升需求,用简练的语言说清楚问题。
  • 习:摆脱基础、语法,重点关注算法、架构、性能,乃至内部实现。
  • 以上均以思想为支撑,超脱语言老套路,构建并完善为中心。
  1. 学:通过阅读、听讲、观察、思考、理解等途径获得知识。
  2. 习:探索、研究、实验、实践技能的过程。
  3. 本笔记是指南还是指北,需要各位看官自行断决: 半部论语治天下,请自行思考并当下考虑~
  • 本人学习、整理的笔记个人YY为比较直观,用词刺眼,如有冒犯,多多见谅。

推荐辅助工具:Windows - SDK - inspect,微软官方:https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/ 点击 Download the installer 等待下载好,安装时尽管点下一步。

inspect 安装之后先重启电脑,否则打开 inspect 可能会卡死并且该软件不工作。重启后请在我的电脑依次打开:C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64 (注意:10.0.22621.0 是我自己目前电脑最新的版本号,请根据你的电脑来,否则就不是说依次打开了!) 在 x64 的文件夹下找到 inspect.exe 建议右击 - 发送到 - 桌面快捷方式 。
公众号:人生只不过是一场投资


Pywinauto是一个开源的Python库,用于自动化Windows GUI(图形用户界面)应用程序。该库提供了简单且强大的接口,可以模拟用户在Windows应用程序中的操作,如点击按钮、输入文本、选择菜单项等。Pywinauto适用于各种类型的Windows应用程序,包括传统的Win32应用程序、基于MFC的应用程序、.NET应用程序以及最新的UWP(通用Windows平台)应用程序。能做什么?

  1. GUI元素的识别和操作;
  2. 跨应用程序的自动化;
  3. 脚本化测试;
  4. 数据采集与分析;
  5. 界面操作的宏录制。

零、窗口控件常见分类

控件的分类,才能更好的知道需要用什么方法来控制窗口的控件!例如:

  • 找到窗口之后,使用 window.print_control_identifiers() (其中 window 就是你找到的窗口赋值的变量),将控制台打印出来的文本复制到一个 .txt 文件里,根据软件上的一些文字等信息参考,找到你需要查找到的控件,代码使用 window['我的控件的class_name'] (这个class_name 在 txt 文档里显示的是一个列表,列表里面的东西!但要注意:当查找的控件只有一个的时候,要保证它是唯一性的!)访问它,并且到文档里找对应的控件的方法(也是函数!)

  • 注意事项:本总结内容根据所有控件常用且通用的方法进行总结,更多详细的请参考:输入模块类、用户模块类、控件模块 等

  • 在测试或者自动化程序 GUI 的时候,如果遇到需要(多线程、多进程)多开测试的情况,请注意减少该 GUI 程序窗口的变动,例如:需要在聊天窗口输入文字但是调用输入法这种情况,或者搜索的时候会先弹出一个选择框;其他情况请自行测试。

    首先要知道 win32 模式下,鼠标点击、文字输入的时候,可以是静默操作的,在 uia 模式下就不一定,当然,还要实际情况测试看看被测试的程序的 GUI 控件是否支持!最好的解决方法:利用 Pywinauto 的 backend 参数。本人献丑,写一段自己都看不懂的代码给各位看官笑一笑:

    from pywinauto import Application
    from win32gui import FindWindow
    
    
    class SoftWare(Application):
    
        def __init__(self, backend="uia"):
            super().__init__(backend=backend)
            self.win32_window = None
        
        def connect(self, **kwargs):
            """
            :param kwargs: 窗口参数
            """
            if 'class_name' in kwargs and kwargs['class_name'] is not None:
                class_name = kwargs['class_name']
            else:
                class_name = "xxxx"
            if 'title' in kwargs and kwargs['title'] is not None:
                title = kwargs['title']
            else:
                title = "xxxx"
                    
      		# 注意 FindWindow 找不到显示的窗口,返回可能是 0 !如果没有显示出来的窗口找到不是 0 ,后续的代码要注意加入判断 top_window 的状态是什么,具体参考本文的【五、应用程序窗口操作方法】
            handle = FindWindow(class_name, title)
                
            # Application() 的 backend 默认 win32 。
            win32_window = Application().connect(handle=handle, found_index=0)
            self.win32_window = win32_window.top_window()
            return super().connect(handle=handle, **kwargs)
    

准备工作:

from pywinauto.application import Application
from pywinauto.application import ProcessNotFoundError


class test(Application):
    def __init__(self, backend="uia", datafilename=None, allow_magic_lookup=True):
        super().__init__(backend=backend, datafilename=datafilename, allow_magic_lookup=allow_magic_lookup)
        self.app = None

    def connect(self, path, top_win_name=None, timeout=5):
        try:
            super().connect(path=path, timeout=timeout)
            self.app = self.top_window()

        except ProcessNotFoundError:
            super().start(cmd_line=path, timeout=timeout)
            self.app = self[top_win_name]
            self.app.wait(wa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ょ镜花う水月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值