Gibt es eine Möglichkeit, einen Screenshot einer Website in PHP zu erstellen und ihn dann in einer Datei zu speichern?
Gibt es eine Möglichkeit, einen Screenshot einer Website in PHP zu erstellen und ihn dann in einer Datei zu speichern?
Antworten:
LETZTE BEARBEITUNG : Nach 7 Jahren bekomme ich immer noch positive Stimmen für diese Antwort, aber ich denke, diese ist jetzt viel genauer.
Sicher können Sie, aber Sie müssen die Seite mit etwas rendern. Wenn Sie wirklich nur PHP verwenden möchten , empfehle ich Ihnen HTMLTOPS , das die Seite rendert und in einer PS-Datei (Ghostscript) ausgibt. Dann kann die Konvertierung in eine JPG- , PNG- , PDF- Datei etwas langsamer sein komplexe Seiten (und unterstützen nicht alle CSS).
Andernfalls können Sie wkhtmltopdf verwenden, um eine HTML-Seite in pdf, jpg usw. auszugeben. Akzeptieren Sie CSS2.0, verwenden Sie das Webkit (Safari-Wrapper), um die Seite zu rendern. Sollte also in Ordnung sein. Sie müssen es auch auf Ihrem Server installieren.
UPDATE Mit der neuen HTML5- und JS-Funktion ist es jetzt auch möglich, die Seite mit JavaScript in ein Canvas-Objekt zu rendern. Hier eine nette Bibliothek, um das zu tun: Html2Canvas und hier ist eine Implementierung des gleichen Autors, um ein Feedback wie G + zu erhalten. Sobald Sie den Dom in den Canvas gerendert haben, können Sie ihn über Ajax an den Server senden und als JPG speichern.
BEARBEITEN : Sie können das Imagemagick-Tool verwenden, um PDF in PNG umzuwandeln. Meine Version von wkhtmltopdf unterstützt keine Bilder. ZB convert html.pdf -append html.png
.
BEARBEITEN : Dieses kleine Shell-Skript bietet ein einfaches / aber funktionierendes Anwendungsbeispiel unter Linux mit php5-cli und den oben genannten Tools.
EDIT : Ich habe jetzt bemerkt, dass das wkhtmltopdf-Team an einem anderen Projekt arbeitet: wkhtmltoimage, das Ihnen das JPG direkt gibt
Seit PHP 5.2.2 ist es möglich, eine Website ausschließlich mit PHP zu erfassen !
imagegrabscreen - Erfasst den gesamten Bildschirm
<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
imagegrabwindow - Erfasst ein Fenster oder seinen Clientbereich mithilfe eines Windows-Handles (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 Funktionen 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 die Google Page Insight- API verwendet.
Ich muss es nur API mit Params nennen screenshot=true
.
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
Für die mobile Site-Ansicht übergeben Sie &strategy=mobile
params,
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
DEMO .
Sie können einen einfachen kopflosen Browser wie PhantomJS verwenden, um die Seite abzurufen.
Sie können PhantomJS auch mit PHP verwenden.
Schauen Sie sich dieses kleine PHP-Skript an, das dies tut. Schauen Sie hier https://github.com/microweber/screen
Und hier ist die API: http://screen.microweber.com/shot.php?url=/programming/757675/website-screenshots-using-php
Das sollte gut für dich sein:
Stellen Sie sicher, dass Sie die wkhtmltoimage-Distribution 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 prüfen
Beide sind Konsolentools, die Sie über Ihre Web-App verwenden können, um den Screenshot zu erhalten.
Es gibt auch Webdienste, die dies anbieten. Überprüfen Sie dies zum Beispiel.
Bearbeiten:
Dieser Link ist nützlich für.
Es ist in Python, aber wenn Sie die Dokumentation und den Code durchgehen, können Sie genau sehen, wie dies gemacht wird. Wenn Sie Python ausführen können, ist dies eine vorgefertigte Lösung für Sie:
Beachten Sie, dass alles auf einem Computer für eine Plattform oder auf einem Computer mit virtuellen Maschinen auf den anderen Plattformen ausgeführt werden kann.
Kostenlos, Open Source, scrollen Sie zum Ende der Seite, um Links zu Dokumentation, Quellcode und anderen Informationen zu erhalten.
Ja, so ist es. Wenn Sie nur ein Bild der URL benötigen, versuchen Sie dies
<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>
Ü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
Nun, PhantomJS ist ein Browser, der einfach auf einen Server gestellt und in PHP integriert werden kann. Sie finden den Code in WDudes. Sie enthalten viel mehr Funktionen wie das Festlegen der Bildgröße, des Caches, des Herunterladens als Datei oder der Anzeige in img src usw.
<img src=”screenshot.php?url=google.com” />
URL-Parameter
Breite und Höhe: screenhot.php? Url = google.com & w = 1000 & h = 800
Mit Zuschneiden: screenhot.php? Url = google.com & w = 1000 & h = 800 & clipw = 800 & cliph = 600
Deaktivieren Sie den Cache und laden Sie einen neuen Screesnhot: screenhot.php
? Url = google.com & cache = 0
So laden Sie das Bild herunter: screenhot.php? Url = google.com & download = true
Sie können das Tutorial hier sehen: Screenshot einer Website mit PHP ohne API aufnehmen
Ich benutze immer den Microweber-Bildschirm , um Screenshots von Webseiten aufzunehmen. Hier finden wir ein gut geschriebenes Tutorial . Dies ist einfacher und sollte nicht länger als 3 Minuten dauern, um zu lernen.
Ich habe mich endlich mit Microweber / Screen eingerichtet, wie von @boksiora vorgeschlagen.
Beim Versuch des genannten Links hier habe ich zunächst Folgendes bekommen:
Please download this script from here https://github.com/microweber/screen
Ich bin unter Linux. Wenn Sie es also ausführen möchten, können Sie meinen Schritt folgen an Ihre Umgebung anpassen.
Hier ist der Schritt, den ich auf meiner Shell im DOCUMENT_ROOT
Ordner ausgeführt habe:
$ 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
Zeigen Sie mit Ihrem Browser auf screen/demo/shot.php?url=google.com
. Wenn Sie den Screenshot sehen , sind Sie fertig. Eine Diskussion für weitere Voreinstellungen finden Sie hier und hier .
Es gibt viele Open Source-Projekte, die Screenshots erstellen können. Zum Beispiel PhantomJS, webkit2png usw.
Das große Problem bei diesen Projekten ist, dass sie auf älteren Browsertechnologien basieren und Probleme beim Rendern vieler Websites haben, insbesondere von Websites, die in den letzten Monaten / Jahren Webfonts, Flexbox, SVG und verschiedene andere Ergänzungen der HTML5- und CSS-Spezifikation verwenden.
Ich habe einige Dienste von Drittanbietern ausprobiert und die meisten basieren auf PhantomJS, was bedeutet, dass sie auch Screenshots von schlechter Qualität produzieren. Der beste Drittanbieter-Service zum Generieren von Website-Screenshots ist urlbox.io . Es handelt sich um einen kostenpflichtigen Service, obwohl es eine kostenlose 7-Tage-Testversion gibt, um ihn zu testen, ohne sich auf einen kostenpflichtigen Plan festzulegen.
Hier ist ein Link zur Dokumentation . Im Folgenden finden Sie einfache Schritte, um sie in PHP mit Composer zum Laufen zu bringen.
// 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" />
Zum Beispiel hier ein Screenshot dieser Seite in voller Höhe:
Es gibt viele Möglichkeiten und alle haben ihre Vor- und Nachteile. Hier ist eine Liste der Optionen, die nach Implementierungsschwierigkeiten sortiert sind.
Vorteile
Nachteile
Vorteile
Nachteile
Vorteile
Nachteile
Vorteile
Nachteile
Haftungsausschluss: Ich bin der Gründer von ApiFlash. Ich habe mein Bestes getan, um eine ehrliche und nützliche Antwort zu geben.
Ich bin unter Windows, also konnte ich die imagegrabwindow-Funktion verwenden, nachdem ich den Tipp hier von stephan gelesen hatte. Ich habe beim Zuschneiden (um den Browser-Header, die Bildlaufleisten usw. zu entfernen) und beim Ändern der Größe hinzugefügt, um ein endgültiges Bild zu erhalten. Hier ist mein Code . Hoffe das hilft jemandem.
webkit2html funktioniert unter Mac OS X und Linux und ist recht einfach zu installieren und zu verwenden. Siehe dieses Tutorial .
Für Windows können Sie CutyCapt verwenden , das ähnliche Funktionen bietet.
Ich habe Bluga benutzt . Mit der API können Sie 100 Schnappschüsse pro Monat erstellen, ohne dafür zu bezahlen. Manchmal wird jedoch mehr als 1 Guthaben für eine einzelne Seite verwendet. Ich habe gerade ein Drupal-Modul, Bluga WebThumbs , aktualisiert auf Drupal 7 aktualisiert, mit dem Sie eine Miniaturansicht in einer Vorlage oder einem Eingabefilter drucken können.
Der Hauptvorteil bei der Verwendung dieser API besteht darin, dass Sie die Browserdimensionen angeben können, falls Sie adaptives CSS verwenden. Daher verwende ich sie, um Renderings für das mobile und Tablet-Layout sowie für das reguläre Layout zu erhalten.
Es gibt API-Clients für die folgenden Sprachen:
PHP , Python , Ruby , Java , .NET C # , Perl und Bash (das Shell-Skript scheint Perl zu erfordern)
Es hängt alles davon ab, wie Sie den Screenshot aufnehmen möchten.
Sie können dies über PHP tun, indem Sie einen Webservice verwenden, um das Bild für Sie zu erhalten
grabz.it hat einen Webservice, um genau dies zu tun. Hier ist ein Artikel, der ein einfaches Beispiel für die Verwendung des Dienstes zeigt.
Sie können die https: //grabz.it-Lösung verwenden.
Es hat eine PHP-API, die sehr flexibel ist und auf verschiedene Arten aufgerufen werden kann, z. B. von einem Cronjob oder einer PHP-Webseite.
Um es zu implementieren, müssen Sie zuerst einen App-Schlüssel und ein Geheimnis erhalten und herunterladen das (kostenlose) SDK .
Und ein Beispiel für die Umsetzung. Zunächst 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 Screenshot-Beispiel:
// 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 ein öffentlich zugängliches Rückrufhandle verfügbar ist und SaveTo
wenn nicht. Überprüfen Sie die Dokumentation für Details .
Ich habe neulich eine schnelle und schmutzige App dafür geschrieben, indem ich die Google-API verwendet habe. Mit Sicherheit Verbesserungspotenzial ...
Finden Sie es hier mit einer Live-Demo und Code .
Ich habe den Code hier nicht veröffentlicht, nur weil ich ihn weiter verfeinere und ihn hoffentlich, wenn ich Zeit habe, in eine richtige Klasse umwandle.
Ich habe page2images verwendet . Es basiert auf dem Cutycapt, der sehr schnell und stabil ist. Wenn Sie nicht zu viel Zeit mit der Leistung und Konfiguration verbringen möchten, sollten Sie diese verwenden. Wenn Sie zu ihrer Website gehen, finden Sie weitere Details und Beispiel-PHP-Code.
Nach vielem Surfen im Web habe ich das gefunden.
PPTRAAS > Ein kostenloses Tool zum Erfassen von Screenshots, indem Sie Ihre URL als Parameter übergeben
Sie bieten mehrere Optionen, indem Sie einfach auf ihre URL klicken.
Holen Sie sich einen ganzseitigen Screenshot
https://pptraas.com/screenshot?url= {SIE URL HIER}
Holen Sie sich einen Seiten-Screenshot einer bestimmten Größe
https://pptraas.com/screenshot?url= {YOU URL HERE} & size = 400.400
Man kann die Seite sogar in pdf konvertieren
https://pptraas.com/pdf?url= {SIE URL HIER}
Sie könnten 2 Dinge tun.
Benutze Puppenspieler
Mit dem PHP Puppeteer-Paket können Sie einen Browser starten und einen Screenshot erstellen .
Verwenden Sie eine API
Es gibt viele Screenshot-APIs. Sie können sich zum Beispiel ScreenshotAPI.net ansehen . (Haftungsausschluss Ich bin der Schöpfer dieser API)
Nicht direkt. Software wie Selenium verfügt über solche Funktionen und kann von PHP gesteuert werden, weist jedoch andere Abhängigkeiten auf (z. B. das Ausführen des Java-basierten Servers auf dem Computer mit dem Browser, den Sie als Screenshot erstellen möchten).
Sie können Cutycapt verwenden.
kwhtml ist veraltet und zeigt die Seite wie ein 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 können weitere 2.000 für (ungefähr) 20 US-Dollar kaufen. Es ist also ein ziemlich gutes Geschäft. Es hat eine sehr einfache Verwendung, Sie verwenden nur eine URL, also habe ich dieses kleine Skript geschrieben, um eine darauf basierende Datei 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 , so dass Sie auf jeden Fall einen Blick nehmen.