在 VirtualBox/virtual 台机器上使用 PyAutoGUI

Using PyAutoGUI with VirtualBox/virtual machines

我正在尝试让 pyautogui 的 locateOnScreen 在虚拟机上工作,这样我就可以 运行 一次进行多项测试。我希望虚拟框中有一些我遗漏的设置可以解决这个问题。这是代码:

import pyautogui
import win32com.client
autoit = win32com.client.Dispatch("AutoItX3.Control")

autoit.run(application_path)

open_application = autoit.winWait("title_of_app", "", 10)
header_logo = pyautogui.locateOnScreen("header_logo.png", 10)

if open_application == 1 and header_logo is not None:
    print "Detected application window."
else:
    if open_application == 0:
        print "Failed to detect application window."
        assert open_application 
    else:
        print "Failed to detect logo in header of application window."
        assert header_logo

在 VM 之外,这会过去,而在 VM 内部,我总是 运行 进入 "Failed to detect logo in header of application window"。我试过很多次调整图像,但什么也做不了。主桌面是 Windows 7 64 位,虚拟机是 Window 7 32 位。有没有办法让它在 VirtualBox 或任何 VM 软件上运行?

编辑: 我应该添加 AutoIt 的 winWait returns a 1 或 0 和 PyAutoGUI 的 locateOnScreen returns None 或图像在屏幕上的坐标和所用图像的大小。

这是旧的,但显示为未答复。所以我想我会把我的评论移到我想出来的地方,作为答案。

“我能够解决这个问题。我正在测试的应用程序使用快速渲染时间(或类似的东西)并且无论出于何种原因这阻止了它被pyautogui的拾取屏幕截图。使用 pyqt4,我能够截取包含应用程序 window 的屏幕截图,将 Qimage 转换为 PIL,并在 haystack 函数(定位函数)中使用 pyautogui 的 needle 在屏幕截图中找到徽标。我不不知道是否有更好的方法来处理这个问题,但目前它正在工作。"