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 ответа

Решение

Полный ответ будет длинным и сложным. Давайте начнем с вашей маленькой проблемы.

  1. Хром порождает еще несколько процессов, не связанных с app объект. Решение: использовать Application().connect(title='New tab') (или же title_re или что возможно для find_windows).

  2. Большая проблема заключается в том, что элементы управления Chrome не могут быть обнаружены и обработаны pywinauto 0.5.4, потому что поддержка MS UI Automation в процессе (70% сделано в ветке UIA на GitHub, см. Краткое введение). Кстати, pywinauto/UIA может обрабатывать окна верхнего уровня независимо от процессов: Desktop(backend='uia').NewTab.type_keys('some_URL')

  3. Еще одна деталь о Chrome. По умолчанию поддержка UIA не включена. Для обеспечения доступности UIA он должен работать так: chrome.exe --force-renderer-accessibility, Хотя режим UIA по умолчанию включен в Firefox и Opera.

И, наконец, pywinauto не предназначен специально для веб-автоматизации. Прямо сейчас это может быть объединено с Selenium.

Чтобы добавить к тому, что сказал Василий:

Здесь может быть другая проблема.

Если ваш Chrome слишком медленный для запуска, соединение может пропустить его.

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

Я советую вам использовать модуль Python "webbrowser" для запуска Chrome, а затем попробуйте подключиться к нему с помощью pywinauto.

Есть вариант, если я правильно помню, дождаться появления окна. Просто укажите время ожидания. В противном случае попытайтесь подключиться в определенном цикле с несколькими промежуточными попытками.

Это может сработать, а может и нет, зависит от того, нужна ли поддержка МСА. Если это так, вы должны запустить Chrome с поддержкой UIA.

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