使用Python+pywinauto自动化WinSCP传输时打开目录窗口失败求助
WinSCP自动化文件传输:Ctrl+0无法触发目录窗口,pywinauto连接失败
问题详情
用Python结合pywinauto实现WinSCP文件传输自动化,计划通过发送Ctrl+0快捷键打开目录窗口并输入路径,但运行时窗口未弹出,且连接窗口时报错。
代码示例
kb.send_keys("^0") app1 = Application().connect(title=u'Open directory') win1 = app1.TOpenDirectoryDialog src_folder = "/data/cog/deployments" win1[u'Edit'].type_keys(src_folder) win1.OK.click()
报错内容
Traceback (most recent call last): File "C:\Users\RAR\PycharmProjects\pythonAutomationproj\main.py", line 49, in <module> app1 = Application().connect(title=u'Open directory') File "C:\Users\RAR\PycharmProjects\pythonAutomationproj\venv\lib\site-packages\pywinauto\application.py", line 997, in connect self.process = findwindows.find_element(**kwargs).process_id File "C:\Users\RAR\PycharmProjects\pythonAutomationproj\venv\lib\site-packages\pywinauto\findwindows.py", line 87, in find_element raise ElementNotFoundError(kwargs) pywinauto.findwindows.ElementNotFoundError: {'title': 'Open directory', 'backend': 'win32', 'visible_only': False}
解决办法
- 锁定WinSCP窗口发送快捷键:
kb.send_keys会把按键发给当前活动窗口,不一定是WinSCP。先连接并激活WinSCP主窗口,再在其上下文发送快捷键:# 连接WinSCP主程序 winscp_app = Application().connect(title_re="WinSCP.*") winscp_main = winscp_app.window(title_re="WinSCP.*") # 激活主窗口 winscp_main.set_focus() # 在WinSCP窗口内发送Ctrl+0 winscp_main.type_keys("^0") - 增加窗口加载等待:快捷键触发窗口打开需要时间,直接连接会找不到,加延迟:
import time winscp_main.type_keys("^0") time.sleep(1) # 可根据实际情况调整时长 - 优化窗口查找参数:
- 用
title_re模糊匹配标题:app1 = Application().connect(title_re="Open directory.*") - 只查找可见窗口:
app1 = Application().connect(title=u'Open directory', visible_only=True) - 切换到UIA后端(WinSCP部分窗口依赖UIA框架):
app1 = Application(backend='uia').connect(title=u'Open directory')
- 用
- 菜单路径替代快捷键:如果快捷键不稳定,直接通过菜单打开目录窗口:
winscp_main.menu_select("Commands->Open Directory...")
内容的提问来源于stack exchange,提问作者Rae
相关产品推荐
相关产品推荐

