• pywinauto的menu_select


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 weixin_38295174 2024-04-05 15:02 采纳率: 0% 浏览 1 首页/ 编程语言 / pywinauto的menu_select python开发语言 app = Application(backend="uia").start("notepad.exe") window = app.window(title='无标题 - 记事本') window.wait("ready",10,1) window.menu_select('帮助(H) -> 关于记事本(A)') 按照教程写的这几句,目的就是打开记事本菜单栏的帮助->关于记事本,但是一直在menu_select的那行报错pywinauto.timings.TimeoutError:timed out,获取对应控件也获取不到(打印控件结构的图只显示到最顶级菜单栏,不显示具体选项),现在的状况是操作记事本的时候,只能操作到“文件”、“编辑”、“格式”这一栏,对于点击之后的下拉菜单就是选不中,请教大佬们是哪里出错了?怎么修改? 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    2条回答 默认 最新

    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-05 15:02
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      根据你描述的情况,可能有几个原因导致无法选择具体的菜单项:

      1. 定位菜单项失败:可能是由于菜单项的属性或者名称发生了变化,导致无法准确地定位到菜单项。解决方案是确认菜单项的属性和名称是否正确,可以先使用print_control_identifiers()函数来查看记事本窗口的控件结构和属性,以确保正确地定位到需要选择的菜单项。

      2. 等待超时:由于菜单项加载或者响应需要一定的时间,可能是在指定的时间内没有成功加载出来,导致超时报错。解决方案是适当增加等待时间,可以通过调整window.wait("ready",10,1)中的等待时间来延长等待时间。

      3. 应用程序可能使用其他的UI框架:虽然你在代码中指定了使用backend="uia"来选择UIA(UI Automation)作为底层后端,但是仍然可能遇到应用程序使用其他UI框架的情况,导致无法正确地定位到菜单项。解决方案是尝试使用其他的后端,如backend="win32"或者backend="winforms"

      综上所述,解决这个问题的具体步骤如下:

      1. 确认菜单项的属性和名称是否正确,可以使用print_control_identifiers()函数来查看当前记事本窗口的控件结构和属性。

      2. 调整等待时间,适当延长等待时间,如window.wait("ready", 20, 1)

      3. 尝试更换其他的后端,如backend="win32"或者backend="winforms"

      修改后的代码示例:

      from pywinauto import Application
      
      app = Application(backend="uia").start("notepad.exe")
      window = app.window(title='无标题 - 记事本')
      window.wait("ready", 20, 1)
      window.menu_select('帮助(H) -> 关于记事本(A)')
      

      请根据具体情况尝试以上解决方案,并确保操作系统、应用程序和pywinauto版本的兼容性。如果问题仍然存在,请提供更多的详细错误信息和应用程序的相关信息,以便更好地帮助你解决问题。

      评论 编辑记录
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-05 15:02
      关注

      引自免费微信小程序:皆我百晓生

      首先,让我们了解一下这段Python代码所使用的库:pywinauto. 这是一个非常强大的库,可以用来自动化Windows应用程序的功能。

      代码运行时出现问题,其原因是当我们在MenuSelect方法中尝试从window.menu_select()返回的对象中获取控件结构时,遇到了时间限制。这里有一个解决方案:

      1. 修改一下窗口获取控件的方法。从window.menu_select()返回的是一个包含所有可选控件的数据结构。我们需要找到与我们要选择的操作相对应的按钮,并将它提取出来。
      2. 为每个可选按钮定义一个新的事件处理程序。在窗口的某个特定位置(比如窗口的边缘)放置这个事件处理器程序。
      3. 点击这些事件处理器程序时,跳转到对应的操作页面。然后,在弹出的菜单中选择操作类型。
      4. 在选择操作类型后,回到初始菜单栏,查看是否有新的操作选项。如果没有,那么操作就被取消了。

      下面是详细的步骤:

      import pywinauto as pwa
      
      def get_operation_menu():
          return {
              'File': {'command': 'Open', 'parameters': ['notepad.exe']},
              'Edit': {'command': 'Edit', 'parameters': []},
              'Format': {'command': 'Format Document'}
          }
      
      def handle_operation_page(operation):
          # 返回操作页面
          if operation == 'Open':
              return pwa.App('notepad.exe')
          elif operation == 'Edit':
              return pwa.App('notepad.exe')
          else:
              return None
      
      def select_operation():
          # 获取操作菜单
          menu = get_operation_menu()
      
          # 处理每个菜单项
          for key in menu.keys():
              # 创建一个新的事件处理器程序
              event_handler = handle_operation_page(key)
              # 如果没有对应的事件处理器程序,那么操作被取消
              if not event_handler:
                  continue
              # 设置用户活动
              event_handler()
              # 打印菜单项
              print(key)
      
      if __name__ == '__main__':
          select_operation()
      

      这个例子只是一个基本的框架,具体的实现可能会根据实际需求有所不同。例如,你可能需要添加更多的菜单项,或者改变事件处理器程序的响应方式。

      注意:这个例子使用了pwa库,这是一个基于Windows API的库,用于在PyQt5中创建和调试Windows应用程序。如果你想要使用其他库来实现类似的功能,你需要确保已经安装了相应的库。

      展开全部

      评论 编辑记录
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    Qt相关开源项目总结
    深度学习之使用CSDN的InsCode的服务器
    Spring Cloud搭建XXL-JOB任务调度平台
    蓝桥杯 国赛 答疑
    设计神经网络的基本原则,如何设计神经网络结构
    Hadoop启动缺失ResourceManager
    springboot+vue基于java的网上图书商城系统含卖家功能
    中睿天下&Coremail | 2023年Q3企业邮箱安全态势观察报告
    【MMDetection3D】MVXNet踩坑笔记
    如何获取淘宝sku详细信息 API接口
  • 原文地址:https://ask.csdn.net/questions/8083783