pyscreenshot.err.FailedBackendError: сбой всех серверных ВМ - PullRequest
0 голосов
/ 16 июня 2020

Я новичок в веб-приложениях от ie до python.

Я использую pythonanywhere для размещения своего веб-приложения. Pyscreenshot устанавливается через pip3.8 install --user Pillow pyscreenshot

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

Все работает нормально в локальной среде (manjaro, python3 .8)

Однако, когда я запускаю тот же код на pythonanywhere, я получаю необработанное исключение на сайте. В журналах ошибок вижу следующее:

2020-06-16 11:30:09,927: Exception on /takess [GET]
Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python3.8/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python3.8/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/lib/python3.8/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python3.8/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/Muhammadpen/mysite/flask_app.py", line 12, in takess
    im = ImageGrab.grab()
  File "/home/Muhammadpen/.local/lib/python3.8/site-packages/pyscreenshot/__init__.py", line 31, in grab
    return backend_grab(backend, bbox, childprocess)
  File "/home/Muhammadpen/.local/lib/python3.8/site-packages/pyscreenshot/loader.py", line 147, in backend_grab
    return auto(bbox, childprocess)
  File "/home/Muhammadpen/.local/lib/python3.8/site-packages/pyscreenshot/loader.py", line 127, in auto
    raise FailedBackendError(msg)
pyscreenshot.err.FailedBackendError: All backends failed!

Вот код:

Индекс. html

<!DOCTYPE html>
<html>
  <head>
    <title>Inspector jitsi</title>
  </head>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <script type=text/javascript>
    $(function() {
      $('a#ssbutton').bind('click', function() {
        $.getJSON('/takess',
            function(data) {
          //do nothing
        });
        return false;
      });
    });
</script>
  <body>
    <iframe
      src="https://meet.jit.si/"
      style="height: 900px; width: 100%;"
    ></iframe>
    <div class='container'>
          <form>
              <a href=# id=ssbutton><button class='btn btn-default'>Take screenshot</button></a>
          </form>

  </div>
  </body>
  <style>
    html,
    body {
      overflow: hidden;
      margin: 0px;
      padding: 0px;
    }
    form{
      position: absolute;
      left: 50%;
      z-index: 0;
    }
  </style>
</html>

app.py:

from flask import Flask, render_template
import pyscreenshot as ImageGrab

app = Flask(__name__)

@app.route('/')
def index():
    return render_template("index.html")

@app.route('/takess')
def takess():
    im = ImageGrab.grab()
    im.save(r'/home/Muhammadpen/mysite/ss1.png')
    # im.save(r'/home/pen/Documents/ss1.png')


if __name__ == "__main__":
    app.run(debug=True)

Я не могу найти какую-либо соответствующую информацию или исправления по этому поводу, поэтому любая помощь будет принята с благодарностью. Тай!

1 Ответ

1 голос
/ 16 июня 2020

PyScreenshot предназначен для создания снимков экрана настольных приложений. Поскольку ваше приложение работает на сервере, снимать снимок экрана нечего.

Если вы намеревались сделать снимок экрана браузера пользователя, вы должны использовать инструменты внешнего интерфейса , которые работают в браузер, а не серверный инструмент.

...