#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.8666889667510993.
connect
должно быть быстро. Попробуйте исключитьListBox
изapp.dlg.ListBox.child_window
цепочки. Достаточно 2 уровней поиска.ListBox
атрибут означает «child_window(best_match=»Список»)` на втором уровне. Тогда третий уровень поиска может стать 2-м уровнем.4. Также я думаю
dlg = app.windows()
, что это неверно. Это должен быть список Python изUIAWrapper
s. Но вы используете его ниже в качестве объекта WindowSpecification. Пожалуйста, перепроверьте свой код в вопросе и при необходимости отредактируйте его.