Question

J'ai une section d'une page Web dont j'ai besoin pour prendre un instantané GIF à un intervalle de temps donné. L'instantané doit être une résolution de taille pleine page, mais comme je l'ai dit, il ne va qu'à un certain endroit sur la page (dans ce cas, c'est après un tableau).

Quelle serait la meilleure façon de saisir une image d'instantané de page comme celle-ci? Je voudrais simplement le jeter dans un travail cron et l'oublier, mais je ne vois pas facilement un outil qui ferait un travail rapide de cela.

LA SOLUTION:

Selon l'excellente direction de @ eduardo, j'ai implémenté une solution propre et rapide basée sur Phantomjs et ImageMagick (Mac: brew install phantomjs & brew install imagemagick):

* Remarque: si vous souhaitez supprimer complètement ImageMagick, ajoutez simplement ce qui suit à rasteriserrise.js: page.clipRect = { top: 10, left: 10, width: 500, height: 500 }

#! /usr/bin/env bash
# Used with PhantomJS - rasterize.js source: http://j.mp/xC7u1Z

refresh_seconds=30

while true; do
    date_now=`date +"%Y-%m-%d %H%M"` 

    phantomjs rasterize.js $1 "${date_now}-original.png"  # just sucking in the first arg from shell for the URL
    convert "${date_now}-original.png" -crop 500x610+8+16 "${date_now}.png" # crop args: WIDTHxHEIGHT+LEFT_MARGIN+TOP_MARGIN
    rm "${date_now}-original.png"

    echo "Got image: ${date_now}.png - Now waiting ${refresh_seconds} seconds for next image..."
    sleep ${refresh_seconds}
done

Et voici le JS utilisé par Phantomjs dans ce qui précède:

// As explained here: http://code.google.com/p/phantomjs/wiki/QuickStart

var page = new WebPage(),
    address, output, size;

if (phantom.args.length < 2 || phantom.args.length > 3) {
    console.log('Usage: rasterize.js URL filename');
    phantom.exit();
} else {
    address = phantom.args[0];
    output = phantom.args[1];
    page.viewportSize = { width: 600, height: 600 };
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });
}
Était-ce utile?

La solution

Cette question a déjà été répondue ici:Comment puis-je prendre une capture d'écran / image d'un site Web à l'aide de Python?

Il a été répondu sur '09, mais cette option est toujours très valable. J'essaierai d'étendre avec quelques options supplémentaires.

Ces outils vous procureront des instantanés pleine page, que vous pourrez ensuite clipser en utilisant ImageMagick facilement.

Une autre option que vous pourriez avoir de nos jours est Fantômes. Phantom est un navigateur sans tête conçu pour être exécuté sur le nœud, il vous permettra de prendre une photo d'une page entière ou simplement d'une zone de la page.

Jeter un coup d'œil à cet exemple:

var page = new WebPage(),
    address, output, size;

if (phantom.args.length < 2 || phantom.args.length > 3) {
    console.log('Usage: rasterize.js URL filename');
    phantom.exit();
} else {
    address = phantom.args[0];
    output = phantom.args[1];
    page.viewportSize = { width: 600, height: 600 };
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top