Есть ли способ сделать снимок экрана веб-сайта в 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
Это должно быть хорошо для вас:
Убедитесь, что вы загрузили дистрибутив wkhtmltoimage!
Ответ 6
Да. Вам понадобятся некоторые вещи:
См. khtmld (aemon) на * nx. См. Url2Jpg для Windows, но поскольку это приложение dotNet, вы также должны chek Url2Bmp
Оба являются консольными инструментами, которые вы можете использовать из своего веб-приложения, чтобы получить снимок экрана.
Существуют также веб-сервисы, которые его предлагают. Например, этот.
Edit:
Эта ссылка полезна для.
Ответ 7
В Python, но просматривая документацию и код, вы можете точно увидеть, как это делается. Если вы можете запустить python, то это готовое решение для вас:
Обратите внимание, что все может работать на одной машине для одной платформы или на одной машине с виртуальными машинами, на которых работают другие платформы.
Свободный, с открытым исходным кодом, прокрутите страницу вниз для ссылок на документацию, исходный код и другую информацию.
Ответ 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
Ответ 11
Я всегда использую экран микровибра, чтобы сделать снимок экрана любой веб-страницы. Здесь мы можем найти хорошо написанный учебник. Это проще и не нужно учиться более 3 минут.
Ответ 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" />
Например, здесь полный снимок экрана этой самой страницы:
Ответ 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, чтобы сделать это, вот статья, показывающая простой пример использования службы.
Ответ 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: используйте одну из множества доступных библиотек
- дом-к-изображения
- wkhtmltoimage (включен в инструмент wkhtmltopdf)
- phpwkhtmltopdf
- ...
Pros
- Конверсия в большинстве случаев довольно быстрая
Cons
- Плохой рендеринг
- Не выполняет JavaScript
- Отсутствует поддержка последних веб-функций (FlexBox, расширенные селекторы, веб-шрифты, размеры ящиков, медиазапросы, теги HTML5...)
- Иногда не так просто установить
- Сложно масштабировать
Вариант 3: используйте PhantomJs и, возможно, библиотеку-обертку
- PhantomJs
- php-phantomjs (библиотека-оболочка php для PhantomJs)
- ...
Pros
- Выполнить Javascript
- Довольно быстро
Cons
- Плохой рендеринг
- PhantomJs устарела и больше не поддерживается.
- Отсутствует поддержка последних веб-функций (FlexBox, расширенные селекторы, веб-шрифты, размеры ящиков, медиазапросы, теги HTML5...)
- Сложно масштабировать
- Не так легко заставить его работать, если есть загружаемые изображения...
Вариант 4: используйте Chrome Headless и, возможно, библиотеку-обертку
Pros
- Выполнить Javascript
- Почти идеальный рендеринг
Cons
- Не так просто получить желаемый результат в отношении:
- время загрузки страницы
- интеграция с прокси
- автоматическая прокрутка
- ...
- Сложно масштабировать
- Довольно медленно и даже медленнее, если HTML содержит внешние ссылки
Отказ от ответственности: я основатель ApiFlash. Я сделал все возможное, чтобы дать честный и полезный ответ.
Ответ 21
Я использовал page2images. Это разработанная база на cutycapt, которая действительно быстрая и стабильная. Если вы не хотите тратить слишком много времени на производительность и настройку, вы должны использовать его. Если вы заходите на их сайт, вы можете найти более подробную информацию и образец кода PHP.
Ответ 22
После долгих поисков в сети я нашел это.
PPTRAAS > Бесплатный инструмент для захвата скриншота путем передачи вашего URL в качестве параметра
Они предоставляют несколько вариантов, просто нажав их URL.
-
Получить полный скриншот страницы
https://pptraas.com/screenshot?url= {ВЫ URL ЗДЕСЬ}
-
Получить скриншот страницы определенного размера
https://pptraas.com/screenshot?url= {ВАШ URL ЗДЕСЬ} & size = 400 400
-
Можно даже конвертировать страницу в 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!");
?>
Они имеют очень хорошую документацию здесь, так что вы должны обязательно посмотреть.