我正在尝试使用运行在主机上的python脚本从我的来宾Virtualbox会话中获取屏幕截图。从研究中,我做的最好的方法是访问VirtualBox API并使用COM常量来制作屏幕截图。但是,每次我试图运行脚本时,都会得到一个属性错误:
Traceback (most recent call last):
File "D:\computer_vision_scripts\take_screenshot.py", line 29, in <module>
take_screenshot('Windows 10 Pro')
File "D:\computer_vision_scripts\take_screenshot.py", line 16, in take_screenshot
machine.LockMachine(session, constants.LockType_Shared)
File "C:\Users\me\AppData\Roaming\Python\Python39\site-packages\win32com\client\__init__.py", line 180, in __getattr__
raise AttributeError(a)
AttributeError: LockType_Shared我使用的脚本来自https://floatingoctothorpe.uk/2018/automating-virtualbox-screenshots-with-python.html
当在文件版本中看到时,如下所示:
import win32com.client
from win32com.client import constants
def take_screenshot(vm_name, screenshot_path='screenshot.png'):
"""Create a VM Screenshot for a given VM"""
vbox = win32com.client.Dispatch("VirtualBox.VirtualBox")
session = win32com.client.Dispatch("VirtualBox.Session")
machine = vbox.FindMachine(vm_name)
machine.LockMachine(session, constants.LockType_Shared)
display = session.Console.Display
width, height, _, _, _, _ = display.GetScreenResolution(0)
screenshot = display.TakeScreenShotToArray(0, width, height,
constants.BitmapFormat_PNG)
session.UnlockMachine()
with open(screenshot_path, 'wb') as output_png:
output_png.write(screenshot.tobytes())
if __name__ == '__main__':
take_screenshot('Windows 10 Pro')有人知道我该怎么做才能让它发挥作用吗?
发布于 2022-03-16 23:07:37
我也面临着同样的问题。就这样解决了:
import virtualbox
from virtualbox import library
machine.LockMachine(session, constants.LockType_Shared)
通过
machine.LockMachine(session, virtualbox.library.LockType.shared)
和
screenshot = display.TakeScreenShotToArray(0, width, height,constants.BitmapFormat_PNG)
通过
screenshot = display.TakeScreenShotToArray(0, width, height, virtualbox.library.BitmapFormat.png)
在这里找到了这个解决方案:https://github.com/sethmlarson/virtualbox-python/blob/master/tests/test_test_vm.py
https://stackoverflow.com/questions/68288961
复制相似问题