Я планирую выполнять этот скрипт на удаленном рабочем столе, чтобы каждый день автоматически загружать файл с помощью WinSCP.
Пока этот скрипт может войти в систему и получить доступ к окну проводника, но я не могу получить доступ к файлам в окне. Я хотел бы иметь возможность перебирать список файлов и открывать определенный.
Файлы помечены как «ГГГГ-ММ-ДД-0001», «ГГГГ-ММ-ДД-0002» и т. д., и я хочу иметь возможность открыть самый последний файл на соответствующую дату.
import pywinauto
from pywinauto.application import Application
from pywinauto.keyboard import send_keys
from pywinauto import keyboard as kb
import time
HOST_NAME = ''
USER_NAME = ''
PASSWORD = ''
PORT_NUMBER = ''
DIRECTORY = ''
main_app = Application(backend='uia').start(cmd_line=r"C:\Program Files (x86)\WinSCP\WinSCP.exe").connect(title='WinSCP', timeout=10)
main_dlg = main_app.window(title='WinSCP')
main_dlg.set_focus()
Login_app = Application().connect(title=u'Login', class_name='TLoginDialog', timeout=10)
Login_dlg = Login_app.window(title=u'Login', class_name='TLoginDialog')
Login_dlg.set_focus()
Login_dlg.wait('ready', timeout=10)
Login_dlg['Edit1'].set_text(PORT_NUMBER) # Port Number
Login_dlg['Edit2'].set_text(PASSWORD) # Password
Login_dlg['Edit3'].set_text(USER_NAME) # User name
Login_dlg['Edit4'].set_text(HOST_NAME) # Host Name
Login_dlg['Button5'].click() # Login
appExplorer = Application().connect(title_re='.*' + HOST_NAME + ' - WinSCP', class_name = "TScpExplorerForm", timeout=10)
winExplorer = appExplorer.window(title_re='*- carestreamhealth@' + HOST_NAME + ' - WinSCP', class_name='TScpExplorerForm')
winExplorer.wait('visible',timeout=10)
winExplorer.set_focus()
winExplorer.TTBXToolbar4.click_input() # click into Address bar
winExplorer.TTBXToolbar4.TTBXEdit.set_text(DIRECTORY)
send_keys('{ENTER}')
winExplorer.wait('ready', timeout=10)
Почему вы автоматизируете графический интерфейс WinSCP для загрузки файлов?
Используйте сценарии WinSCP:
https://winscp.net/rus/docs/guide_automation
Смотрите также:
Из Python запускайте команды WinSCP в консоли
Другой вариант — использовать собственные модули Python FTP/SFTP.
Я рассмотрю эту автоматизацию WinSCP.
Для справки, я также обнаружил, что эта строка кода делает так, что я могу видеть только элементы управления win32:
appExplorer = Application().connect(title_re='.*' + HOST_NAME + ' - WinSCP', class_name = "TScpExplorerForm", timeout=10)
Когда я изменил его на это, у меня был доступ к элементам управления uia, и они отображали файлы как дочерние элементы в элементах управления списком.
appExplorer = Application(backend='uia').connect(title_re='.*' + HOST_NAME + ' - WinSCP', class_name = "TScpExplorerForm", timeout=10)
Хотя я также понял, что нет смысла создавать еще один объект приложения, я мог бы повторно использовать основной объект приложения, чтобы открыть окно проводника. main_app уже был установлен как backend='uia'
winExplorer = main_app.window(title_re='.*' + USER_NAME + '@' + HOST_NAME + ' - WinSCP', class_name='TScpExplorerForm')
Мартин прав. Любая автоматизация SSH/FTP/SFTP может быть выполнена без вызова GUI.