8
votes

Prenez une capture d'écran d'un site Web de Commandline ou avec Python

Je vais prendre une capture d'écran à partir de cette page: http://books.google.de/ livres? id = gikdaaaambaj & pg = PA1 & img = 1 & W = 2500 ou enregistrer l'image qu'elle produise.

Mais je ne peux pas trouver un moyen. Avec wget / Curl, je reçois une "erreur indisponible" et aussi avec d'autres outils tels que webkit2png / wkhtmltoimage / wkhtmltopng.

Y a-t-il un moyen propre de le faire avec Python ou de Commandline?

meilleures salutations!


2 commentaires

Je crois que cela a été répondu dans un fil différent?


Autant que je comprends bien cela, ils ne prennent aucune capture d'écran à partir d'une page Web, uniquement à partir d'une fenêtre ouverte. Mais mon plan est de le faire sans ouvrir l'URL par moi-même. Il y a ~ 1000 images à sauver. Couvre seulement de certains livres.


3 Réponses :


6
votes

Parfois, vous avez besoin d'en-têtes HTTP supplémentaires tels que l'agent utilisateur pour obtenir des téléchargements pour fonctionner. Dans Python 2.7, vous pouvez:

import urllib2
request = urllib2.Request(
    r'http://books.google.de/books?id=gikDAAAAMBAJ&pg=PA1&img=1&w=2500',
    headers={'User-Agent':'Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 firefox/2.0.0.11'})
page = urllib2.urlopen(request)

with open('somefile.png','wb') as f:
    f.write(page.read())


4 commentaires

Pourtant, cela ne produira pas une image du site Web capturé. L'image sera cassée.


@Sarvagyapant J'ai rencontré ce script et a vérifié qu'une image non cassée est téléchargée. Cela m'a pris moins d'une minute. Pouvez-vous s'il vous plaît mettre un minimum de travail avant de faire des revendications non fondées.


Il ne fera que l'image correcte uniquement lorsque le URL est lien direct vers image . Pour une autre page Web basée sur HTML, cela ne fonctionnera pas. De plus, on peut utiliser directement urllib.urlretrieve si l'URL est garantie d'être une image.


Cela fonctionne pour toute ressource unique telle qu'une image, une page Web, un MP3, un PDF et etc ... il ne suit pas les liens ni la construction d'une page Web composite, mais ce n'est pas ce que l'utilisateur était après. Il nous a montré une URL à une image et a déclaré qu'il voulait une "capture d'écran" de l'image. Mais la "capture d'écran" n'est que le fichier image lui-même. Il existe plusieurs façons de télécharger un contenu Web - mon exemple est une manière acceptée parfaitement normale.



15
votes

Vous pouvez utiliser ghost.py si vous le souhaitez. https://github.com/jeanphix/ghost.py

Voici un exemple Comment l'utiliser. xxx

La dernière ligne enregistre l'image dans votre répertoire actuel.

espère que cela aide


1 commentaires

Joli. On dirait vraiment bien, mais je ne veux pas installer qt. : /



7
votes

J'ai eu du mal à obtenir un fantôme de prendre une capture d'écran de manière systématique sur un VM Centos sans tête. selenium et Phantomjs a travaillé pour moi: xxx


2 commentaires

Je reçois cette erreur lors de l'exécution de cette erreur: Traceback (appel le plus récent): Fichier "C: \ Bunker \ Lib \ Site-Sites-Packages \ Custom_selenium.py", Ligne 2, dans BR = WebDriver.Phantomjs () Fichier "C: \ Bunker \ Lib \ Site-Sites-Site-Packages \ selenium \ webdiver \ fantomjs \ we bdriver.py", ligne 49, in __init__ service_args = service_args, log_path = service_log_path) typeError: __init __ () a eu un mot clé inattendu argument 'log_path'


hmm, pas sûr mais je me demande ce qui se passe si vous éditez webdiver.py init et supprimer l'argument log_path