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

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

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


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

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

UPDATE Теперь, с новой функцией 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 напрямую

Так как 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'); ?> в <?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!

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

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

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

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

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

ДЕМО .

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

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

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

И вот API-http://screen.microweber.com/shot.php?url=https://stackoverflow.com/questions/757675/website-screenshots-using-php

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

http://code.google.com/p/wkhtmltopdf/

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

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

http://browsershots.org/

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

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

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

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

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

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

Редактировать:

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

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

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

Я всегда использую микроскопический экран для захвата снимка экрана любой веб-страницы. Здесь мы можем найти хорошо написанный учебник . Это проще и не нужно больше 3 минут, чтобы учиться.

Ну, 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 & w = 1000 & h = 800 & clipw = 800 & cliph = 600

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

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

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

Наконец, я установил микроскопический / экран, как это было предложено @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 . Когда вы видите скриншот , все готово. Обсуждение более подробных настроек доступно здесь и здесь .

Существует много проектов с открытым исходным кодом, которые могут создавать скриншоты. Например, 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 = истина

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

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

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

Для Windows вы можете использовать CutyCapt , который имеет аналогичную функциональность.

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

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

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

PHP , Python , Ruby , Java , .Net C # , Perl и Bash (сценарий оболочки похож на требуемый perl)

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

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

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

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

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

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

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

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

Вы можете использовать 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"); в 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 если нет. Подробнее см . Документацию.