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

如何将pywinauto控件标识符保存至变量(解决编码错误)

解决pywinauto控件标识符保存的UnicodeEncodeError并存入变量

问题背景

使用main_dlg.print_control_identifiers(filename="control_ids.text")保存控件标识符时,因目标程序包含希腊字符触发UnicodeEncodeError('charmap' codec can't encode characters),根源是该方法默认使用系统编码(如cp1252)写入文件,无法处理非ASCII字符。

核心解决方案:自定义log_func捕获内容到变量

利用print_control_identifiers的log_func参数,自定义函数将控件标识符内容收集到变量中,再以UTF-8编码写入文件:

from pywinauto import Application

# 连接或启动目标应用,获取主窗口
app = Application().connect(title="你的窗口标题")  # 若未启动可改用app.start("your_app.exe")
main_dlg = app.window(title="你的窗口标题")

# 初始化列表存储每一行控件标识符输出
control_ids_lines = []

def collect_control_ids(msg):
    control_ids_lines.append(str(msg))

# 调用方法,传入自定义收集函数
main_dlg.print_control_identifiers(log_func=collect_control_ids)

# 将列表转为完整字符串
control_ids_content = '\n'.join(control_ids_lines)

# 以UTF-8编码写入文件,避免编码错误
with open("control_ids.text", "w", encoding="utf-8") as output_file:
    output_file.write(control_ids_content)

原理说明

  • print_control_identifiers默认的log_func要么打印到控制台,要么用系统编码写入文件。通过自定义log_func,可以拦截每一行输出内容并存入列表,实现内容到变量的存储。
  • 最终用UTF-8编码写入文件,UTF-8支持所有Unicode字符(包括希腊文),彻底解决编码不兼容问题。

替代方案:直接指定文件编码写入

如果无需将内容存入变量,仅需正确写入文件,可直接打开UTF-8编码的文件并传递给log_func:

with open("control_ids.text", "w", encoding="utf-8") as f:
    main_dlg.print_control_identifiers(log_func=lambda msg: f.write(f"{msg}\n"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:55:16