Javascript 如何使用casper.page.close()避免多页打开时的内存泄漏
当我在一个数组中打开多个页面(以千为单位)时,似乎存在内存泄漏,因为我在Windows中监视进程内存 我读了这篇文章,决定使用 下面是代码Javascript 如何使用casper.page.close()避免多页打开时的内存泄漏,javascript,node.js,web-scraping,phantomjs,casperjs,Javascript,Node.js,Web Scraping,Phantomjs,Casperjs,当我在一个数组中打开多个页面(以千为单位)时,似乎存在内存泄漏,因为我在Windows中监视进程内存 我读了这篇文章,决定使用 下面是代码 var casper = require("casper").create({ verbose: true, logLevel: 'debug', pageSettings: { userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/2
var casper = require("casper").create({
verbose: true,
logLevel: 'debug',
pageSettings: {
userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0'
}
}),
utils = require('utils');
casper.start();
casper.thenOpen('http://www.google.com/', function(response) {
this.echo(this.getTitle());
});
casper.then(function() {
casper.page.close();
});
casper.thenOpen('http://www.yahoo.com/', function(response) {
this.echo(this.getTitle());
});
casper.run(function() {
console.log('End');
casper.exit();
});
但是它给了我一个错误:
Error: cannot access member `customHeaders' of deleted QObject
test:1182 in open
test:1555 in _step
test:1335 in runStep
test:332 in checkStep
那么,每次打开另一个页面之前,如何关闭
页面
对象?或者更大的问题是如何防止Phantom.js中的内存泄漏?我不确定我是否完全理解此场景中发生的情况,但这里有一个解决问题的方法:
...
casper.then(function() {
casper.page.close();
casper.page = require('webpage').create();
});
casper.thenOpen('http://www.yahoo.com/', function(response) {
this.wait(1000, function() {
this.echo(this.getTitle());
});
});
...
close()-“关闭页面并释放与其关联的内存堆。调用此函数后不要使用页面实例。”它不起作用,因为在执行capture()时,yahoo页面为空。谷歌页面还不错,也许你等的时间不够长。我的是空白的,如果我不等待一秒钟,但它可能需要更长的时间。[debug][phantom]打开url:,HTTP获取[debug][phantom]成功注入Casper客户端实用程序[info][phantom]步骤5/5:在726ms内完成。[信息][幻影]步骤6/6:在822毫秒内完成。[info][phantom]等待()已完成1000毫秒的等待。[debug][phantom]已成功注入Casper客户端实用程序Yahoo!加拿大[info][phantom]在1870年完成了6个步骤这可能是事实,但是否有办法避免猜测等待号码?@HP。您可以使用任何
waitFor…()
方法、等待资源、选择器。。。或者使用waitFor()
创建您自己的等待逻辑是否有更新?你是如何解决问题的?