You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的pywinauto点击DAQ Viewer的Convert下拉菜单?

问题:pywinauto自动化老旧DAQ Viewer转换.dds文件至Excel失败

背景

我有三台锅炉一年的每小时蒸汽数据,单小时数据均存储为独立.dds文件。必须通过一款老旧的Data Acquisition Viewer(DAQ Viewer)打开文件并转存,才能导出数据。使用Python 3.10+pywinauto编写脚本时,循环打开第一个.dds文件的逻辑正常,但无法点击“Convert”下拉菜单;此前尝试用键盘TAB+ENTER定位该菜单也失败。怀疑问题源于两点:

  • DAQ Viewer版本过旧,与部分pywinauto函数不兼容
  • 文件在Viewer中以独立窗口打开,存在子窗口识别问题

可正常运行的代码

import os
import time
import pywinauto
from pywinauto import timings

directory = "C:/python-test/Boiler2"
viewer_exe = "C:/python-test/DAQSTANDARD Viewer/DxViewerE.exe"
app = pywinauto.Application(backend='win32')
app.start(viewer_exe)
main_window = app.window(title='Data Viewer')
time.sleep(0.5)

for filename in os.listdir(directory):
    if filename.endswith(".dds"):
        dds_file = os.path.join(directory, filename)

        main_window.type_keys('^o')
        time.sleep(0.5)
        open_dialog = app.window(title="Open")
        time.sleep(0.5)
        open_dialog.type_keys("{TAB}{TAB}{TAB}")
        time.sleep(0.5)
        open_dialog.type_keys("{DOWN}")
        time.sleep(0.5)
        open_dialog.type_keys("{ENTER}")
        time.sleep(0.5)
        open_dialog.type_keys("{TAB}")
        time.sleep(0.5)
        open_dialog.type_keys(filename)
        time.sleep(0.5)
        open_dialog.type_keys("{ENTER}")
        time.sleep(0.5)

尝试的无效转换代码

main_window.click(title='Convert', control_type='Button')
time.sleep(0.2)
main_window.click(title='To Excel', control_type='Button')
time.sleep(0.2)
export_dialog = app.window(title='Convert', lvisible=True)
time.sleep(0.2)
export_dialog.click(title='Ok', control_type='Button')
main_window.menu_select("File -> Close")

错误信息

line 43: main_window.click(title='Convert', control_type='Button') 
TypeError: HwndWrapper.click() got an unexpected keyword argument 'title'

解决方案

这个错误是因为click()方法本身不接受title或control_type参数——这些参数用于定位控件,而非作为点击方法的参数。正确逻辑是先定位到目标控件,再调用click()方法。

修改后的转换代码

# 定位Convert按钮并点击
convert_btn = main_window.child_window(title='Convert', control_type='Button')
convert_btn.click()
time.sleep(0.2)

# 定位To Excel选项并点击
to_excel_btn = main_window.child_window(title='To Excel', control_type='Button')
to_excel_btn.click()
time.sleep(0.2)

# 处理转换对话框
export_dialog = app.window(title='Convert', visible=True)
ok_btn = export_dialog.child_window(title='Ok', control_type='Button')
ok_btn.click()
time.sleep(0.2)

# 关闭当前文件
main_window.menu_select("File -> Close")

额外优化建议

  1. 替换固定延迟:尽量减少time.sleep(),改用pywinauto内置的等待机制,避免因系统延迟不稳定导致失败,例如:
    convert_btn.wait('visible', timeout=5).click()
    
  2. 排查控件结构:如果仍无法定位控件,可打印窗口的所有控件标识符,确认控件的真实属性:
    main_window.print_control_identifiers()
    
  3. 处理独立子窗口:若文件以独立窗口打开,可通过app.windows()列出所有窗口,找到对应子窗口的句柄后再操作。

内容的提问来源于stack exchange,提问作者kgoss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:45:12