Есть ли способ сделать снимок экрана веб-сайта в PHP, а затем сохранить его в файл?
ПОСЛЕДНИЙ РЕДАКТОР: через 7 лет я все еще получаю ответы за этот ответ, но я думаю, что теперь он намного точнее.
Конечно, вы можете, но вам нужно отобразить страницу с чем-то. Если вы действительно хотите использовать php, я предлагаю вам HTMLTOPS, который отображает страницу и выводит ее в файл ps (ghostscript), а затем конвертирует ее в.jpg,.png,.pdf.. может быть немного медленнее с сложные страницы (и не поддерживают все CSS).
Кроме того, вы можете использовать wkhtmltopdf для вывода html-страницы в pdf, jpg, что угодно. Примите 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');
?>
Изменить: Примечание. Эти функции доступны только в системах 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
Для просмотра мобильного сайта &strategy=mobile
в параметрах
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=www.stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
DEMO.
Вы можете использовать простой браузер без заголовка, например PhantomJS, для захвата страницы.
Также вы можете использовать PhantomJS с PHP.
Проверьте этот маленький php script, который делает это. Посмотрите здесь https://github.com/microweber/screen
И вот API- https://stackoverflow.com/questions/757675/website-screenshots
Это должно быть хорошо для вас:
Убедитесь, что вы загрузили дистрибутив wkhtmltoimage!
Мне пришлось сделать это раньше для клиента, и из опыта один из самых простых способов сделать это - использовать бесплатную стороннюю службу под названием 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);
Да. Вам понадобятся некоторые вещи:
См. khtmld (aemon) на * nx. См. Url2Jpg для Windows, но поскольку это приложение dotNet, вы также должны chek Url2Bmp
Оба являются консольными инструментами, которые вы можете использовать из своего веб-приложения, чтобы получить снимок экрана.
Существуют также веб-сервисы, которые его предлагают. Например, этот.
Edit:
Эта ссылка полезна для.
В Python, но просматривая документацию и код, вы можете точно увидеть, как это делается. Если вы можете запустить python, то это готовое решение для вас:
Обратите внимание, что все может работать на одной машине для одной платформы или на одной машине с виртуальными машинами, на которых работают другие платформы.
Свободный, с открытым исходным кодом, прокрутите страницу вниз для ссылок на документацию, исходный код и другую информацию.
Да, это так. Если вам нужен только образ 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
Ну, 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
Я всегда использую экран микровибра, чтобы сделать снимок экрана любой веб-страницы. Здесь мы можем найти хорошо написанный учебник. Это проще и не нужно учиться более 3 минут.
cutycapt сохраняет веб-страницы в большинстве форматов изображений (jpg, png..) загружает его из вашего синаптика, он работает намного лучше, чем wkhtmltopdf
Существует много проектов с открытым исходным кодом, которые могут создавать скриншоты. Например, 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" />
Например, здесь полный снимок экрана этой самой страницы:
Я установил, наконец, используя 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
. Когда вы увидите снимок экрана, все готово. Обсуждение для более предварительной настройки доступно здесь и здесь.
Я нахожусь в Windows, поэтому я смог использовать функцию imagegrabwindow после прочтения подсказки здесь от stephan. Я добавил в обрезку (чтобы избавиться от заголовка браузера, полос прокрутки и т.д.) И изменить размер, чтобы получить окончательное изображение. Здесь мой код. Надежда, которая помогает кому-то.
Вы можете использовать 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
если нет. Подробнее см. Документацию.
Все зависит от того, как вы хотите сделать снимок экрана.
Вы можете сделать это через PHP, используя веб-сервис, чтобы получить изображение для вас
У grabz.it есть webservice, чтобы сделать это, вот статья, показывающая простой пример использования службы.
Я использовал bluga. Api позволяет вам принимать 100 снимков в месяц без оплаты, но иногда он использует более 1 кредита для одной страницы. Я только что закончил модернизацию модуля drupal Bluga WebThumbs до drupal 7, который позволяет печатать миниатюру в шаблоне или входном фильтре.
Основное преимущество использования этого api заключается в том, что он позволяет указывать размеры браузера в случае использования адаптивного css, поэтому я использую его для получения рендеринга для планшета для мобильных устройств и планшета, а также для обычного.
Существуют клиенты api для следующих языков:
PHP, Python, Ruby, Java, .NET С#, Perl и Bash (оболочка script выглядит так, как будто она требует perl)
webkit2html работает на Mac OS X и Linux, довольно просто установить и использовать. См. этот учебник.
Для Windows вы можете перейти с CutyCapt, который имеет схожие функции.
вы можете использовать cutycapt.
kwhtml устарел и показывает страницу как старый браузер.
Я использовал page2images. Это разработанная база на cutycapt, которая действительно быстрая и стабильная. Если вы не хотите тратить слишком много времени на производительность и настройку, вы должны использовать его. Если вы заходите на их сайт, вы можете найти более подробную информацию и образец кода PHP.
Я нашел, что это лучший и простой инструмент: 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!");
?>
Они имеют очень хорошую документацию здесь, так что вы должны обязательно посмотреть.
Не напрямую. Программное обеспечение, такое как Selenium, имеет такие функции и может управляться PHP, но имеет другие зависимости (например, запуск своего Java-сервера на компьютере с браузером, который вы хотите снять с экрана)