Захват текста с помощью pywinauto

Я пытаюсь использовать pywinauto в Python для сбора данных из приложения. Мне удается отследить интересующее меня окно, но, похоже, я не могу получить доступ к какому-либо тексту в этом окне.

  1. Экземпляр: print(win):

    hwndwrapper.HwndWrapper - '', Folio Document
    
  2. Свойства: 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': ''}
    
  3. Вывод из inspect.exe:
    Захват текста с помощью pywinauto

Интересующее меня приложение называется Folio Views. Я хочу скопировать текст из книги, которой я владею, в текстовый файл, чтобы использовать его в Linux:

Захват текста с помощью pywinauto

Текст можно выделить, как показано выше, но нельзя скопировать. Я также не могу найти способ «увидеть» этот текст с помощью pywinauto.

Как я могу найти текст в приложении?

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

Vasily Ryabov 30.01.2019 22:43

@VasilyRyabov Это умное решение (буду иметь в виду для других проектов)! К сожалению, текст нельзя скопировать - щелчок правой кнопкой мыши не имеет опции копирования, а ctrl-c неэффективен.

Simon Streicher 31.01.2019 10:21

Ну, я запросил демо-версию. Что я вижу сейчас: вы используете backend = "win32", который по умолчанию используется для объекта Application(). Попробуйте Application(backend = "uia") и метод app.ApproximateMainWindowTitle.dump_tree(). Этот вывод будет полезен, как и скриншот Inspect.exe.

Vasily Ryabov 01.02.2019 21:31

@VasilyRyabov Я добавил вывод inspect.exe в вопрос, и dump_tree с бэкендом «uia» возвращает следующий соответствующий дочерний элемент в той же позиции inspect.exe: Панель - '' (L304, T110, R1134, B765) ['' , 'Панель2', '0', '1']

Simon Streicher 04.02.2019 08:12

Хм... Похоже, для этого элемента управления нет ни текста, ни дочерних элементов. Вы можете попробовать переключиться в режим «Автоматизация пользовательского интерфейса» (MSAA — старая технология автоматизации). Но велика вероятность, что нам здесь не повезло. Кажется, у Folio Views есть защита от копирования текста.

Vasily Ryabov 06.02.2019 23:07

А демо еще не пришло. Не плохая техподдержка. Задержка уже на неделю.

Vasily Ryabov 06.02.2019 23:09

@VasilyRyabov все в порядке, спасибо за лишнюю милю. Я пришел к выводу, что текст просто недоступен с помощью других инструментов, кроме сложных методов распознавания текста. (Я пробовал pytesseract для OCR, но вывод слишком ненадежен). Текст для меня тоже не так важен, я изначально думал, что это будет легкая задача.

Simon Streicher 07.02.2019 08:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
1 118
0

Другие вопросы по теме