@Andrew_Lays

Как сделать скриншот экрана python скриптом?

Есть код на python:
import pyscreenshot as ImageGrab

from pyvirtualdisplay import Display
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

display = Display(visible=0, size=(1366, 768)).start()
browser = webdriver.Firefox()

browser.get('https://google.com')
browser.implicitly_wait(10)

print browser.title

img = ImageGrab.grab()

img.save('screen.png');

browser.quit()

display.stop()

Суть его в том, чтобы создать виртуальный дисплей, через selenium webdriver открыть firefox, зайти на страницу https://google.com и через 10 сек сделать скриншот. Все работает до создания скриншота, потому что строка print browser.title выводит Google, что является правильным заголовком страницы. Последующий код провоцирует ошибку:
Traceback (most recent call last):
  File "script.py", line 13, in <module>
    img = ImageGrab.grab()
  File "/usr/local/lib/python2.7/dist-packages/pyscreenshot/__init__.py", line 70, in grab
    return _grab(to_file=False, childprocess=childprocess, backend=backend, bbox=bbox)
  File "/usr/local/lib/python2.7/dist-packages/pyscreenshot/__init__.py", line 50, in _grab
    backend_obj = _get_loader().selected()
  File "/usr/local/lib/python2.7/dist-packages/pyscreenshot/loader.py", line 75, in selected
    self.raise_exc()
  File "/usr/local/lib/python2.7/dist-packages/pyscreenshot/loader.py", line 83, in raise_exc
    raise FailedBackendError(message)
pyscreenshot.loader.FailedBackendError: Install at least one backend!

Ошибка не гуглится, скрипт выполняется под sudo, средствами selenium webdriver скрин делается вот такой командой browser.save_screenshot('path'), но меня он не устраивает, т.к захватывает только область страницы, сам браузер, его вкладки, адресная строка - не видны. И еще, я уверен, что это возможно, т.к проделывал это на другой машине с год назад. Идеи?
  • Вопрос задан
  • 8964 просмотра
Решения вопроса 1
@Andrew_Lays Автор вопроса
Ответ был прост. В документации на GitHub прочитал, что:
Pyscreenshot tries to allow to take screenshots without installing 3rd party libraries. It is cross-platform but useful for Linux based distributions. It is only a pure Python wrapper, a thin layer over existing back-ends. Its strategy should work on most Linux distributions: a lot of back-ends are wrapped, if at least one exists then it works, if not then one back-end should be installed. Performance and interactivity are not important for this library.

И чуть ниже:
Plugin based, it has wrappers for various back-ends:
scrot
ImageMagick
PyGTK
PIL or Pillow (only on windows)
PyQt4
wxPython
Quartz (Mac)
screencapture (Mac)

Из этого всего был установлен только Pillow, но система не Windows, поэтому не сработало. По комментарию Влад Грачев установил ImageMagick, который входит в список выше, что и решило всю проблему.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Можно обратиться к сторонним средствам, например. Тот же imagemagick позволяет делать скриншоты. Вызывать, например, через subprocess.call.
Ответ написан
djdeniro
@djdeniro
DeNet
нужно запускать с правами администратора
Ответ написан
mututunus
@mututunus
Backend developer (Python, Golang)
PIL или Pillow установлен?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы