PHP: Как захватить экран окна браузера с помощью php? - PullRequest
7 голосов
/ 23 декабря 2009

Прежде всего, я не уверен, если возможно захватить экран окна браузера с помощью php, тогда как это сделать?

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

Спасибо

Ответы [ 5 ]

10 голосов
/ 23 декабря 2009

Существует imagegrabscreen() и imagegrabwindow(), которые позволят вам программно создавать скриншоты из браузера, работающего на том же компьютере, через COM (только Win). См. Комментарии в руководстве, чтобы узнать, как пропустить хром браузера. При включенном DCOM это также будет работать с удаленными компьютерами Windows, которые были настроены для обеспечения доступа через DCOM.

В отношении тех, кто сказал, что PHP не знает о браузере, я бы посоветовал взглянуть на get_browser() в руководстве по PHP. Это не много, но эй, это не ничего.

7 голосов
/ 23 декабря 2009

Это абсолютно возможно, просто для этого нужно немного больше, чем 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

2 голосов
/ 23 декабря 2009

PHP ничего не знает о браузере. Фактически, обычно PHP завершает работу до того, как браузер получает данные.

Если это вообще возможно, это должна быть система на стороне клиента, такая как Javascript. Это может пересечь DOM и, таким образом, захватить модель, которую браузер считает, что она отображает; но я не помню, чтобы видел какой-либо инструмент для захвата реальной графики. В любом случае, не ясно, что вы могли бы сделать с такой информацией. Браузеры не позволяют Javascript обращаться к локальным файлам. Я полагаю, что в принципе вы могли бы отправить его обратно на сервер с помощью Ajax-вызова.

1 голос
/ 23 декабря 2009

Принципиально не поддерживается архитектура интернета и не зря. Сервер, к которому вы подключаетесь, не должен иметь больше информации о вас, чем необходимо для обработки и ответа на ваш запрос. Сервер ОБЯЗАТЕЛЬНО не должен иметь возможность собирать информацию о том, что вы просматриваете на экране.

Тем не менее, вы, вероятно, можете установить что-то, используя технологии на стороне клиента, такие как ActiveX или Flash или Java, которые будут захватывать экран и затем отправлять его обратно на сервер в запросе AJAX, но вам, вероятно, не следует. Я не могу представить, какое использование вы бы использовали для такой вещи, кроме, возможно, отладки проблем с макетом.

0 голосов
/ 23 декабря 2009

Вы не можете сделать это из PHP (на стороне сервера).

Но вы могли бы раскошелиться и использовать один из множества конвертеров HTML в PDF для захвата изображения (и существует множество инструментов для конвертации PDF во что-то еще).

...