gpt4 book ai didi

javascript - CasperJS 内存不足

转载 作者:太空宇宙 更新时间:2023-11-04 15:36:00 25 4
gpt4 key购买 nike

我正在使用 CasperJS 运行以下脚本,在数组运行大约 1/3 后,它开始耗尽交换空间,并且机器变得非常慢。我在这里做错了什么?

searchPages 是一个由 54 个数字组成的数组,对应于搜索页面的 URL 值。

casper.each(searchPages,function(casper,index){
loadSearch(casper,index);
});


function loadSearch(casper,index){
var currentTime = new Date();
var month = currentTime.getMonth() + 2;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
var dateStart = month + "/" + day + "/" + year;
month = currentTime.getMonth() + 3;
var dateEnd = month + "/" + day + "/" + year;

casper.thenOpen(url,function(){
var myfile = "data-"+year + "-" + month + "-" + day+".html";
this.evaluate(function(j) {
document.querySelector('select[name="searchParameters.localeId"]').selectedIndex = j;
},index);
this.evaluate(function(start) {
$("#leaveDate").val(start);
},dateStart);
this.evaluate(function(end) {
$("#returnDate").val(end);
},dateEnd);
this.evaluate(function() {
$("#OSB_btn").click();
});

this.waitForSelector('#destinationForPackage', function() {
if (this.exists('#destinationForPackage')){
var name = casper.evaluate(function() {
return $("#destinationForPackage option[value='" + $("#destinationForPackage").val() + "']").text()
});
if (name != "Going To"){
if (name == null){
console.log("it's null");
}else{
name = name.replace("/","_");
casper.capture('Captures/Searches/search_' + name + '.jpg');
console.log("Capturing search_" + name);
}
}
}else{
console.log("Still doesn't exist...retry");
loadSearch(casper,index);
}

},function(){
console.log("Search page timed-out.");
},20000);
});
}

每个循环增加了大约 3GB。

enter image description here

最佳答案

事实证明,这是 PhantomJS 的一个众所周知的问题。作为一个 Unresolved 错误已有 3 年多了,显然它与 QT Webkit 有关。尽管如此,我还是能够通过在循环期间关闭每个页面并重新打开一个新的 Phantom 页面来解决这个问题。这是一个有点棘手的解决方法,但内存消耗要少得多。然而,在大约 200 个页面之后,它仍然具有相当高的内存使用量(1GB+)。因此,我将脚本分成 200 个 block ,完成后才开始下一个脚本。这是在没有使用太多内存的情况下成功完成的成品。由于某种原因,它在 MacOS 上的使用量少于 Windows。

casper.start(url,function(){
this.echo('continuing captures...');
}).each(searchPages,function(casper,index){
loadSearch(this,index);
});

function loadSearch(casper,index){
var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate() + 1;
var year = currentTime.getFullYear();
var dateStart = month + "/" + day + "/" + year;
var fortnightAway = new Date(+new Date + 12096e5);
var dateEnd = fortnightAway.getMonth() + 1 + "/" + fortnightAway.getDate() + "/" + fortnightAway.getFullYear();

casper.page.close();
casper.page = require('webpage').create();

casper.thenOpen(url,function(){
var myfile = "data-"+year + "-" + month + "-" + day+".html";
this.evaluate(function(j) {
document.querySelector('select[name="searchParameters.localeId"]').selectedIndex = j;
},index);
this.evaluate(function(start) {
$("#leaveDate").val(start);
},dateStart);
this.evaluate(function(end) {
$("#returnDate").val(end);
},dateEnd);
this.evaluate(function() {
$("#OSB_btn").click();
});
this.waitForSelector('#destinationForPackage', function() {
if (this.exists('#destinationForPackage')){
var name = casper.evaluate(function() {
return $("#destinationForPackage option[value='" + $("#destinationForPackage").val() + "']").text()
});
if (name != "Going To"){
if (name == null){
console.log("it's null");
}else{
name = name.replace("/","_");
name = name.replace("/","_");
casper.capture('Captures/Searches/search_' + name + '.jpg');
console.log("Capturing search_" + name);
}
}
}else{
console.log("Search failed to load. Retrying");
loadSearch(casper,index);
}

},function(){
console.log("Search page timed-out. Retrying");
loadSearch(casper,index);
},20000);
});
}

关于javascript - CasperJS 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44348193/

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