1

phantomjsを使ってたくさんのページのスクリーンショットを撮りたいです。

問題は、現在、次のコードがphantomjsをクラッシュさせるため、1000を超えるページがある場合の対処方法です。

これはaobjの例です:

var aobj = '[{"kb":21.047829999999976,"jb":52.174250000000015,"ff":110.16456426650427},{"kb":21.047997078651633,"jb":52.17421235955058,"ff":110.16456426650427},{"kb":21.048164157303404,"jb":52.17417471910114,"ff":110.16456426650427},{"kb":21.04833123595506,"jb":52.1741370786517,"ff":110.16456426650427},{"kb":21.048498314606718,"jb":52.174099438202255,"ff":110.16456426650427},{"kb":21.04866539325849,"jb":52.17406179775282,"ff":110.16456426650427},{"kb":21.048832471910146,"jb":52.17402415730338,"ff":110.16456426650427},{"kb":21.048999550561803,"jb":52.173986516853944,"ff":110.16456426650427}]'

... もっと

コードの残りの部分:

aobj = JSON.parse(aobj);

function tes_par(nrr,jbb,kkb,hhf)
{
var page = require('webpage').create();
page.viewportSize = { width: 600, height: 480 };
console.log(nrr);
page.open('http://maps.googleapis.com/maps/api/streetview?size=640x480&location='+jbb+','+kkb+'&pitch=-0.760&sensor=false&heading='+hhf, function () 
{
    page.render(nrr + '.png');      
});
}

for (var i=0;i<aobj.length;i++)
{
tes_par(i,aobj[i].jb,aobj[i].kb,aobj[i].ff);
}

これは、JS は一度に 1 つのコードを実行できるため、すべてのリソースを消費するためだと思いますが、page.openpage.renderを待機し、これらの関数の呼び出しが 1000 回を超える場合に待機する方法がわかりません。

私も setTimeout を使用しようとしましたが、再び成功しませんでした:

aobj = JSON.parse(aobj);

function tes_par(nrr,jbb,kkb,hhf)
{
var page = require('webpage').create();
page.viewportSize = { width: 600, height: 480 };
console.log(nrr);
page.open('http://maps.googleapis.com/maps/api/streetview?size=640x480&location='+jbb+','+kkb+'&pitch=-0.760&sensor=false&heading='+hhf, function () 
{
    page.render(nrr + '.png');      
});
}


function aa_bb(ii)
{
var jj=0;
(ii+500<aobj.length) ? jj=ii+500 : jj=aobj.length;
for (var i=ii;i<jj;i++)
{
tes_par(i,aobj[i].jb,aobj[i].kb,aobj[i].ff);
}
};

aa_bb(1);
setTimeout(function(){aa_bb(501)},120000);
4

2 に答える 2

2

page.close()各レンダリング後に呼び出してみてください。ドキュメントは、閉じずに同じオブジェクトを再利用するとガベージコレクションを防ぐことができると述べています。

于 2013-06-26T10:30:14.917 に答える