Я использую WWW :: Mechanize :: Firefox для управления экземпляром firefox и дампом отображаемой страницы с помощью $ mech-> content_as_png.thumbnail скриншот веб-страниц с Perl :: Механизировать
Новое обновление: см в конце первоначального размещения: благодаря user1126070 у нас есть новое решение - что я хочу попробовать позже на следующий день [сейчас я нахожусь в офисе, а не дома - в передняя часть машины с программой]
$mech->repl->repl->setup_client({ extra_client_args => { timeout => 5*60 } });
я попробовать версию, что put links to @list and use eval
и сделайте следующее:
while (scalar(@list)) {
my $link = pop(@list);
print "trying $link\n";
eval{
$mech->get($link);
sleep (5);
my $png = $mech->content_as_png();
my $name = "$_";
$name =~s/^www\.//;
$name .= ".png";
open(OUTPUT, ">$name");
print OUTPUT $png;
close(OUTPUT);
}
if ([email protected]){
print "link: $link failed\n";
push(@list,$link);#put the end of the list
next;
}
print "$link is done!\n";
}
КСТАТИ: user1126070 что с обрезкой вниз изображения до миниатюры. Должен ли я использовать тепловизор здесь. Можете ли вы предложить некоторые решения здесь ...!? Это было бы прекрасно.
конец Update
Здесь проблема контурный продолжается - как написано в самом начале этого Q &
проблема контурного: У меня есть список 2500 сайтов и вам нужно взять снимок экрана из миниатюры. Как мне это сделать? Я мог бы попытаться разобрать сайты либо с Perl.- Mechanize было бы хорошо. Примечание. Мне нужны только результаты в виде миниатюр, максимальных 240 пикселей в длинном размере. На данный момент у меня есть решение, которое медленное и не возвращает эскизы: как заставить скрипт работать быстрее с меньшими накладными расходами - выкручивание эскизов
Но я должен знать, что его настройка может представлять собой довольно вызов. Если все работает так, как ожидалось, вы можете просто использовать сценарий, подобный этому, чтобы сбрасывать изображения с нужных веб-сайтов, но вы должны запустить Firefox и изменить его размер до нужной ширины вручную (высота не имеет значения, WWW :: Mechanize :: Firefox всегда выгружает всю страницу).
Что у меня есть сделано до сих пор is alot - я работаю с mozrepl. На данный момент я борюсь с таймаутами: есть ли способ указать Net :: Telnet таймаут с WWW :: Mechanize :: Firefox? На данный момент мое подключение к интернету очень медленно, и иногда я получаю ошибку
with $mech->get():
command timed-out at /usr/local/share/perl/5.12.3/MozRepl/Client.pm line 186
СМОТРИТЕ ЭТОТ:
> $mech->repl->repl->timeout(100000);
Unfortunatly он не работает: не удается найти метод объекта «тайм-аут» с помощью пакета "MozRepl" Документация говорит, что это необходимо:
$mech->repl->repl->setup_client({ extra_client_args => { timeout => 1 +80 } });
Что я попробовал Allready; здесь:
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize::Firefox;
my $mech = new WWW::Mechanize::Firefox();
open(INPUT, "<urls.txt") or die $!;
while (<INPUT>) {
chomp;
print "$_\n";
$mech->get($_);
my $png = $mech->content_as_png();
my $name = "$_";
$name =~s/^www\.//;
$name .= ".png";
open(OUTPUT, ">$name");
print OUTPUT $png;
sleep (5);
}
Ну это не волнует размер: Смотрите выходной командную строку:
linux-vi17:/home/martin/perl # perl mecha_test_1.pl
www.google.com
www.cnn.com
www.msnbc.com
command timed-out at /usr/lib/perl5/site_perl/5.12.3/MozRepl/Client.pm line 186
linux-vi17:/home/martin/perl #
И здесь - это мой источник: см сниппета-пример сайтов, которые я в списке адресов.
urls.txt - список источников
www.google.com
www.cnn.com
www.msnbc.com
news.bbc.co.uk
www.bing.com
www.yahoo.com and so on...
КСТАТИ: При том, что многие URL, мы должны ожидать, что некоторые из них будут терпеть неудачу, и справиться с этим. Например, мы помещаем несостоявшиеся в массив или хеш и повторяем их X раз.
UTSL
ну как это один здесь ...
sub content_as_png {
my ($self, $tab, $rect) = @_;
$tab ||= $self->tab;
$rect ||= {};
# Mostly taken from
# http://wiki.github.com/bard/mozrepl/interactor-screenshot-server
my $screenshot = $self->repl->declare(<<'JS');
function (tab,rect) {
var browser = tab.linkedBrowser;
var browserWindow = Components.classes['@mozilla.org/appshell/window-mediator;1']
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow('navigator:browser');
var win = browser.contentWindow;
var body = win.document.body;
if(!body) {
return;
};
var canvas = browserWindow
.document
.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');
var left = rect.left || 0;
var top = rect.top || 0;
var width = rect.width || body.clientWidth;
var height = rect.height || body.clientHeight;
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, width, height);
ctx.save();
ctx.scale(1.0, 1.0);
ctx.drawWindow(win, left, top, width, height, 'rgb(255,255,255)');
ctx.restore();
//return atob(
return canvas
.toDataURL('image/png', '')
.split(',')[1]
//);
}
JS
my $scr = $screenshot->($tab, $rect);
return $scr ? decode_base64($scr) : undef
};
Любовь услышать от вас! приветствия
Просто FYI, эти слайды о том, как управлять WebKit с Perl, может представлять интерес, а также: http://potyl.github.com/ Talk-WebKit-Perl/и его код, например screenshot.pl: https://github.com/potyl/Webkit/blob/master/screenshot.pl. Не пробовал, но выглядит очень интересно. –
мужчина огромное спасибо за отличные подсказки – zero