418 votes

Captures d'écran de sites web en PHP

Existe-t-il un moyen de faire une capture d'écran d'un site Web en PHP, puis de l'enregistrer dans un fichier ?

3 votes

Si vous préférez une solution de dépôt, jetez un coup d'œil à Usersnap - c'est un service sympa qui propose des captures d'écran précises de sites web. Il suffit d'ajouter un petit extrait Javascript à votre page pour que cela fonctionne.

1 votes

Usersnap ne peut pas faire face aux pages web qui utilisent Ajax pour générer le contenu comme sur cette page . Comment faire ? Disons que la capture d'écran doit être faite 10 secondes après la fin du chargement initial de la page.

1 votes

@rubo77 : Usersnap supporte de tels DOMs dynamiques, je l'ai essayé avec votre page - la capture d'écran reproduit la situation exacte y compris toutes les positions.

288voto

Strae Points 6032

Bien sûr que vous pouvez, mais vous devrez rendre la page avec quelque chose. Si vous voulez vraiment n'utiliser que du php, je vous suggère de HTMLTOPS qui rend la page et l'affiche dans un fichier ps (ghostscript), puis la convertit en .jpg, .png, .pdf. peut être un peu plus lent avec des pages complexes (et ne supporte pas toutes les CSS).

Sinon, vous pouvez utiliser wkhtmltopdf pour sortir une page html en pdf, jpg, etc Accepter CSS2.0, utiliser le webkit (wrapper de safari) pour rendre la page donc ça devrait aller. Vous devez l'installer sur votre serveur, aussi

UPDATE Désormais, avec la nouvelle fonctionnalité HTML5 et JS, il est également possible de rendre la page dans un objet canevas en utilisant Javascript. Voici une belle bibliothèque pour le faire : Html2Canvas et voici une mise en œuvre du même auteur pour obtenir un retour d'information comme G+. Une fois que vous avez rendu le dom dans le canevas, vous pouvez ensuite l'envoyer au serveur via ajax et l'enregistrer en tant que jpg.

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

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

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

12 votes

+1 pour wkhtmltopdf. J'ai joué avec d'autres bibliothèques mais aucune d'entre elles n'a réussi à supporter autre chose que le HTML et le CSS les plus basiques. wkhtmltopdf peut faire tout ce que Safari fait, donc vous êtes en sécurité.

8 votes

Wkhtmltoimage fonctionne très bien ! Merci pour l'astuce. Le résultat est également en png.

2 votes

Maintenant que vous mentionnez wkhtmltopdf, KnpLabs a un wrapper pour cela. github.com/KnpLabs/snappy

89voto

stephan Points 745

Depuis PHP 5.2.2 il est possible, de capturer un site web avec PHP uniquement !

écran imagegrabs - Capture l'ensemble de l'écran

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

fenêtre de capture d'image - Saisit une fenêtre ou sa zone client à l'aide d'un handle Windows (propriété HWND dans l'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 : Remarque : ces fonctions ne sont disponibles que sur les systèmes Windows !

28 votes

Ce n'est pas vraiment uniquement du PHP, n'est-ce pas ?

0 votes

Il s'agit d'utiliser le navigateur Internet Explorer pour rendre les choses.

0 votes

Quel serait donc l'équivalent d'Ubuntu ?

58voto

Rikesh Points 15608

Si vous ne voulez pas utiliser d'outils tiers, j'ai trouvé une solution simple qui consiste à utiliser les outils suivants Aperçu de la page Google api.

Il suffit d'appeler son API avec des paramètres. screenshot=true .

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

Pour l'affichage du site mobile, passez &strategy=mobile dans les paramètres,

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

DEMO .

3 votes

C'est plutôt cool et semble aussi fonctionner sans fournir de clé d'api. L'image renvoyée est cependant cassée, vous devez remplacer tous les '_' par '/' et tous les '-' par '+' et ensuite vous pouvez simplement l'ajouter comme uri de données.

9 votes

C'est génial. J'ai codé ça à gist.github.com/jaseclamp/d4ac6205db352e822ff6

25 votes

Ainsi, pour référence, l'API Page Insight de Google est un outil tiers.

19voto

boksiora Points 433

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

Vous pouvez également utiliser PhantomJS avec PHP.

Regardez ce petit script php qui fait ça. Jetez un coup d'oeil ici https://github.com/microweber/screen

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

0 votes

PhantomJS est généralement une excellente solution pour cela, bien que lorsque je l'ai utilisé exactement dans ce but, tous les éléments de l'interface HTML ne s'affichaient pas correctement.

2 votes

screen.microweber.com/shot.php?url=https://stackoverflow.com/ est maintenant un 404 et je me demande si la réponse ici doit être supprimée. Dans tous les cas, elle devrait être mise à jour.

18voto

Christian Points 12142

Cela devrait être bon pour vous :

http://code.google.com/p/wkhtmltopdf/

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

1 votes

BTW, je l'ai installé sur Ubuntu 10.04 en utilisant simplement apt-get. Cependant, lorsque je l'ai lancé, il était très, très lent et la mise en page du PDF était de travers et n'était pas vraiment une option viable. Cependant, il est prometteur d'utiliser KHTML de cette manière -- éventuellement -- pour la génération d'images.

0 votes

@Volomike - Vous ne pouvez pas obtenir de meilleurs résultats que cela puisque, comme vous le savez, un navigateur conforme aux normes est utilisé. Pour ce qui est de la vitesse, la société avec laquelle je travaille l'a utilisé à plusieurs reprises dans le cadre de divers projets nécessitant des CSS fins (mais de petite taille).

0 votes

Je peux témoigner de l'efficacité de ce produit. Je développe des applications graphiques pour des clients gouvernementaux qui sont livrées via html/css mais doivent être archivées en pdf. AUCUN AUTRE produit web-to-pdf ne s'est approché de la reproduction parfaite de nos graphiques comme wkhtmltopdf.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X