Чи є спосіб зробити знімок екрана веб-сайту в PHP, а потім зберегти його у файл?
Чи є спосіб зробити знімок екрана веб-сайту в PHP, а потім зберегти його у файл?
Відповіді:
Останнє редагування : через 7 років я все ще отримую інформацію за цю відповідь, але, мабуть, ця зараз набагато точніша.
Звичайно, ви можете, але вам потрібно буде щось перетворити на сторінку. Якщо ви дійсно хочете використовувати лише php, я пропоную вам HTMLTOPS , який відображає сторінку та виводить її у файл ps (ghostscript), а потім конвертувати її у формат .jpg, .png, .pdf. складні сторінки (і підтримують не всі CSS).
В іншому випадку, ви можете використовувати wkhtmltopdf для виведення HTML-сторінки у форматі pdf, jpg, будь-що інше. Ви також повинні встановити його на свій сервер ..
ОНОВЛЕННЯ Тепер, за допомогою нової функції HTML5 та JS, також можна перетворити сторінку в об'єкт із полотном за допомогою JavaScript. Ось приємна бібліотека для цього: Html2Canvas, і ось реалізація того ж автора, щоб отримати зворотний зв'язок, як G +. Після виведення купола в полотно, ви можете відправити на сервер через 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 - захоплює вікно або його клієнтську область за допомогою ручки Windows (властивість 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!
Якщо ви не хочете використовувати жодних сторонніх інструментів, я натрапив на просте рішення, яке використовує api Google Page Insight api.
Просто потрібно назвати це api парами 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
DEMO .
Ви можете використовувати простий безголовий браузер, як PhantomJS, щоб захопити сторінку.
Також ви можете використовувати PhantomJS з PHP.
Ознайомтеся з цим маленьким скриптом для php, який це робить. Погляньте тут https://github.com/microweber/screen
А ось API- http://screen.microweber.com/shot.php?url=/programming/757675/website-screenshots-using-php
Це повинно бути добре для вас:
Переконайтеся, що ви завантажите wkhtmltoimage розподіл!
Так. Вам знадобляться деякі речі:
Дивіться khtmld (aemon) на * nx. Дивіться Url2Jpg для Windows, але оскільки це dotNet додаток, ви також повинні відзначити Url2Bmp
Обидва є консольними інструментами, які ви можете використовувати з вашого веб-програми, щоб отримати знімок екрана.
Є також веб-сервіси, які пропонують це. Перевірте це , наприклад.
Редагувати:
Це посилання корисно.
Це в 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 & w = 1000 & h = 800 & clipw = 800 & cliph = 600
Вимкнути кеш-пам’ять та завантажити свіжий посилання:
screenshot.php? Url = google.com & cache = 0
Щоб завантажити зображення: screenshot.php? Url = google.com & download = true
Ви можете ознайомитись з посібником тут: Зробіть знімок екрана веб-сайту за допомогою PHP без API
Я завжди використовую екран для мікровебеля, щоб зробити знімок екрана будь-якої веб-сторінки. Тут ми можемо знайти добре написаний підручник . Це простіше і на навчання не повинно піти більше 3 хвилин.
Нарешті я налаштувався за допомогою мікровебеля / екрану, як запропонував @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 тощо
Велика проблема цих проектів полягає в тому, що вони базуються на старих технологіях браузера і мають проблеми з наданням багатьох сайтів, особливо сайтів, які використовують веб-шрифти, 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" />
Наприклад, ось знімок цієї самої сторінки на повній висоті:
Варіантів дуже багато, і всі вони мають свої плюси і мінуси. Ось список варіантів, упорядкованих за труднощами з реалізацією.
Плюси
Мінуси
Плюси
Мінуси
Плюси
Мінуси
Плюси
Мінуси
Відмова: Я є засновником ApiFlash. Я зробив усе можливе, щоб дати чесну та корисну відповідь.
Я в Windows, тому мені вдалося скористатися функцією imagegrabwindow, прочитавши тут підказку від Стефана. Я додав під час обрізання (щоб позбутися заголовка браузера, смуг прокрутки тощо) та зміни розміру, щоб отримати остаточне зображення. Ось мій код . Сподіваюся, що хтось допомагає.
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 має веб-сервіс, щоб зробити саме це, ось стаття, яка показує простий приклад використання сервісу.
Ви можете використовувати рішення https://grabz.it .
У нього є PHP API, який є дуже гнучким, і його можна викликати різними способами, наприклад, із заробітної плати або веб-сторінки 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
якщо ні. Перевірте документацію на деталі .
Днями я написав швидкий і брудний додаток для цього за допомогою API Google. Звичайно, сфера вдосконалення ...
Знайдіть його тут, використовуючи демо-версію та код наживо .
Я не розміщував тут код просто тому, що продовжую вдосконалювати його і, сподіваюся, коли встигну, перетворити його у належний клас.
Я використав page2images . Це розроблена основа на cutycapt, яка дійсно швидка і стабільна. Якщо ви не хочете витрачати занадто багато часу на продуктивність та конфігурацію, вам слід скористатися цим. Якщо ви перейдете на їхній веб-сайт, ви можете знайти більше деталей та зразок PHP-коду.
Після багато чого для серфінгу в Інтернеті я знайшов це.
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 ТУТ}
Ви могли зробити 2 речі.
Використовуйте Puppeteer
Ви можете використовувати пакет PHP Puppeteer, щоб запустити браузер і зробити знімок екрана.
Використовуйте API
Існує багато API скріншотів. Ви можете, наприклад, поглянути на ScreenshotAPI.net . (Відмова я творець цього API)
Не безпосередньо. Програмне забезпечення, таке як Selenium, має такі функції, як і вони можуть керуватися PHP, але мають інші залежності (наприклад, запуск свого Java-сервера на комп'ютері за допомогою браузера, на який ви хочете зробити знімок екрана)
ви можете використовувати cutycapt.
kwhtml застарілий і показує сторінку, як старий браузер.
Я знайшов це найкращим і найпростішим інструментом навколо: 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!");
?>
Вони мають дуже хорошу документацію тут , так що ви повинні обов'язково подивитися.