PHP: Как захватить экран окна браузера с помощью php?
Прежде всего, я не уверен, что если можно захватить экран окна браузера с помощью php, то как это сделать?
Если это возможно, лучше всего будет захватывать только содержимое веб-сайта, исключая такие части браузера, как строка меню, панель инструментов, строка состояния и т. Д.
Спасибо
5 ответов
Есть imagegrabscreen()
а также imagegrabwindow()
, что позволит вам программно создавать скриншоты из браузера, работающего на той же машине через COM (хотя Win только). См. Комментарии в руководстве, чтобы узнать, как пропустить хром браузера. С включенным DCOM это также будет работать с удаленными компьютерами Windows, которые были настроены для разрешения доступа через DCOM.
Что касается тех, кто сказал, что PHP не знает о браузере, я бы посоветовал взглянуть на get_browser()
в руководстве по PHP. Это не так много, но эй, это не ничего.
Это абсолютно возможно, просто для этого нужно немного больше, чем PHP. У меня есть приложение, написанное на PHP, которое делает снимки веб-сайтов через определенные промежутки времени. Немного сложно начать, но вот шаги, которые я предпринял на машине с Linux:
- Установите Xvfb (или vnc-сервер) для эмуляции сеанса X Windows в памяти. Запустите Xvfb на дисплее:1
- Установите Firefox
- Установите imagemagick
- Создайте скрипт bash для запуска Firefox по нужному URL. Моя выглядела так:
,
#!/bin/bash
DISPLAY=:1 firefox &
sleep 2s
DISPLAY=:1 firefox -kill-all &
sleep 1s
DISPLAY=:1 firefox -url $1 &
sleep 5s
DISPLAY=:1 import -window root /var/www/images/screenshots/$2.png
- Выполните скрипт из PHP:
,
exec ('sh ../scripts/screencap.sh ' . $url . ' ' . $file_name);
Самой сложной задачей для меня было сделать браузер полноэкранным при появлении скриншота. Поскольку вы не можете получить доступ к браузеру напрямую, вы должны настроить все через файлы конфигурации Firefox, что может занять некоторое время, чтобы выяснить это.
Полезные ссылки, которые помогут вам начать:
http://semicomplete.com/blog/geekery/xvfb-firefox.html http://www.webmasterworld.com/forum21/9182.htm
PHP ничего не знает о браузере. На самом деле, обычно PHP завершает работу до того, как браузер получит данные.
Если это вообще возможно, это должна быть система на стороне клиента, такая как Javascript. Это может пересечь DOM и, таким образом, захватить модель, которую браузер считает, что она отображает; но я не помню, чтобы видел какой-либо инструмент для захвата реальной графики. В любом случае, не ясно, что вы могли бы сделать с такой информацией. Браузеры не позволяют Javascript обращаться к локальным файлам. Я полагаю, что в принципе вы могли бы отправить его обратно на сервер с помощью Ajax-вызова.
Принципиально не поддерживается архитектура интернета и не зря. Сервер, к которому вы подключаетесь, не должен иметь больше информации о вас, чем необходимо для обработки и ответа на ваш запрос. Сервер ОБЯЗАТЕЛЬНО не должен быть в состоянии собирать информацию о том, что вы просматриваете на экране.
Тем не менее, вы, вероятно, можете установить что-то, используя технологии на стороне клиента, такие как ActiveX, Flash или Java, которые будут захватывать экран и затем отправлять его обратно на сервер в запросе AJAX, но, вероятно, не стоит. Я не могу представить, какое использование вы бы использовали для такой вещи, кроме, возможно, отладки проблем с макетом.
Вы не можете сделать это из PHP (на стороне сервера).
Но вы могли бы раскошелиться и использовать один из множества конвертеров HTML в PDF для захвата изображения (и существует множество инструментов для конвертации PDF во что-то другое).