Site web des captures d'écran

Est-il possible de prendre une capture d'écran d'un site web en PHP, puis de le sauvegarder dans un fichier?

386
demandé sur Paolo Forgia 2009-04-16 23:25:18

22 réponses

dernière édition : après 7 ans, je suis encore obtenir des notes pour cette réponse, mais je suppose que celui-ci est maintenant beaucoup plus précise.


bien sûr que vous pouvez, mais vous aurez besoin de rendre la page avec quelque chose. Si vous voulez vraiment utiliser php, je vous suggère HTMLTOPS , qui rend la page et les sorties dans un fichier ps (ghostscript), puis, le convertir en un .jpg,.png,.PDF.. peut soyez un peu plus lent avec les pages complexes (et ne supportez pas tous les CSS).

autrement, vous pouvez utiliser wkhtmltopdf pour produire une page html en pdf, jpg, n'importe quoi.. Accepter CSS2.0, utilisez le webkit (safari's wrapper) pour rendre la page.. donc, doit être fine. Vous devez l'installer sur votre serveur..

mise à JOUR Maintenant, avec le nouveau HTML5 et JS fonctionnalité est également possible d'afficher la page dans un canvas à l'aide de JavaScript. Voici une belle bibliothèque pour faire cela: Html2Canvas et voici une implémentation par le même auteur pour obtenir un retour d'information comme G+. Une fois que vous avez rendu le dom dans la toile, vous pouvez l'envoyer au serveur via ajax et le sauvegarder en jpg.

EDIT : vous pouvez utiliser l'outil imagemagick pour transformer pdf en png. Ma version de wkhtmltopdf ne supporte pas les images. Par exemple: convert html.pdf -append html.png .

EDIT : ce petit script shell donne un exemple d'utilisation simple / mais efficace de linux avec php5-cli et les outils mentionnés ci-dessus.

EDIT : j'ai remarqué maintenant que l'équipe wkhtmltopdf travaille sur un autre projet: wkhtmltoimage, qui vous donne le jpg directement

267
répondu Strae 2018-08-04 05:45:42

depuis PHP 5.2.2 il est possible, de capturer un site Web avec PHP uniquement !

imagegrabscreen - capture l'écran entier

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

imagegrabwindow - saisit une fenêtre ou sa zone client à l'aide d'une poignée de fenêtres (propriété HWND en instance 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');
?>

Edit: Note, ces fonctions sont disponibles sur les systèmes Windows seulement!

86
répondu stephan 2010-12-24 14:45:07

si vous ne voulez pas utiliser d'outils tiers, Je suis tombé sur une solution simple qui utilise Google Page Insight api.

il suffit d'appeler son api avec params screenshot=true .

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

Pour le site mobile de vue de passer de &strategy=mobile dans les params,

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

Démo .

48
répondu Rikesh 2015-03-10 16:57:53

vous pouvez utiliser un simple navigateur sans tête comme PhantomJS pour saisir la page.

vous pouvez aussi utiliser PhantomJS avec PHP.

Regardez ce petit script php qui fait ça. Regardez ici https://github.com/microweber/screen

et voici L'API - http://screen.microweber.com/shot.php?url=https://stackoverflow.com/questions/757675/website-screenshots-using-php

19
répondu boksiora 2017-05-23 12:18:34

Cela devrait être bon pour vous:

https://wkhtmltopdf.org /

assurez-vous de télécharger la distribution wkhtmltoimage!

16
répondu Christian 2018-02-06 01:46:23

Oui. Vous aurez besoin de quelques choses tho:

Voir khtmld(aemon) *nx. Voir Url2Jpg Pour Windows mais comme il s'agit de l'application dotNet, vous devez également chek Url2Bmp

sont tous les deux des outils de console que vous pouvez utiliser à partir de votre application web pour obtenir la capture d'écran.

il y a aussi des services web qui l'offrent. Cochez ce par exemple.

Edit:

Ce lien est utile.

10
répondu majkinetor 2009-04-16 19:49:58

C'est en Python, mais en parcourant la documentation et le code, vous pouvez voir exactement comment cela se fait. Si vous pouvez exécuter python, alors c'est une solution toute faite pour vous:

http://browsershots.org /

notez que tout peut fonctionner sur une machine pour une plate-forme, ou sur une machine avec des machines virtuelles tournant sur les autres plates-formes.

gratuit, open source, faire défiler vers le bas de la page pour les liens vers documentation, code source et autres informations.

10
répondu Adam Davis 2009-04-28 20:51:54

Oui. Si vous n'avez besoin que d'une image D'URL, essayez

<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>

passez l'url comme argument et vous obtiendrez l'image pour plus de détails, consultez le lien http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html

5
répondu Mee 2012-04-12 15:59:04

cutycapt sauve des pages web à la plupart des formats d'image(jpg,png..) télécharger à partir de votre synaptique, il fonctionne beaucoup mieux que wkhtmltopdf

4
répondu wolfgang 2013-08-19 19:10:11

j'utilise toujours microweber screen pour capturer la capture d'écran de n'importe quelle page web. Ici, nous pouvons trouver un bien écrit tutoriel . C'est plus facile et ne devrait pas prendre plus de 3 minutes pour apprendre.

4
répondu Rinku 2015-11-03 15:22:10

Eh bien, PhantomJS est un navigateur qui peut être facilement mis sur un serveur et l'intégrer à php. Vous pouvez trouver le code dans WDudes. Ils ont inclus beaucoup plus de fonctionnalités comme spécifier la taille de l'image, cache, télécharger comme un fichier ou l'affichage dans img src, etc.

<img src=”screenshot.php?url=google.com” />

paramètres D'URL

  • largeur et hauteur: capture d'écran.php?url=google.com&w=1000&h = 800

  • avec culture: screenshot.php?url=google.com & w=1000&h=800&clipw=800&cliph=600

  • Désactiver le cache et la charge de nouveaux screesnhot:

    screenshot.php?url=google.com & cache=0

  • pour télécharger l'image: screenshot.php?url=google.com & download=true

vous pouvez voir le tutoriel ici: Capture D'écran d'une Site Web utilisant PHP sans API

4
répondu Gijo Varghese 2015-12-30 01:19:13

j'ai finalement mis en place l'utilisation microweber/screen comme proposé par @boksiora.

Initialement, lors de l'essai mentionné lien voici ce que j'ai obtenu:

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

je suis sous Linux. Donc si vous voulez vous lancer, vous pouvez ajuster mon étape à suivre pour votre environnement.

Voici l'étape que j'ai fait sur mon shell sur DOCUMENT_ROOT dossier:

$ 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

Pointez votre navigateur sur screen/demo/shot.php?url=google.com . Quand vous voyez le screenshot , vous êtes fait. Discussion pour plus d'avance paramètre est disponible ici et ici .

3
répondu Chetabahana 2017-05-23 11:47:36

il existe de nombreux projets open source qui peuvent générer des captures d'écran. Par exemple PhantomJS, webkit2png etc

le gros problème avec ces projets est qu'ils sont basés sur une technologie de navigateur plus ancienne et ont des problèmes de rendu de nombreux sites, en particulier les sites qui utilisent webfonts, flexbox, svg et divers autres ajouts à la HTML5 et CSS spec au cours des derniers mois/années.

j'ai essayé quelques-uns des services tiers, et la plupart sont basés sur PhantomJS, ce qui signifie qu'ils produisent également des captures d'écran de mauvaise qualité. Le meilleur service tiers pour générer des captures d'écran de site web est urlbox.io . C'est un service payant, bien qu'il y a un essai gratuit de 7 jours pour le tester sans commettre d'un plan.

voici un lien vers la documentation , et ci-dessous sont des étapes simples pour le faire fonctionner en PHP avec composer.

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

pour par exemple, voici une capture d'écran pleine hauteur de cette page:

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

full page screenshot of stackoverflow.com question powered by urlbox.io

3
répondu cjroebuck 2017-04-27 08:18:56

je suis sur Windows donc j'ai pu utiliser la fonction imagegrabwindow après avoir lu le Conseil ici de stephan. J'ai ajouté dans cropping (pour se débarrasser de L'en-tête du navigateur, barres de défilement, etc.) et redimensionnement pour obtenir une image finale. Voici mon code . Espérons que l'aide à quelqu'un.

2
répondu Robert James Reese 2011-05-13 15:58:55

webkit2html fonctionne sur Mac OS X et Linux, est assez simple à installer et à utiliser. Voir ce tutoriel .

Pour Windows , vous pouvez aller avec CutyCapt , qui a des fonctionnalités similaires.

1
répondu Piskvor 2010-07-30 10:58:06

j'ai utilisé bluga . L'api vous permet de prendre 100 snapshots par mois sans payer, mais il utilise parfois plus d'un crédit pour une seule page. Je viens de terminer la mise à niveau d'un module drupal, Bluga WebThumbs vers drupal 7 qui vous permet d'imprimer une vignette dans un modèle ou un filtre d'entrée.

le principal avantage d'utiliser cette api est qu'elle vous permet de spécifier les dimensions du navigateur dans le cas où vous utilisez CSS adaptatif, donc Je l'utilise pour obtenir des rendus pour la mise en page mobile et tablette ainsi que la normale.

il y a des clients api pour les langues suivantes:

PHP , Python , Ruby , Java , .Net C# , Perl et Bash (le script shell semble requérir perl)

1
répondu Arosboro 2012-03-18 10:45:03

tout dépend de la façon dont vous voulez prendre une capture d'écran.

vous pouvez le faire via PHP, en utilisant un service web pour obtenir l'image pour vous ""

grabz.il a un webservice pour faire cela, Voici un article montrant un exemple simple de l'utilisation du service.

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

1
répondu Andrew 2012-07-16 10:50:05

vous pouvez utiliser https://grabz.it solution.

il a une API PHP qui est très flexible et peut être appelé de différentes façons comme à partir d'une cronjob ou d'une page Web PHP.

pour la mettre en œuvre, vous devrez d'abord obtenir une clé app et secret et télécharger le SDK (gratuit).

et un exemple de mise en œuvre. Tout d'abord initialisation:

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

et exemple de capture d'écran:

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

ensuite, l'économie.Vous pouvez utiliser l'une des deux méthodes de sauvegarde, Save si la poignée de rappel accessible au public est disponible et SaveTo si non. Consultez la documentation pour détails .

1
répondu Stas 2018-02-07 07:44:18

j'ai utilisé page 2images . Il est développé sur la base du cutycapt qui est vraiment rapide et stable. Si vous ne voulez pas passer trop de temps sur les performances et la configuration, vous devez l'utiliser. Si vous allez sur leur site web, vous pouvez trouver plus de détails et un exemple de code PHP.

0
répondu Chen 2013-12-28 06:55:29

pas directement. Les logiciels comme Selenium ont des fonctionnalités comme celles-ci et peuvent être contrôlés par PHP mais ont d'autres dépendances (comme exécuter leur serveur basé sur java sur l'ordinateur avec le navigateur que vous voulez screenshot)

-1
répondu Macha 2009-04-16 19:31:22

vous pouvez utiliser cutycapt .

kwhtml est déprécié et afficher la page comme un vieux navigateur.

-1
répondu mohammad inanloo 2016-11-22 20:56:34

j'ai trouvé que c'était le meilleur et l'outil le plus facile autour: ScreenShotMachine . C'est un service payant, mais vous recevez 100 screenshots gratuits et vous pouvez acheter 2000 autres pour (environ) 20$, donc c'est une assez bonne affaire. Il a un usage très simple, vous utilisez juste une URL, donc j'ai écrit ce petit script pour sauver un fichier basé sur elle:

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

Ils ont une très bonne documentation ici , donc vous devriez certainement jeter un oeil.

-1
répondu Yaakov Ainspan 2018-01-25 20:40:19