Скриншоты сайта - PullRequest
       101

Скриншоты сайта

398 голосов
/ 16 апреля 2009

Есть ли способ сделать снимок экрана сайта в PHP, а затем сохранить его в файл?

Ответы [ 25 ]

270 голосов
/ 16 апреля 2009

ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ : через 7 лет я все еще получаю голоса за этот ответ, но я думаю, этот теперь гораздо точнее.


Конечно, вы можете, но вам нужно будет что-то визуализировать. Если вы действительно хотите использовать только php, я предлагаю вам HTMLTOPS , который отображает страницу и выводит ее в ps-файл (ghostscript), а затем преобразует ее в файлы .jpg, .png, .pdf. . Может быть немного медленнее со сложными страницами (и не поддерживает весь CSS).

Иначе, вы можете использовать wkhtmltopdf для вывода html-страницы в формате pdf, jpg и т. Д. Примите CSS2.0, используйте webkit (оболочку Safari) для рендеринга страницы .. так что все должно быть в порядке. Вы также должны установить его на свой сервер ..

ОБНОВЛЕНИЕ Теперь, благодаря новым возможностям HTML5 и JS, также можно отобразить страницу в объект Canvas с помощью JavaScript. Вот хорошая библиотека для этого: Html2Canvas и , вот реализация того же автора для получения обратной связи, подобной G +. После того, как вы поместили dom на холст, вы можете отправить его на сервер через ajax и сохранить его как jpg.

EDIT : Вы можете использовать инструмент imagemagick для преобразования pdf в png. Моя версия wkhtmltopdf не поддерживает изображения. Например. convert html.pdf -append html.png.

EDIT : Этот небольшой сценарий оболочки дает простой / но работающий пример использования на Linux с php5-cli и инструментами, упомянутыми выше.

EDIT : теперь я заметил, что команда wkhtmltopdf работает над другим проектом: wkhtmltoimage, который дает вам jpg напрямую

87 голосов
/ 24 декабря 2010

Начиная с PHP 5.2.2 возможно захватить сайт только с PHP * !

imagegrabscreen - захватывает весь экран

<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>

imagegrabwindow - захватывает окно или его клиентскую область с помощью дескриптора окна (свойство HWND в экземпляре COM)

<?php
$Browser = new COM('InternetExplorer.Application');
$Browserhandle = $Browser->HWND;
$Browser->Visible = true;
$Browser->Fullscreen = true;
$Browser->Navigate('http://www.stackoverflow.com');

while($Browser->Busy){
  com_message_pump(4000);
}

$img = imagegrabwindow($Browserhandle, 0);
$Browser->Quit();
imagepng($img, 'screenshot.png');
?>

Редактировать: Обратите внимание, что эти функции доступны ТОЛЬКО в системах Windows!

53 голосов
/ 12 марта 2014

Если вы не хотите использовать какие-либо сторонние инструменты, я наткнулся на простое решение, которое использует Google Page Insight api.

Просто нужно назвать его API с параметрами screenshot=true.

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true

Для просмотра мобильного сайта передайте &strategy=mobile в параметрах,

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile

DEMO .

19 голосов
/ 07 августа 2013

Вы можете использовать простой безголовый браузер, такой как PhantomJS, для захвата страницы.

Также вы можете использовать PhantomJS с PHP.

Посмотрите на этот маленький скрипт php, который делает это. Взгляните сюда https://github.com/microweber/screen

А вот и API- http://screen.microweber.com/shot.php?url=/648875/skrinshoty-saita

17 голосов
/ 22 июля 2010

Это должно быть хорошо для вас:

https://wkhtmltopdf.org/

Убедитесь, что вы скачали дистрибутив wkhtmltoimage!

10 голосов
/ 16 апреля 2009

Да. Вам понадобятся некоторые вещи, которые:

См. khtmld (aemon) на * nx. См. Url2Jpg для Windows, но поскольку это приложение dotNet, вам также следует проверить Url2Bmp

Оба являются консольными инструментами, которые вы можете использовать в своем веб-приложении для получения снимка экрана.

Есть также веб-сервисы, которые предлагают это. Проверьте это , например.

Edit:

Эта ссылка полезна для.

10 голосов
/ 16 апреля 2009

Это на Python, но, просматривая документацию и код, вы можете точно увидеть, как это делается. Если вы можете запустить Python, то это готовое решение для вас:

http://browsershots.org/

Обратите внимание, что все может работать на одной машине для одной платформы или на одной машине с виртуальными машинами, работающими на других платформах.

Бесплатно, с открытым исходным кодом, прокрутите вниз страницы для ссылок на документацию, исходный код и другую информацию.

5 голосов
/ 12 апреля 2012

Да, это так. Если вам нужно только изображение URL, попробуйте

<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>

Передавайте URL в качестве аргумента, и вы получите изображение для более подробной информации. Проверьте эту ссылку http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html

4 голосов
/ 19 августа 2013

cutycapt сохраняет веб-страницы в большинстве графических форматов (jpg, png ..), загружает их из вашего синаптика, работает намного лучше, чем wkhtmltopdf

4 голосов
/ 30 декабря 2015

Ну, PhantomJS - это браузер, который можно легко поставить на сервер и интегрировать в php. Вы можете найти код в WDudes. Они включают в себя намного больше функций, таких как указание размера изображения, кэша, загрузки в виде файла или отображения в img src и т. Д.

<img src=”screenshot.php?url=google.com” />

Параметры URL

  • Ширина и высота: screenshot.php? Url = google.com & w = 1000 & h = 800

  • С обрезкой: screenshot.php? URL = google.com & ш = 1000 & ч = 800 & clipw = 800 & cliph = 600

  • Отключить кеш и загрузить свежие скриншоты:
    screenshot.php? URL = google.com и кэш = 0

  • Чтобы загрузить изображение: screenshot.php? Url = google.com & download = true

Учебное пособие можно посмотреть здесь: Создание снимка экрана веб-сайта с использованием PHP без API

...