WWW :: Mechanize :: Firefoxを使用してFirefoxのインスタンスを制御し、レンダリングしたページを$ mech-> content_as_pngでダンプします。Perl :: Mechanizeを使用したWebページのサムネイルのスクリーンショット
新アップデート:最初の投稿の最後に参照してください。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サムネイルサイズに画像をトリミングするとどうなりますか?私はここでイメージャを使うべきですか?あなたはここに何か解決策を提案することができます...!?それは素晴らしいだろう。ここで
更新の
エンド引き続き問題-概要 - このQ &
問題の輪郭の非常に最初に書かれたとおり、私は2500のウェブサイトのリストを持っているそれらのサムネイルのスクリーンショットを取得する必要があります。それ、どうやったら出来るの?私はPerlでサイトを解析しようとする可能性があります.- Mechanizeは良いことです。注:私は、長い次元の最大240ピクセルのサムネイルとして結果を必要とします。現時点では、私は遅く、サムネイルを返さないソリューションを持っています:サムネイルを吹き飛ばして、スクリプトをより速く実行する方法 -
しかし、私はそれを設定することでかなりのしかし、挑戦。 もし期待どおりに動作していれば、このようなスクリプトを使って目的のWebサイトの画像をダンプすることができますが、Firefoxを起動して、希望の幅に手動でサイズ変更してください(高さは関係ありません)。常にページ全体をダンプします)。
私が持っているものこれまでに行われたはたくさんあります - 私はmozreplで作業しています。現時点ではタイムアウトに苦しんでいます:WWW :: Mechanize :: FirefoxでNet :: Telnetタイムアウトを指定する方法はありますか?現時点で 私のインターネット接続が非常に遅く、時々私はエラー
with $mech->get():
command timed-out at /usr/local/share/perl/5.12.3/MozRepl/Client.pm line 186
THIS ONEを参照して取得:
> $mech->repl->repl->timeout(100000);
残念ながら、それは動作しません。パッケージを経由してオブジェクトのメソッド「タイムアウト」を見つけることができませんが「MozRepl」 ドキュメントは言う。このすべき:
$mech->repl->repl->setup_client({ extra_client_args => { timeout => 1 +80 } });
私が出回っ試してみました何。ここにある:
#!/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 #
そしてここで - これが私のソースです:私が持っているサイトのスニペット-例を参照してくださいURLリストに
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
};
愛はあなたから聞いて! 挨拶ゼロ
を@listし、使用する
プット・リンクはちょうどFYI、PerlでのWebKitを制御する方法についてはこれらのスライドは、同様に参考になります。http://potyl.github.com/ Talk-WebKit-Perl /と彼のコード(screenshot.pl:https://github.com/potyl/Webkit/blob/master/screenshot.plなど)。それを試していないが、それは非常に興味深いように見えます。 –
人の偉大なヒントの多くのありがとう – zero