如何使用 pywinauto 移动 firefox window

How to move a firefox window with pywinauto

这是我的代码:

评论的部分是我之前尝试过的,但是没有用。

    try:
        # app = Application(backend="uia").start("C:\Program Files\Mozilla Firefox\firefox.exe")
        # time.sleep(5)
        # mozilla = app.window_(title_re = ".*Mozilla Firefox")
        # time.sleep(5)
        # mozilla.move_window(200, 200, 200, 200, True)
        app = Application().start("C:\Program Files\Mozilla Firefox\firefox.exe")
        dlg_spec = app.window()
        dlg_spec.move_window(x=None, y=None, width=200, height=100, repaint=True)
    except AppStartError:
        print("CANNOT START !!")
        return False
    except ElementNotFoundError : 
        print("COULD NOT FOUND THE WINDOW !!")
        return False
    except ElementAmbiguousError :
        print("TOO MANY FIREFOX !!")
        return False

我无法找到 WINDOW!! 在评论中我得到了这个错误:

    mozilla.move_window(200, 200, 200, 200, True)
  File "C:\Users\XX\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pywinauto\application.py", line 180, in __call__
    raise AttributeError("Neither GUI element (wrapper) " \
AttributeError: Neither GUI element (wrapper) nor wrapper method 'move_window' were found (typo?)

如果有任何帮助,我将不胜感激。

您必须在 .window(...) 调用中使用正确的 titlebest_match 值。这样 pywinauto 就知道要搜索哪个 window 了。例如,app.window(title_re=".*Firefox").

要列出所有标题,请使用此语句:

print([w.window_text() for w in app.windows()])

此外 .draw_outline() 是突出显示找到的元素的有用方法。

推荐阅读:Getting Started Guide


编辑:

如果 .windows() returns 是一个空列表,除了 start 之外,您还必须 re-connect 使用方法 connect 而不是 / 按标题 re-connect。我们有一个检测派生进程的功能请求,但目前它的优先级较低。

编辑 2:

我的工作原理:

from pywinauto import Application

app = Application(backend="win32").start("C:\Program Files\Mozilla Firefox\firefox.exe")
app = Application(backend="win32").connect(title='Mozilla Firefox', found_index=0, timeout=5)
dlg_spec = app.window(title='Mozilla Firefox', found_index=0)
dlg_spec.move_window(x=None, y=None, width=200, height=100, repaint=True)