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

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

Ответ 1

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


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

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

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

РЕДАКТИРОВАТЬ: Вы можете использовать инструмент imagemagick для преобразования PDF в PNG. Моя версия wkhtmltopdf не поддерживает изображения. Например, convert html.pdf -append html.png.

РЕДАКТИРОВАТЬ: Этот небольшой скрипт оболочки дает простой/но рабочий пример использования на Linux с php5-cli и инструментами, упомянутыми выше.

РЕДАКТИРОВАТЬ: я заметил, что теперь команда wkhtmltopdf работает над другим проектом: wkhtmltoimage, который дает вам JPG напрямую

Ответ 2

Так как 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!

Ответ 3

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

Просто нужно назвать его API с params 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

ДЕМО.

Ответ 4

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

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

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

И вот API- fooobar.com/questions/6672/...

Ответ 5

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

https://wkhtmltopdf.org/

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

Ответ 6

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

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

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

Существуют также веб-сервисы, которые его предлагают. Например, этот.

Edit:

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

Ответ 7

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

http://browsershots.org/

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

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

Ответ 8

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

include("GrabzItClient.class.php");

$grabzIt = new GrabzItClient("APPLICATION KEY", "APPLICATION SECRET");
$id = $grabzIt->TakePicture("http://www.google.com");

//wait a certain amount of time

$result = $grabzIt->GetPicture($id);

if (!$result)
{
return;
}

file_put_contents("images" . DIRECTORY_SEPARATOR . $filename, $result);

Ответ 9

Да, это так. Если вам нужен только образ 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

Ответ 10

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

Ответ 12

Ну, 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

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

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

Вы можете увидеть учебник здесь: Захват скриншота веб-сайта с использованием PHP без API

Ответ 13

Я установил, наконец, используя microweber/screen, как было предложено @boksiora.
Изначально при попытке ссылки здесь я получил:

Please download this script from here https://github.com/microweber/screen

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

$ sudo wget https://github.com/microweber/screen/archive/master.zip
$ sudo unzip master.zip
$ sudo mv screen-master screen
$ sudo chmod +x screen/bin/phantomjs
$ sudo yum install fontconfig
$ sudo yum install freetype*
$ cd screen
$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo php composer.phar update
$ cd ..
$ sudo chown -R apache screen
$ sudo chgrp -R www screen
$ sudo service httpd restart

Наведите свой браузер на screen/demo/shot.php?url=google.com. Когда вы увидите снимок экрана, все готово. Обсуждение для более предварительной настройки доступно здесь и здесь.

Ответ 14

Существует много проектов с открытым исходным кодом, которые могут создавать скриншоты. Например, PhantomJS, webkit2png и т.д.

Большая проблема с этими проектами заключается в том, что они основаны на более старой технологии браузера и имеют проблемы с рендерингом многих сайтов, особенно сайтов, использующих webfonts, flexbox, svg и других дополнений к спецификации HTML5 и CSS за последние пару месяцев/лет.

Я пробовал несколько сторонних сервисов, и большинство из них основано на PhantomJS, то есть они также создают скриншоты низкого качества. Лучший сторонний сервис для создания скриншотов веб-сайтов - urlbox.io. Это платная услуга, хотя есть бесплатная 7-дневная пробная версия, чтобы проверить ее, не совершая каких-либо оплаченных планов.

Вот ссылка на документацию, и ниже приведены простые шаги, чтобы заставить его работать на PHP с композитором.

// 1 . Get the urlbox/screenshots composer package (on command line):
composer require urlbox/screenshots

// 2. Set up the composer package with Urlbox API credentials:
$urlbox = UrlboxRenderer::fromCredentials('API_KEY', 'API_SECRET');

// 3. Set your options (all options such as full page/full height screenshots, retina resolution, viewport dimensions, thumbnail width etc can be set here. See the docs for more.)
$options['url'] = 'example.com';

// 4. Generate the Urlbox url
$urlboxUrl = $urlbox->generateUrl($options);
// $urlboxUrl is now 'https://api.urlbox.io/v1/API_KEY/TOKEN/png?url=example.com'

// 5. Now stick it in an img tag, when the image is loaded in browser, the API call to urlbox will be triggered and a nice PNG screenshot will be generated!
<img src="$urlboxUrl" />

Например, здесь полный снимок экрана этой самой страницы:

https://api.urlbox.io/v1/ca482d7e-9417-4569-90fe-80f7c5e1c781/8f1666d1f4195b1cb84ffa5f992ee18992a2b35e/png?url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F757675%2Fwebsite-screenshots-using-php%2F43652083%2343652083&full_page=true

полный скриншот страницы вопроса stackoverflow.com powered by urlbox.io

Ответ 15

Я нахожусь в Windows, поэтому я смог использовать функцию imagegrabwindow после прочтения подсказки здесь от stephan. Я добавил в обрезку (чтобы избавиться от заголовка браузера, полос прокрутки и т.д.) И изменить размер, чтобы получить окончательное изображение. Здесь мой код. Надежда, которая помогает кому-то.

Ответ 16

webkit2html работает на Mac OS X и Linux, довольно просто установить и использовать. См. этот учебник.

Для Windows вы можете перейти с CutyCapt, который имеет схожие функции.

Ответ 17

Я использовал bluga. Api позволяет вам принимать 100 снимков в месяц без оплаты, но иногда он использует более 1 кредита для одной страницы. Я только что закончил модернизацию модуля drupal Bluga WebThumbs до drupal 7, который позволяет печатать миниатюру в шаблоне или входном фильтре.

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

Существуют клиенты api для следующих языков:

PHP, Python, Ruby, Java, .NET С#, Perl и Bash (оболочка script выглядит так, как будто она требует perl)

Ответ 18

Все зависит от того, как вы хотите сделать снимок экрана.

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

У grabz.it есть webservice, чтобы сделать это, вот статья, показывающая простой пример использования службы.

http://www.phpbuilder.com/articles/news-reviews/miscellaneous/capture-screenshots-in-php-with-grabzit-120524022959.html

Ответ 19

Вы можете использовать https://grabz.it решение.

Он получил PHP API, который очень гибкий и может быть вызван по-разному, например, с помощью cronjob или веб-страницы PHP.

Чтобы реализовать его, вам нужно сначала получить ключ приложения и секрет и загрузить (бесплатно) SDK.

И пример для реализации. Прежде всего инициализация:

include("GrabzItClient.class.php");

// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" with the values from your account!
$grabzIt = new GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret");

Пример скриншотов:

// To take a image screenshot
$grabzIt->URLToImage("http://www.google.com");  
// Or to take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");
// Or to convert online videos into animated GIF's
$grabzIt->URLToAnimation("http://www.example.com/video.avi");
// Or to capture table(s)
$grabzIt->URLToTable("http://www.google.com");

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

Ответ 20

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

Вариант 1: использовать API (самый простой)

Pros

  • Выполнить Javascript
  • Почти идеальный рендеринг
  • Быстро при правильном использовании параметров кэширования
  • Шкала обрабатывается API
  • Точное время, окно просмотра,...
  • Большую часть времени они предлагают бесплатный план

Cons

  • Не бесплатно, если вы планируете использовать их много

Вариант 2: используйте одну из множества доступных библиотек

Pros

  • Конверсия в большинстве случаев довольно быстрая

Cons

  • Плохой рендеринг
  • Не выполняет JavaScript
  • Отсутствует поддержка последних веб-функций (FlexBox, расширенные селекторы, веб-шрифты, размеры ящиков, медиазапросы, теги HTML5...)
  • Иногда не так просто установить
  • Сложно масштабировать

Вариант 3: используйте PhantomJs и, возможно, библиотеку-обертку

Pros

  • Выполнить Javascript
  • Довольно быстро

Cons

  • Плохой рендеринг
  • PhantomJs устарела и больше не поддерживается.
  • Отсутствует поддержка последних веб-функций (FlexBox, расширенные селекторы, веб-шрифты, размеры ящиков, медиазапросы, теги HTML5...)
  • Сложно масштабировать
  • Не так легко заставить его работать, если есть загружаемые изображения...

Вариант 4: используйте Chrome Headless и, возможно, библиотеку-обертку

Pros

  • Выполнить Javascript
  • Почти идеальный рендеринг

Cons

  • Не так просто получить желаемый результат в отношении:
    • время загрузки страницы
    • интеграция с прокси
    • автоматическая прокрутка
    • ...
  • Сложно масштабировать
  • Довольно медленно и даже медленнее, если HTML содержит внешние ссылки

Отказ от ответственности: я основатель ApiFlash. Я сделал все возможное, чтобы дать честный и полезный ответ.

Ответ 21

Я использовал page2images. Это разработанная база на cutycapt, которая действительно быстрая и стабильная. Если вы не хотите тратить слишком много времени на производительность и настройку, вы должны использовать его. Если вы заходите на их сайт, вы можете найти более подробную информацию и образец кода PHP.

Ответ 22

После долгих поисков в сети я нашел это.

PPTRAAS > Бесплатный инструмент для захвата скриншота путем передачи вашего URL в качестве параметра

Они предоставляют несколько вариантов, просто нажав их URL.

  1. Получить полный скриншот страницы

    https://pptraas.com/screenshot?url= {ВЫ URL ЗДЕСЬ}

  2. Получить скриншот страницы определенного размера

    https://pptraas.com/screenshot?url= {ВАШ URL ЗДЕСЬ} & size = 400 400

  3. Можно даже конвертировать страницу в PDF

    https://pptraas.com/pdf?url= {ВЫ URL ЗДЕСЬ}

Ответ 23

Не напрямую. Программное обеспечение, такое как Selenium, имеет такие функции и может управляться PHP, но имеет другие зависимости (например, запуск своего Java-сервера на компьютере с браузером, который вы хотите снять с экрана)

Ответ 24

вы можете использовать cutycapt.

kwhtml устарел и показывает страницу как старый браузер.

Ответ 25

Я нашел, что это лучший и простой инструмент: ScreenShotMachine. Это платная услуга, но вы получаете 100 бесплатных скриншотов, и вы можете купить еще 2000 долларов (около) 20 долларов, так что это довольно неплохая сделка. Он имеет очень простое использование, вы просто используете URL-адрес, поэтому я написал этот маленький скрипт, чтобы сохранить файл на его основе:

<?php
  $url = file_get_contents("http://api.screenshotmachine.com/?key={mykey}&url=https://stackoverflow.com&size=X");

  $file = fopen("snapshots/stack.jpg", "w+");
  fwrite($file, $url);
  fclose($file);
  die("saved file!");
?>

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