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

pywinauto打印Google Chrome控件标识符触发连接超时报错问题

预期行为

尝试打印Google Chrome的控件标识符时,已在命令提示符中添加--force-renderer-accessibility启动参数并重启Chrome浏览器,预期可正常识别浏览器控件。

实际行为

代码运行至窗口连接阶段无法匹配对应Chrome窗口,抛出如下异常:

Traceback (most recent call last):
  File "C:\Users\asdffff\AppData\Roaming\Python\Python39\site-packages\pywinauto\timings.py", line 436, in wait_until_passes
    func_val = func(*args, **kwargs)
  File "C:\Users\asdffff\AppData\Roaming\Python\Python39\site-packages\pywinauto\findwindows.py", line 87, in find_element
    raise ElementNotFoundError(kwargs)
pywinauto.findwindows.ElementNotFoundError: {'title': 'New Tab - Google Chrome', 'backend': 'uia', 'visible_only': False}

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\Users\asdffff\OneDrive n1ck99\OneDrive\Documents\python\pywinauto\github.Chrome2.py", line 4, in <module>
    app = Application(backend="uia").connect(title='New Tab - Google Chrome',timeout=5)
  File "C:\Users\asdffff\AppData\Roaming\Python\Python39\site-packages\pywinauto\application.py", line 990, in connect
    self.process = timings.wait_until_passes(
  File "C:\Users\asdffff\AppData\Roaming\Python\Python39\site-packages\pywinauto\timings.py", line 458, in wait_until_passes
    raise err
pywinauto.timings.TimeoutError

复现代码

from pywinauto.application import Application
app = Application(backend="uia").start(r"C:\Program Files\Google\Chrome\Application\chrome.exe")
app = Application(backend="uia").connect(title='New Tab - Google Chrome',timeout=5)
app.NewTabGoogleChrome.print_control_identifiers()

问题原因

  • 代码中启动Chrome时未传入--force-renderer-accessibility参数,手动加参数启动的Chrome如果残留后台驻留进程,调用start()方法时会直接复用已有的无参数Chrome进程,不会开启辅助功能渲染树,窗口属性也会和预期不符。
  • Chrome启动后新标签页标题加载存在延迟,5秒超时时间过短;且不同语言版本、不同更新版本的Chrome新标签页标题不固定,硬编码精确匹配New Tab - Google Chrome很容易匹配失败。
  • 重复实例化Application对象属于冗余操作,start()方法本身会返回绑定了对应启动进程的应用对象,不需要额外调用connect()二次绑定。

修复方案

  • 启动Chrome前先清理所有残留的chrome.exe进程,避免启动参数不生效。
  • 启动Chrome时直接在程序路径后拼接--force-renderer-accessibility参数,确保辅助功能树正常加载。
  • 用正则模糊匹配Chrome窗口标题,延长超时等待时间,适配不同版本、不同语言环境的Chrome。

修正后可运行代码:

from pywinauto.application import Application
import psutil

# 清理所有残留Chrome进程
for proc in psutil.process_iter(['name']):
    if proc.info['name'] == 'chrome.exe':
        proc.kill()

# 启动时直接传入强制开启辅助功能参数
app = Application(backend="uia").start(
    r"C:\Program Files\Google\Chrome\Application\chrome.exe --force-renderer-accessibility --no-first-run --disable-default-apps"
)
# 模糊匹配Chrome主窗口,等待加载完成
main_window = app.window(title_re=".*Google Chrome", visible_only=True)
main_window.wait("ready", timeout=15)
# 打印控件标识符
main_window.print_control_identifiers()

补充说明

  • 如果运行后依然提示找不到窗口,可以先执行print([w.title for w in pywinauto.findwindows.find_elements()])打印当前系统所有窗口的标题,确认实际的Chrome窗口标题后调整匹配规则即可。
  • 不要在启动Chrome后立刻执行窗口匹配,必须等窗口完全加载到ready状态再做后续操作。
  • 若未安装psutil依赖,可执行pip install psutil安装,也可以手动在任务管理器结束所有chrome.exe进程后跳过进程清理步骤运行代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:42:25