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

364

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

  • 2
    Если вам нравится решение проблемы, обратите внимание на Usersnap - это хороший сервис, предлагающий точные снимки экрана веб-сайта. Вам просто нужно добавить небольшой фрагмент Javascript на свою страницу, чтобы он заработал.
  • 1
    Usersnap не может справиться с веб-страницами, которые используют Ajax для создания контента, как на этой странице . Как я мог этого добиться? скажем так: сделайте скриншот через 10 секунд после начальной загрузки страницы
Показать ещё 1 комментарий
Теги:
screenshot

23 ответа

252

ПОСЛЕДНИЙ РЕДАКТОР: через 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 напрямую

  • 11
    +1 для wkhtmltopdf. Я играл с некоторыми другими библиотеками, но ни одна из них даже не приблизилась к поддержке чего-либо большего, чем очень простой HTML и CSS. wkhtmltopdf может делать все, что делает Safari, так что вы в безопасности.
  • 1
    imagemagick работает для меня.
Показать ещё 6 комментариев
82

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

  • 21
    Не совсем так ли PHP?
45

Если вы не хотите использовать сторонние инструменты, я столкнулся с простым решением, которое использует 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.

  • 3
    Это довольно круто и, похоже, работает без предоставления ключа API. Возвращенное изображение повреждено, вам нужно заменить все '_' на '/' и все '-' на '+', а затем вы можете просто добавить его как данные
  • 9
    Это круто. Я закодировал это на gist.github.com/jaseclamp/d4ac6205db352e822ff6
Показать ещё 4 комментария
19

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

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

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

И вот API- https://stackoverflow.com/questions/757675/website-screenshots

  • 0
    PhantomJS, как правило, является отличным решением для этого, хотя, когда я использовал его именно для этой цели, не все элементы интерфейса HTML отображались правильно.
  • 1
    screen.microweber.com/shot.php?url=https://stackoverflow.com/… теперь 404 и задается вопросом, следует ли здесь удалить ответ. В любом случае, это должно быть обновлено.
16

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

https://wkhtmltopdf.org/

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

  • 1
    Кстати, я установил его на Ubuntu 10.04 просто с помощью apt-get. Тем не менее, когда я запустил его, он был очень, очень медленным, и макет PDF был неуверенным и не вполне приемлемым вариантом. Тем не менее, он обещает использовать KHTML таким образом - в конечном итоге - для генерации изображений.
  • 0
    @Volomike - Вы не можете получить лучшие результаты, чем этот, поскольку, как вы знаете, используется браузер, соответствующий стандартам. Что касается скорости, компания, с которой я работаю, неоднократно использовала ее в различных проектах, требующих мелкозернистых (но небольших) CSS-проектов.
Показать ещё 2 комментария
10

Мне пришлось сделать это раньше для клиента, и из опыта один из самых простых способов сделать это - использовать бесплатную стороннюю службу под названием 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);
10

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

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

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

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

Edit:

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

  • 0
    shrinktheweb это круто, у них есть библиотека php
10

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

http://browsershots.org/

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

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

  • 24
    Правило 37: Излишества нет. Есть только «открытый огонь» и «время для перезагрузки».
  • 0
    Исходный код все еще запускает настольный браузер для рендеринга. Это не совсем потокобезопасно и может быть подвержено блокировке.
Показать ещё 1 комментарий
5

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

  • 1
    Служба была остановлена.
4

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

  • 0
    ой. Извини за это. Похоже, блога больше нет. Попробуйте github.com/graphcool/chromeless @NarendraVerma
4

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

4

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

3

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

Изображение 759

3

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

2

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

1

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

  • 0
    Если вам нужны полностраничные скриншоты, для этого провайдера требуется подписка Professional ($ 170 / год).
1

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

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

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

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

1

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

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

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

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

1

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

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

  • 2
    @ Смит: В прошлый раз, когда я проверял, у CutyCapt есть все зависимости в установщике. Да, вы, вероятно, не сможете установить это под ограниченной учетной записью, но это жизнь. Обратите внимание, что все другие решения используют какую-то оболочку для ядра рендеринга, поэтому вы находитесь в одном месте с ними.
0

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

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

0

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

-2

Я нашел, что это лучший и простой инструмент: 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!");
?>

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

-2

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

  • 0
    Сейчас доступно много библиотек PHP. Не совсем библиотека «PHP». Включает в себя некоторые JS-браузер и коды.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню