pywinauto.findwindows.WindowNotFoundError 在 pywinauto 中
pywinauto.findwindows.WindowNotFoundError in pywinauto
我是pywinauto新手,刚开始学习。我已经在本地 32 位 Windows 7 OS 中安装了带有 pip 的 pywinauto。
所以,我有这个示例代码可以在 chrome 浏览器中打开 URL。
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
我用谷歌搜索,但找不到任何有用的解决方案。
我哪里错了?
完整的答案会很长很复杂。从你的小问题开始吧。
Chrome 生成了几个未与 app
对象连接的进程。解决方案:使用 Application(backend="uia").connect(title='New tab')
(或 title_re
或任何可能的 find_windows)。
更大的问题是默认backend="win32"
(或pywinauto 0.5.4及之前版本)无法检测和处理Chrome控件。 MS UI 自 0.6.0 以来引入了自动化支持。顺便说一下,pywinauto/UIA 可以以一种与进程无关的方式处理顶级 windows:Desktop(backend='uia').NewTab.type_keys('some_URL')
关于 Chrome 的更多详细信息。它默认不启用 UIA 支持。 To enable UIA accessibility 它必须 运行 所以:chrome.exe --force-renderer-accessibility
。尽管 UIFirefox 和 Opera 默认启用了一种模式。
最后,pywinauto 并不是专门为 Web 自动化设计的。现在它可能与 Selenium 结合使用。
补充 Vasily 所说的内容:
这里可能还有其他问题。
如果您的 Chrome 启动速度太慢,连接可能会丢失。
我认为这在启动方法中有某种规定,但由于 chrome 启动多个进程可能会导致问题。
我建议你使用 Python 的模块 "webbrowser" 启动 Chrome,然后尝试使用 pywinauto 连接它。
如果我没记错的话,有一个选项可以等待 window 出现。只需指定超时。否则尝试在一个确定的循环中连接,并在尝试之间进行一些休眠。
它可能有效,也可能无效,取决于是否需要 UIA 支持。如果是,您必须启动 Chrome 支持 UIA。
我是pywinauto新手,刚开始学习。我已经在本地 32 位 Windows 7 OS 中安装了带有 pip 的 pywinauto。 所以,我有这个示例代码可以在 chrome 浏览器中打开 URL。
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
我用谷歌搜索,但找不到任何有用的解决方案。
我哪里错了?
完整的答案会很长很复杂。从你的小问题开始吧。
Chrome 生成了几个未与
app
对象连接的进程。解决方案:使用Application(backend="uia").connect(title='New tab')
(或title_re
或任何可能的 find_windows)。更大的问题是默认
backend="win32"
(或pywinauto 0.5.4及之前版本)无法检测和处理Chrome控件。 MS UI 自 0.6.0 以来引入了自动化支持。顺便说一下,pywinauto/UIA 可以以一种与进程无关的方式处理顶级 windows:Desktop(backend='uia').NewTab.type_keys('some_URL')
关于 Chrome 的更多详细信息。它默认不启用 UIA 支持。 To enable UIA accessibility 它必须 运行 所以:
chrome.exe --force-renderer-accessibility
。尽管 UIFirefox 和 Opera 默认启用了一种模式。
最后,pywinauto 并不是专门为 Web 自动化设计的。现在它可能与 Selenium 结合使用。
补充 Vasily 所说的内容:
这里可能还有其他问题。
如果您的 Chrome 启动速度太慢,连接可能会丢失。
我认为这在启动方法中有某种规定,但由于 chrome 启动多个进程可能会导致问题。
我建议你使用 Python 的模块 "webbrowser" 启动 Chrome,然后尝试使用 pywinauto 连接它。
如果我没记错的话,有一个选项可以等待 window 出现。只需指定超时。否则尝试在一个确定的循环中连接,并在尝试之间进行一些休眠。
它可能有效,也可能无效,取决于是否需要 UIA 支持。如果是,您必须启动 Chrome 支持 UIA。