gpt4 book ai didi

javascript - 截取许多网页

转载 作者:行者123 更新时间:2023-11-30 10:30:06 25 4
gpt4 key购买 nike

我想使用 phantomjs 截取许多页面。

问题是如果我的页面超过 1000 时如何处理,因为目前以下代码使 phantomjs 崩溃:

这是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一次只能运行一个代码,所以它会消耗所有资源,但我不知道如何等待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);

最佳答案

参见 Using Multiple page.open in Single Script .基本思想是在传递给上一页打开的函数结束时打开下一页。否则,您将同时打开一堆页面,然后就会出现困惑。

aobj = JSON.parse(aobj);
var page = require('webpage').create();
page.viewportSize = { width: 600, height: 480 };

function tes_par(nrr,jbb,kkb,hhf)
{
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');
setTimeout(function(){next_thingie(nrr+1);},100);
}
);
}

function next_thingie(i)
{
if(i>=aobj.length){return;}
tes_par(i,aobj[i].jb,aobj[i].kb,aobj[i].ff);
}

next_thingie(0);

更新

上面的代码已经从早期版本更改,在我检查了我自己的代码(有效)后发现我没有正确应用它来解决这个问题。变化包括:

  1. 只创建一次页面。

  2. page.open 函数中对下一页进行递归调用。

  3. 应用一点超时来帮助 PhantomJS 喘口气。

这种方法适用于我从大约 80 个文件中捕获大约 300 个屏幕截图。

关于javascript - 截取许多网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17317501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com