python mss mss.exception.ScreenShotError: - PullRequest
0 голосов
/ 24 мая 2018

Я новичок.Я пытаюсь использовать MSS для скриншота монитора.Мой код:

for i in range(1, 20000):
  cactus_box = {'left': 508, 'top': 382, 'width': 30, 'height': 33}
  sct = mss()
  sct_img = sct.grab(cactus_box)

, когда я запускаю код, эта ошибка дисплея:

  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\mss\windows.py", line 203, in grab
raise ScreenShotError('gdi32.GetDIBits() failed.', locals())
mss.exception.ScreenShotError: ('gdi32.GetDIBits() failed.', {'bits': 0, 'height': 33, 'width': 30, 'gdi': <WinDLL 'gdi32', handle 75f00000 at 0x93dd5f0>, 'monitor': {'left': 508, 'top': 382, 'width': 30, 'height': 33}, 'self': <mss.windows.MSS object at 0x093DD810>})

Пожалуйста, кто-то может показать мне, чтобы решить эту ошибку

1 Ответ

0 голосов
/ 24 мая 2018

РЕДАКТИРОВАТЬ: это из-за ресурсов не освобождены.Это исправлено в MSS 4.0.0 или новее.

Не могли бы вы попробовать использовать MSS вместо цикла for?Что-то вроде:

with mss() as sct:
    cactus_box = {'left': 508, 'top': 382, 'width': 30, 'height': 33}
    for i in range(1, 20000):
        sct_img = sct.grab(cactus_box)

Сообщение об ошибке не очень явное, но говорит о том, что снимок экрана невозможен (биты не найдены).Но мы не можем знать причину.Возможно, ошибка в памяти.

Кроме того, попробуйте напечатать i, чтобы узнать, нет ли ошибок на ранней стадии.

...