Website Screenshots

Gibt es eine Möglichkeit, einen Screenshot einer Website in PHP zu erstellen und ihn dann in einer Datei zu speichern?

Solutions Collecting From Web of "Website Screenshots"

LETZTE BEARBEITUNG : nach 7 Jahren bekomme ich immer noch Upvotes für diese Antwort, aber ich denke, dass dieser jetzt viel genauer ist.


Natürlich kannst du das, aber du musst die Seite mit etwas rendern. Wenn Sie wirklich nur PHP verwenden möchten, schlage ich Ihnen HTMLTOPS vor , das die Seite rendert und in einer ps-Datei (ghostscript) ausgibt, die dann in .jpg, .png, .pdf .. konvertiert werden kann komplexe Seiten (und unterstützen nicht alle CSS).

Andernfalls können Sie wkhtmltopdf verwenden, um eine HTML-Seite in pdf, jpg, was auch immer auszugeben. Akzeptieren Sie CSS2.0, verwenden Sie das Webkit (Safaris Wrapper), um die Seite zu rendern. Das sollte also in Ordnung sein. Sie müssen es auch auf Ihrem Server installieren.

UPDATE Mit der neuen HTML5- und JS-function ist es jetzt auch möglich, die Seite mithilfe von JavaScript in ein Canvas-Objekt zu rendern. Hier eine nette Bibliothek, um das zu tun: Html2Canvas und hier ist eine Implementierung vom selben Autor um ein Feedback wie G + zu erhalten. Sobald Sie das dom in den Canvas gerendert haben, können Sie es über ajax an den Server senden und als jpg speichern.

BEARBEITEN : Sie können das Imagemagick-Tool zum Umwandeln von PDF in PNG verwenden. Meine Version von wkhtmltopdf unterstützt keine Bilder. ZB convert html.pdf -append html.png .

EDIT : Dieses kleine Shell-Skript gibt ein einfaches / aber funktionierendes Anwendungsbeispiel für Linux mit php5-cli und den oben genannten Tools.

EDIT : Mir ist jetzt aufgefallen, dass das wkhtmltopdf Team an einem anderen Projekt arbeitet: wkhtmltoimage, das gibt dir das jpg direkt

Seit PHP 5.2.2 ist es möglich, eine Website nur mit PHP zu erfassen !

imagegrabscreenErfasst den gesamten Bildschirm

 < ?php $img = imagegrabscreen(); imagepng($img, 'screenshot.png'); ?> 

imagegrabwindowErfasst ein Fenster oder seinen Clientbereich mit einem Windows-Handle (HWND-Eigenschaft in der COM-Instanz)

 < ?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'); ?> 

Bearbeiten: Beachten Sie, dass diese functionen NUR auf Windows-Systemen verfügbar sind!

Wenn Sie keine Tools von Drittanbietern verwenden möchten, bin ich auf eine einfache Lösung gestoßen, die Google Page Insight API verwendet.

Ich muss nur sagen, es ist api mit params screenshot screenshot=true .

 https://www.googleapis.com/pagespeedonline/v1/runPagespeed? url=www.stackoverflow.com/&key={your_api_key}&screenshot=true 

Für mobile Site Ansicht Pass &strategy=mobile in Params,

 https://www.googleapis.com/pagespeedonline/v1/runPagespeed? url=www.stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile 

DEMO .

Sie können einen einfachen kopflosen Browser wie PhantomJS verwenden, um die Seite zu erfassen.

Sie können PhantomJS auch mit PHP verwenden.

Schau dir dieses kleine PHP-Skript an, das das macht. Sehen Sie sich hier https://github.com/microweber/screen an

Und hier ist die API http://screen.microweber.com/shot.php?url=https://stackoverflow.com/questions/757675/website-screenshots-using-php

Das sollte dir gut tun:

https://wkhtmltopdf.org/

Stellen Sie sicher, dass Sie die Distribution wkhtmltoimage herunterladen!

Ja. Sie werden einige Dinge brauchen, um:

Siehe khtmld (aemon) auf * nx. Siehe Url2Jpg für Windows, aber da es sich um eine dotNet App handelt, sollten Sie auch Url2Bmp testen

Beide sind Konsolen-Tools, die Sie aus Ihrer Web-App nutzen können, um den Screenshot zu erhalten.

Es gibt auch Webdienste, die es anbieten. Überprüfen Sie dies zum Beispiel.

Bearbeiten:

Dieser Link ist nützlich für.

Es ist in Python, aber über die Dokumentation und den Code können Sie genau sehen, wie das gemacht wird. Wenn Sie Python ausführen können, dann ist es eine fertige Lösung für Sie:

http://browsershots.org/

Beachten Sie, dass alles auf einer Maschine für eine Plattform oder auf einer Maschine mit virtuellen Maschinen laufen kann, auf denen die anderen Plattformen laufen.

Frei, Open Source, blättern Sie bis zum Ende der Seite für Links zu Dokumentation, Quellcode und anderen Informationen.

Ja, so ist es. Wenn Sie nur ein Bild von URL benötigen, versuchen Sie dies

  

Übergeben Sie die URL als Argument und Sie erhalten das Bild für weitere Details überprüfen Sie diesen Link http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html

cutycapt speichert Webseiten in den meisten Bildformaten (jpg, png …). Laden Sie es von Ihrer Synapse herunter, es funktioniert viel besser als wkhtmltopdf

Ich benutze immer einen Microweber-Bildschirm , um Screenshots von Webseiten zu erstellen. Hier finden Sie ein gut geschriebenes Tutorial . Dies ist einfacher und sollte nicht länger als 3 Minuten dauern.

Nun, PhantomJS ist ein Browser, der einfach auf einen Server gestellt und in PHP integriert werden kann. Sie können den Code in WDudes finden. Sie haben viel mehr functionen wie die Angabe der Bildgröße, Cache, Download als Datei oder Anzeige in img src usw. enthalten

  

URL-Parameter

  • Breite und Höhe: screenshot.php? Url = google.com & w = 1000 & h = 800

  • Mit dem Zuschneiden: screenshot.php? Url = google.com & w = 1000 & h = 800 & clipw = 800 & cliph = 600

  • Cache deaktivieren und frischen screesnhot laden:
    screenshot.php? url = google.com & cache = 0

  • Um das Bild herunterzuladen: screenshot.php? Url = google.com & download = true

Sie können das Tutorial hier sehen: Capture Screenshot einer Website mit PHP ohne API

Ich habe mich schließlich mit Microweber / Bildschirm wie von @boksiora vorgeschlagen eingerichtet.
Anfangs beim Versuch, den erwähnten Link hier zu bekommen, was ich bekommen habe:

 Please download this script from here https://github.com/microweber/screen 

Ich bin auf Linux. Also, wenn Sie es ausführen möchten, können Sie meine Schrittfolge an Ihre Umgebung anpassen.
Hier sind die Schritte, die ich in meiner Shell im Ordner 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 Ihren Browser auf screen/demo/shot.php?url=google.com . Wenn Sie den Screenshot sehen , sind Sie fertig. Diskussion für weitere Voreinstellungen gibt es hier und hier .

Es gibt viele Open-Source-Projekte, die Screenshots generieren können. Zum Beispiel PhantomJS, webkit2png usw

Das große Problem bei diesen Projekten ist, dass sie auf älterer Browser-Technologie basieren und Probleme beim Rendern vieler Websites haben, insbesondere bei Websites, die in den letzten Monaten / Jahren webfonts, flexbox, svg und diverse andere Zusätze zur HTML5- und CSS-Spezifikation verwenden.

Ich habe ein paar der Dienste von Drittanbietern ausprobiert, und die meisten basieren auf PhantomJS, was bedeutet, dass sie auch Screenshots von schlechter Qualität liefern. Der beste Third-Party-Service zum Generieren von Webseiten-Screenshots ist urlbox.io . Es ist ein kostenpflichtiger Dienst, obwohl es eine kostenlose 7-Tage-Testversion gibt, um es zu testen, ohne einen bezahlten Plan zu begehen.

Hier ist ein Link zu der Dokumentation , und unten sind einfache Schritte, um es in PHP mit Composer arbeiten zu lassen.

 // 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 https://stackoverflow.com/questions/757675/website-screenshots/$urlboxUrl = $urlbox->generateUrl($options); // https://stackoverflow.com/questions/757675/website-screenshots/$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!  

Zum Beispiel hier ist ein Screenshot in voller Höhe von dieser Seite:

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 = wahr

Ganzer Seiten-Screenshot von stackoverflow.com question powered by urlbox.io

Ich bin auf Windows, also konnte ich die imagegrabwindow function benutzen, nachdem ich den Tipp von Stephan hier gelesen habe. Ich fügte Cropping hinzu (um die Browser-Kopfzeile, Bildlaufleisten usw. zu entfernen) und ändere die Größe, um ein endgültiges Bild zu erhalten. Hier ist mein Code . Hoffe das hilft jemandem.

webkit2html funktioniert unter Mac OS X und Linux, ist recht einfach zu installieren und zu benutzen. Siehe dieses Tutorial .

Unter Windows können Sie mit CutyCapt arbeiten , das ähnliche functionen bietet.

Ich habe Bluga benutzt . Die API ermöglicht es Ihnen, 100 Schnappschüsse pro Monat ohne zu bezahlen, aber manchmal verwendet es mehr als 1 Kredit für eine einzelne Seite. Ich habe gerade ein Drupal-Modul, Bluga WebThumbs, auf Drupal 7 aktualisiert, mit dem Sie ein Thumbnail in einer Vorlage oder einem Eingabefilter drucken können.

Der Hauptvorteil dieser API besteht darin, dass Sie die Größe des Browsers angeben können, wenn Sie adaptives CSS verwenden. Daher verwende ich es, um Renderings für das Layout von Mobiltelefonen und Tablets zu erstellen.

Es gibt api-Clients für die folgenden Sprachen:

PHP , Python , Ruby , Java , .NET C # , Perl und Bash (das Shell-Skript sieht so aus, als würde es perl erfordern)

Alles hängt davon ab, wie Sie den Screenshot erstellen möchten.

Sie können dies über PHP tun, mit einem Webservice, um das Bild für Sie zu bekommen

grabz.it hat einen Webservice, um genau das zu tun. Hier ist ein Artikel, der ein einfaches Beispiel für die Nutzung des Dienstes zeigt.

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

Sie können https://grabz.it Lösung verwenden.

Es hat eine PHP-API, die sehr flexibel ist und auf verschiedene Arten aufgerufen werden kann, zB von einer Cronjob- oder einer PHP-Webseite.

Um es zu implementieren, müssen Sie zuerst einen App-Schlüssel und ein Geheimnis herunterladen und das (kostenlose) SDK herunterladen .

Und ein Beispiel für die Implementierung. Zunächst einmal Initialisierung:

 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"); 

Und Screenshotbeispiel:

 // 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"); 

Als nächstes folgt das Speichern. Sie können eine der beiden Speichermethoden verwenden, Save wenn öffentlich zugängliches Callback-Handle verfügbar ist, und SaveTo falls nicht. Überprüfen Sie die Dokumentation für Details .

Ich habe page2images benutzt . Es basiert auf dem Cutycapt, das wirklich schnell und stabil ist. Wenn Sie nicht zu viel Zeit mit der performance und Konfiguration verbringen möchten, sollten Sie sie verwenden. Wenn Sie auf ihre Website gehen, finden Sie weitere Details und Beispiele für PHP-Code.

Nicht direkt. Software wie seleniumium haben functionen wie diese und können von PHP gesteuert werden, haben aber andere Abhängigkeiten (z. B. das Ausführen ihres Java-basierten Servers auf dem Computer mit dem Browser, den Sie screenshot wollen)

Sie können Cutycapt verwenden.

kwhtml ist veraltet und zeigt Seite wie alter Browser.

Ich habe festgestellt, dass dies das beste und einfachste Tool ist: ScreenShotMachine . Es ist ein kostenpflichtiger Service, aber Sie erhalten 100 kostenlose Screenshots und Sie können weitere 2.000 für (ca.) $ 20 kaufen, also ist es ein ziemlich guter Deal. Es hat eine sehr einfache Verwendung, Sie verwenden nur eine URL, also schrieb ich dieses kleine Skript, um eine Datei basierend darauf zu speichern:

 < ?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!"); ?> 

Sie haben eine sehr gute Dokumentation hier , also sollten Sie unbedingt einen Blick darauf casting.