当我在一个数组中打开许多页面(数千个)时,似乎存在内存泄漏,因为我在Windows中监视进程内存。
我读了这篇文章并决定使用http://phantomjs.org/api/webpage/method/close.html
以下是代码
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
那么如何在打开另一个页面之前每次关闭page
对象?或者更大的问题是如何防止Phantom.js中的内存泄漏?
答案 0 :(得分:0)
我不确定我是否完全了解此方案中发生的情况,但这是解决您问题的方法:
...
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() - “关闭页面并释放与之关联的内存堆。调用后不要使用页面实例。” < - 这是来自phantomjs文档。如果要继续打开网站,则需要创建新的页面实例。希望这有帮助!