pywinauto.findwindows.WindowNotFoundError в pywinauto
Я новичок в Pywinauto и только начал учиться. Я установил pywinauto с pip в моей локальной 32-битной ОС Windows 7. Итак, у меня есть этот пример кода, чтобы открыть URL-адрес в браузере Chrome.
from pywinauto import application
app=application.Application()
app.start(r'C:\Program Files\Google\Chrome\Application\chrome.exe')
app.window_(title='New Tab')
app.window_().TypeKeys('{F6}')
app.window_().TypeKeys('{ESC}')
app.window_().TypeKeys('www.facebook.com')
При запуске он выдает ошибку:
Traceback (most recent call last):
File "pywinauto_nil.py", line 6, in <module>
app.window_().TypeKeys('{F6}')
File "C:\Python27\lib\site-packages\pywinauto\application.py", line 252, in
__getattr__
ctrls = _resolve_control(self.criteria)
File "C:\Python27\lib\site-packages\pywinauto\application.py", line 758, in _resolve_control
raise e.original_exception
pywinauto.findwindows.WindowNotFoundError
Я гуглил, но не смог найти ни одного полезного решения.
Куда я иду не так?
2 ответа
Полный ответ будет длинным и сложным. Давайте начнем с вашей маленькой проблемы.
Хром порождает еще несколько процессов, не связанных с
app
объект. Решение: использоватьApplication().connect(title='New tab')
(или жеtitle_re
или что возможно для find_windows).Большая проблема заключается в том, что элементы управления Chrome не могут быть обнаружены и обработаны pywinauto 0.5.4, потому что поддержка MS UI Automation в процессе (70% сделано в ветке UIA на GitHub, см. Краткое введение). Кстати, pywinauto/UIA может обрабатывать окна верхнего уровня независимо от процессов:
Desktop(backend='uia').NewTab.type_keys('some_URL')
Еще одна деталь о Chrome. По умолчанию поддержка UIA не включена. Для обеспечения доступности UIA он должен работать так:
chrome.exe --force-renderer-accessibility
, Хотя режим UIA по умолчанию включен в Firefox и Opera.
И, наконец, pywinauto не предназначен специально для веб-автоматизации. Прямо сейчас это может быть объединено с Selenium.
Чтобы добавить к тому, что сказал Василий:
Здесь может быть другая проблема.
Если ваш Chrome слишком медленный для запуска, соединение может пропустить его.
Я думаю, что это как-то регулируется в методе запуска, но поскольку chrome запускает более одного процесса, это может вызвать проблему.
Я советую вам использовать модуль Python "webbrowser" для запуска Chrome, а затем попробуйте подключиться к нему с помощью pywinauto.
Есть вариант, если я правильно помню, дождаться появления окна. Просто укажите время ожидания. В противном случае попытайтесь подключиться в определенном цикле с несколькими промежуточными попытками.
Это может сработать, а может и нет, зависит от того, нужна ли поддержка МСА. Если это так, вы должны запустить Chrome с поддержкой UIA.