Почему у pywinauto 10 — секундная задержка между командами?

#python #pywinauto

Вопрос:

Этот код имеет 10-секундную задержку между итерациями:

 from pywinauto.application import Application
app = Application(backend="uia").connect(process=19840)
dlg = app.windows()
for i in range(lbitemcount):
    i  = 1
    rselitem = "ListItem"   str(i)
    lditemtext = str(app.dlg.ListBox.child_window(best_match="" rselitem "").texts())
    print(homenum, lditemtext)
    if homenum == lditemtext:
        app.dlg.ListBox.child_window(best_match="" rselitem "").double_click_input()
        break
 

Другие pywinauto команды, похоже, имеют ту же проблему (например, ввод или получение текста из текстовых полей). Как я могу уменьшить эту задержку?

Комментарии:

1. Попробуйте измерить время итерации app.dlg.ListBox.wrapper_object() при получении lditemtext значения. Это может помочь локализовать проблему. Если проблема в child_window(best_match="" rselitem "") том , попробуйте использовать другой локатор , используя control_type title_re или другие ключевые слова. Они намного быстрее, чем best_match поиск.

2. Я оптимизировал свой код, но время так медленно для 2 команд from pywinauto.application import Application app = Application(backend="uia").connect(process=24764) dlg = app.windows() app.dlg.ListBox.child_window(title="" building "").double_click_input() , и это время подключения к приложению — 7.335336685180664 выберите — 7.866688966751099

3. connect должно быть быстро. Попробуйте исключить ListBox из app.dlg.ListBox.child_window цепочки. Достаточно 2 уровней поиска. ListBox атрибут означает «child_window(best_match=»Список»)` на втором уровне. Тогда третий уровень поиска может стать 2-м уровнем.

4. Также я думаю dlg = app.windows() , что это неверно. Это должен быть список Python из UIAWrapper s. Но вы используете его ниже в качестве объекта WindowSpecification. Пожалуйста, перепроверьте свой код в вопросе и при необходимости отредактируйте его.