Как сделать снимок раздела веб-страницы из оболочки? - PullRequest
5 голосов
/ 22 февраля 2012

У меня есть раздел веб-страницы, для которого мне нужно сделать снимок в формате GIF через заданный интервал времени. Снимок должен быть с полным разрешением по размеру страницы, однако, как я уже сказал, он идет только в определенное место на странице (в данном случае это после таблицы).

Каков наилучший способ получить изображение снимка страницы, как это? Я хотел бы просто бросить это в работу cron и забыть об этом, но я не с готовностью вижу инструмент, который бы быстро справился с этим.

РЕШЕНИЕ:

В соответствии с превосходным руководством @ Eduardo я реализовал чистое и быстрое решение, основанное на фантомах и имидж-мейкере (Mac: brew install phantomjs & brew install imagemagick):

* ПРИМЕЧАНИЕ. Если вы хотите полностью удалить imagemagick, просто добавьте в файл rasterize.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

А вот js, используемый фантомами в приведенном выше:

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

1 Ответ

4 голосов
/ 22 февраля 2012

На этот вопрос уже дан ответ здесь: Как сделать снимок экрана / изображение веб-сайта с использованием Python?

Ответ был получен в '09, но этот вариант все еще остается в силе. Я постараюсь расширить с помощью еще нескольких вариантов.

Эти инструменты позволят вам получить полные снимки страниц, которые впоследствии можно будет легко скопировать с помощью imagemagick.

Другой вариант, который у вас может быть в эти дни - Phantomjs . Phantom - это безголовый браузер, созданный для работы на узле, он позволяет вам делать снимки целой страницы или только области страницы.

Взгляните на этот пример :

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);
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...