Esiste un modo per acquisire uno screenshot di un sito Web in PHP e salvarlo in un file?
Esiste un modo per acquisire uno screenshot di un sito Web in PHP e salvarlo in un file?
Risposte:
ULTIMA MODIFICA : dopo 7 anni ricevo ancora voti per questa risposta, ma suppongo che questo sia ora molto più accurato.
Certo che puoi, ma dovrai renderizzare la pagina con qualcosa. Se vuoi davvero usare solo php, ti suggerisco HTMLTOPS , che rende la pagina e l'output in un file ps (ghostscript), quindi convertilo in un file .jpg, .png, .pdf .. può essere leggermente più lento con pagine complesse (e non supportano tutti i CSS).
Altrimenti, puoi usare wkhtmltopdf per generare una pagina html in pdf, jpg, qualunque cosa .. Accetta CSS2.0, usa il webkit (il wrapper di Safari) per renderizzare la pagina .. quindi dovrebbe andare bene. Devi installarlo anche sul tuo server ..
AGGIORNARE Ora, con le nuove funzionalità HTML5 e JS, è anche possibile eseguire il rendering della pagina in un oggetto canvas utilizzando JavaScript. Ecco una bella libreria per farlo: Html2Canvas e qui è un'implementazione dello stesso autore per ottenere un feedback come G +. Dopo aver eseguito il rendering del dom nell'area di disegno, è possibile quindi inviarlo al server tramite Ajax e salvarlo come jpg.
EDIT : puoi usare lo strumento imagemagick per trasformare pdf in png. La mia versione di wkhtmltopdf non supporta le immagini. Es convert html.pdf -append html.png
.
MODIFICARE : Questo piccolo script di shell fornisce un esempio di utilizzo semplice / ma funzionante su Linux con php5-cli e gli strumenti sopra menzionati.
EDIT : ho notato ora che il team di wkhtmltopdf sta lavorando a un altro progetto: wkhtmltoimage, che ti dà direttamente il jpg
Da quando PHP 5.2.2 è possibile, catturare un sito Web esclusivamente con PHP !
imagegrabscreen - Cattura l'intero schermo
<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
imagegrabwindow : prende una finestra o la sua area client usando un handle di Windows (proprietà HWND nell'istanza 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');
?>
Modifica: Nota, queste funzioni sono disponibili SOLO su sistemi Windows!
Se non desideri utilizzare strumenti di terze parti, mi sono imbattuto in una semplice soluzione che utilizza Google Page Insight api.
Devo solo chiamare API con i parametri screenshot=true
.
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
Per passare la vista del sito mobile &strategy=mobile
nei parametri,
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
DEMO .
È possibile utilizzare un semplice browser senza testa come PhantomJS per afferrare la pagina.
Inoltre puoi usare PhantomJS con PHP.
Dai un'occhiata a questo piccolo script php che lo fa. Dai un'occhiata qui https://github.com/microweber/screen
Ed ecco l'API- http://screen.microweber.com/shot.php?url=/programming/757675/website-screenshots-using-php
Questo dovrebbe essere buono per te:
Assicurati di scaricare la distribuzione wkhtmltoimage!
Sì. Avrai bisogno di alcune cose:
Vedi khtmld (aemon) su * nx. Vedi Url2Jpg per Windows ma poiché si tratta dell'app dotNet dovresti anche controllare Url2Bmp
Entrambi sono strumenti della console che puoi utilizzare dalla tua app Web per ottenere lo screenshot.
Ci sono anche servizi web che lo offrono. Controllare questo fuori per esempio.
Modificare:
Questo link è utile per.
È in Python, ma esaminando la documentazione e il codice puoi vedere esattamente come è fatto. Se riesci a eseguire Python, allora è una soluzione pronta per te:
Si noti che tutto può essere eseguito su una macchina per una piattaforma o una macchina con macchine virtuali che eseguono le altre piattaforme.
Gratuito, open source, scorrere fino alla fine della pagina per collegamenti a documentazione, codice sorgente e altre informazioni.
Sì. Se hai bisogno solo dell'immagine dell'URL, prova questo
<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>
Passa l'URL come argomento e otterrai l'immagine per maggiori dettagli controlla questo link http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html
Bene, PhantomJS è un browser che può essere facilmente inserito su un server e integrato in php. Puoi trovare il codice in WDudes. Hanno incluso molte più funzioni come specificare la dimensione dell'immagine, la cache, il download come file o la visualizzazione in img src ecc.
<img src=”screenshot.php?url=google.com” />
Parametri URL
Larghezza e altezza: screenshot.php? Url = google.com & w = 1000 & h = 800
Con il ritaglio: screenshot.php? Url = google.com & w = 1000 & h = 800 & clipw = 800 & cliph = 600
Disabilita la cache e carica un nuovo screesnhot:
screenshot.php? Url = google.com & cache = 0
Per scaricare l'immagine: screenshot.php? Url = google.com & download = true
Puoi vedere il tutorial qui: Cattura Screenshot di un sito Web usando PHP senza API
Uso sempre lo schermo di Microonde per acquisire screenshot di qualsiasi pagina Web. Qui possiamo trovare un tutorial ben scritto . Questo è più facile e non dovrebbe richiedere più di 3 minuti per imparare.
Ho installato finalmente usando microweber / screen come proposto da @boksiora.
Inizialmente quando ho provato il link menzionato qui ho ottenuto:
Please download this script from here https://github.com/microweber/screen
Sono su Linux. Quindi, se vuoi eseguirlo, puoi adattare il mio passo al tuo ambiente.
Ecco il passaggio che ho fatto sulla mia shell nella DOCUMENT_ROOT
cartella:
$ 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
Punta il browser verso screen/demo/shot.php?url=google.com
. Quando vedi lo screenshot , hai finito. La discussione per ulteriori impostazioni anticipate è disponibile qui e qui .
Esistono molti progetti open source in grado di generare schermate. Ad esempio PhantomJS, webkit2png ecc
Il grosso problema di questi progetti è che si basano sulla tecnologia del browser precedente e hanno problemi nel rendering di molti siti, in particolare i siti che utilizzano font web, flexbox, svg e varie altre aggiunte alle specifiche HTML5 e CSS negli ultimi due mesi / anni.
Ho provato alcuni dei servizi di terze parti e la maggior parte sono basati su PhantomJS, il che significa che producono anche schermate di scarsa qualità. Il miglior servizio di terze parti per la generazione di schermate di siti Web è urlbox.io . È un servizio a pagamento, sebbene sia disponibile una prova gratuita di 7 giorni per testarlo senza impegnarsi in alcun piano a pagamento.
Ecco un link alla documentazione , e di seguito sono riportati semplici passaggi per farlo funzionare in PHP con compositore.
// 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" />
Ad esempio, ecco uno screenshot a tutta altezza di questa stessa pagina:
Ci sono molte opzioni e tutti hanno i loro pro e contro. Ecco un elenco di opzioni ordinate per difficoltà di implementazione.
Professionisti
Contro
Professionisti
Contro
Professionisti
Contro
Professionisti
Contro
Disclaimer: sono il fondatore di ApiFlash. Ho fatto del mio meglio per fornire una risposta onesta e utile.
Sono su Windows, quindi sono stato in grado di utilizzare la funzione imagegrabwindow dopo aver letto il suggerimento qui da Stephan. Ho aggiunto il ritaglio (per eliminare l'intestazione del browser, le barre di scorrimento, ecc.) E il ridimensionamento per ottenere un'immagine finale. Ecco il mio codice . Spero che aiuti qualcuno.
webkit2html funziona su Mac OS X e Linux, è abbastanza semplice da installare e da utilizzare. Vedi questo tutorial .
Per Windows, puoi usare CutyCapt , che ha funzionalità simili.
Ho usato Bluga . L'API ti consente di scattare 100 istantanee al mese senza pagare, ma a volte utilizza più di 1 credito per una singola pagina. Ho appena finito di aggiornare un modulo drupal, Bluga WebThumbs a drupal 7 che consente di stampare una miniatura in un modello o in un filtro di input.
Il vantaggio principale dell'utilizzo di questa API è che ti consente di specificare le dimensioni del browser nel caso in cui utilizzi CSS adattivi, quindi lo sto usando per ottenere rendering per il layout mobile e tablet, nonché quello normale.
Esistono client API per le seguenti lingue:
PHP , Python , Ruby , Java , .Net C # , Perl e Bash (lo script della shell sembra richiedere perl)
Tutto dipende da come desideri acquisire lo screenshot.
Puoi farlo tramite PHP, usando un servizio web per ottenere l'immagine per te
grabz.it ha un servizio web per fare proprio questo, ecco un articolo che mostra un semplice esempio di utilizzo del servizio.
Puoi usare la soluzione https://grabz.it .
Ha un'API PHP che è molto flessibile e può essere chiamata in diversi modi come da una cronjob o una pagina web PHP.
Per implementarlo dovrai prima ottenere una chiave dell'app, un segreto e un download l'SDK (gratuito).
E un esempio per l'implementazione. Prima di tutto l'inizializzazione:
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");
E esempio di screenshot:
// 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");
Il prossimo è il salvataggio. È possibile utilizzare uno dei due metodi di salvataggio, Save
se è disponibile l'handle di callback accessibile pubblicamente e in SaveTo
caso contrario. Controlla la documentazione per i dettagli .
L'altro giorno ho scritto un'app veloce e sporca per farlo usando l'API di Google. Certamente possibilità di miglioramento ...
Trovalo qui con una demo e un codice live .
Non ho inserito il codice qui semplicemente perché continuo a perfezionarlo e, spero, quando ho tempo, lo converto in una classe corretta.
Ho usato page2images . È sviluppato sulla base del cutycapt che è veramente veloce e stabile. Se non si desidera dedicare troppo tempo alle prestazioni e alla configurazione, è necessario utilizzarlo. Se vai sul loro sito Web, puoi trovare maggiori dettagli e un esempio di codice PHP.
Dopo tanto per navigare sul web ho trovato questo.
PPTRAAS > Uno strumento gratuito per catturare screenshot passando l'URL come parametro
Forniscono più opzioni semplicemente premendo il loro URL.
Ottieni uno screenshot a pagina intera
https://pptraas.com/screenshot?url= {YOU URL HERE}
Ottieni uno screenshot di pagina di dimensioni specifiche
https://pptraas.com/screenshot?url= {YOU URL HERE} & size = 400.400
Si può anche convertire la pagina in pdf
https://pptraas.com/pdf?url= {YOU URL HERE}
Potresti fare 2 cose.
Usa burattinaio
Puoi usare il pacchetto PHP Puppeteer per far girare un browser e fare uno screenshot.
Usa un'API
Esistono molte API per screenshot. Puoi guardare ScreenshotAPI.net per esempio. (Dichiarazione di non responsabilità Sono il creatore di quell'API)
Non direttamente Software come Selenium hanno funzionalità come questa e possono essere controllati da PHP ma hanno altre dipendenze (come eseguire il proprio server basato su Java sul computer con il browser che si desidera acquisire)
puoi usare cutycapt.
kwhtml è obsoleto e mostra la pagina come il vecchio browser.
Ho scoperto che questo è lo strumento migliore e più semplice in circolazione: ScreenShotMachine . È un servizio a pagamento, ma ottieni 100 screenshot gratuiti e puoi acquistarne altri 2.000 per (circa) $ 20, quindi è un buon affare. Ha un utilizzo molto semplice, basta usare un URL, quindi ho scritto questo piccolo script per salvare un file basato su di esso:
<?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!");
?>
Hanno un'ottima documentazione qui , quindi dovresti assolutamente dare un'occhiata.