Java Selenium запись видео

165
16 апреля 2019, 05:20

На сайте есть анимационный блок, анимация которого производится с применением html5, css, и js. Можно ли как то записать эту анимацию в gif? Использую selenium и метод getScreenshotAs.

Изначально задумка была такая: наделать кучу скриншотов, а потом слепить их в gif файл, но проблема в том, что через метод getScreenshotAs скриншот делается очень долго(350-400мс), поэтому нет никакой плавности(получается 3-4 кадра в секунду, а то и меньше).

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

Answer 1

Можно отрисовывать Selenium на виртуальный фреймбуфер Xvfb и записывать видео, например, через ffmpeg.

Запускаете сервер Xvfb, а в нём браузер:

xvfb-run --listen-tcp --server-num=123 --auth-file /tmp/xvfb.auth -e /dev/stdout -s "-ac -screen 0 1024x768x24" firefox ru.stackoverflow.com 

123 - номер дисплея xserver на ваш выбор
/tmp/xvfb.auth - путь, по которому будет сохранены авторизационные данные
1024x768x24 - желаемая геометрия фреймбуфера
firefox ru.stackoverflow.com - открывает этот сайт в Firefox; замените на вашу строку запуска Selenium

Чтобы начать писать видео:

ffmpeg -f x11grab -i :123 -video_size 1024x768 -codec:v libx264 -r 12 video.mp4

-f x11grab -i :123 - источник видеопотока: xserver, 123й дисплей
-video_size 1024x768 - разрешение видеофайла
libx264 - желаемый видеокодек
-r 12 - частота кадров

Для gif-файла кодек указыать не нужно:

ffmpeg -f x11grab -video_size 1024x768 -i :123 -r 12 1.gif

Чтобы снять скриншот (требуется установленный ImageMagick):

xwd -display :123 -root | convert xwd:/dev/stdin png:1.png

-display :123 - все тот же 123й дисплей
-root - не имеет отношения к пользователю root; указывает, что нужен скриншот всего рабочего стола, а не конкретного окна

READ ALSO
RemoteServiceException: Bad notification for startForeground

RemoteServiceException: Bad notification for startForeground

Сейчас для того чтобы опубликовать обновление приложения в PlayМаркет, требуется API не ниже 26Иначе выдает ошибку:

199
SQLException при работе с БД

SQLException при работе с БД

Есть такие методы:

183
Написание текста снизу вверх

Написание текста снизу вверх

Есть JtextArea в него вводится текст справа налево посредством:

158
CSS селекторы разделенные точкой

CSS селекторы разделенные точкой

Скажите, пожалуйста, что означает вот такая запись:

154