Как сделать скриншот в Python? - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь сделать снимок экрана, используя python, который будет работать как в Windows, так и в Linux. Я прочитал pyscreenshot может сделать эту работу. Но у меня есть ошибка, и в документации, похоже, не указана какая-либо зависимость.

import pyscreenshot as ImageGrab
im = ImageGrab.grab()
im.show()

Трассировка:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/pyscreenshot/procutil.py", line 15, in _wrapper
    r = target(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/pyscreenshot/__init__.py", line 33, in _grab_simple
    return backend_obj.grab(bbox)
  File "/usr/local/lib/python3.6/dist-packages/pyscreenshot/plugins/wxscreen.py", line 39, in grab
    im.frombytes(buffer(myWxImage.GetData()))
NameError: name 'buffer' is not defined

Traceback (most recent call last):
  File "ambi.py", line 10, in <module>
    im = ImageGrab.grab()
  File "/usr/local/lib/python3.6/dist-packages/pyscreenshot/__init__.py", line 67, in grab
    to_file=False, childprocess=childprocess, backend=backend, bbox=bbox)
  File "/usr/local/lib/python3.6/dist-packages/pyscreenshot/__init__.py", line 46, in _grab
    _grab_simple, imcodec.codec, to_file, backend, bbox, filename)
  File "/usr/local/lib/python3.6/dist-packages/pyscreenshot/procutil.py", line 37, in run_in_childprocess
    raise e
NameError: name 'buffer' is not defined

Я установил ее с sudo pip3 install pyscreenshot

Я попытался установить wxscreen, но, похоже, пакет с таким именем не найден.

Я не хочу использовать библиотеки, имитирующие ввод с клавиатуры, поскольку скрипт будет работать в фоновом режиме во время игры. следить за статистикой. Античиты могут сработать.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

Еще один очень быстрый подход - это модуль MSS . Он отличается от других решений тем, что в нем используется только стандартный модуль ctypes, поэтому он не требует больших зависимостей. Он не зависит от операционной системы, и его использование стало проще:

from mss import mss

with mss() as sct:
    sct.shot()

И просто найдите файл screenshot.png, содержащий снимок экрана первого монитора. Есть много возможных настроек, вы можете играть с ScreenShot объектами и OpenCV / Numpy / PIL / и т.д ..

0 голосов
/ 24 октября 2019

Вы можете использовать pyautogui как:

import pyautogui

myScreenshot = pyautogui.screenshot()
...