Я пытаюсь использовать pywinauto в Python для сбора данных из приложения. Мне удается отследить интересующее меня окно, но, похоже, я не могу получить доступ к какому-либо тексту в этом окне.
Экземпляр: print(win):
hwndwrapper.HwndWrapper - '', Folio Document
Свойства: print(win.get_properties()):
{'class_name': 'Folio Document',
'friendly_class_name': 'Folio Document',
'texts': [''],
'control_id': 0,
'rectangle': <RECT L142, T161, R765, B742>,
'is_visible': True,
'is_enabled': True,
'control_count': 0, 'style': 1342177280,
'exstyle': 0,
'user_data': 0,
'context_help_id': 0,
'fonts': [<LOGFONTW 'MS Shell Dlg' -11>],
'client_rects': [<RECT L0, T0, R623, B581>],
'is_unicode': False, 'menu_items': [],
'automation_id': ''}
Интересующее меня приложение называется Folio Views. Я хочу скопировать текст из книги, которой я владею, в текстовый файл, чтобы использовать его в Linux:
Текст можно выделить, как показано выше, но нельзя скопировать. Я также не могу найти способ «увидеть» этот текст с помощью pywinauto.
Как я могу найти текст в приложении?
@VasilyRyabov Это умное решение (буду иметь в виду для других проектов)! К сожалению, текст нельзя скопировать - щелчок правой кнопкой мыши не имеет опции копирования, а ctrl-c неэффективен.
Ну, я запросил демо-версию. Что я вижу сейчас: вы используете backend = "win32", который по умолчанию используется для объекта Application(). Попробуйте Application(backend = "uia") и метод app.ApproximateMainWindowTitle.dump_tree(). Этот вывод будет полезен, как и скриншот Inspect.exe.
@VasilyRyabov Я добавил вывод inspect.exe в вопрос, и dump_tree с бэкендом «uia» возвращает следующий соответствующий дочерний элемент в той же позиции inspect.exe: Панель - '' (L304, T110, R1134, B765) ['' , 'Панель2', '0', '1']
Хм... Похоже, для этого элемента управления нет ни текста, ни дочерних элементов. Вы можете попробовать переключиться в режим «Автоматизация пользовательского интерфейса» (MSAA — старая технология автоматизации). Но велика вероятность, что нам здесь не повезло. Кажется, у Folio Views есть защита от копирования текста.
А демо еще не пришло. Не плохая техподдержка. Задержка уже на неделю.
@VasilyRyabov все в порядке, спасибо за лишнюю милю. Я пришел к выводу, что текст просто недоступен с помощью других инструментов, кроме сложных методов распознавания текста. (Я пробовал pytesseract для OCR, но вывод слишком ненадежен). Текст для меня тоже не так важен, я изначально думал, что это будет легкая задача.






У меня не было возможности попробовать это с приложением. Но одним из возможных обходных путей является
.type_keys("^a^c"), а затем получение данных с помощью модуляpywinauto.clipboard.