我想用Wappalyzer分析大约1000个网站,看看他们是否在使用Magento。分析的结果是好的,但在10-11测试后出现“堆内存不足”的错误。我怎么才能避免呢?
function analyseUrl(url) {
const options = {
debug: false,
delay: 500,
maxDepth: 5,
maxUrls: 20,
maxWait: 15000,
recursive: true,
htmlMaxCols: 2000,
htmlMaxRows: 2000,
};
return new Promise((resolve, reject) => {
new Wappalyzer(url, options).analyze()
.then( json => {
for (let i = 0; i < json.applications.length; i++) {
if (json.applications[i].name === "Magento") {
console.log('Magento URL: ' + url);
resolve(true);
}
}
resolve(false);
})
.catch(error => {
reject(error);
});
});
}
async function wappalyze() {
urls = getUrls();
let magentoUrls = [];
for (let i = 0; i < urls.length; i++) {
console.log('Testing URL: ' + urls[i]);
let isMagento = await analyseUrl(urls[i]);
if (isMagento) {
magentoUrls.push(urls[i]);
}
}
console.log(magentoUrls);
process.exit(0);
}我的脚本给出了预期的结果,但在第十次测试后,我得到了MaxListenersExceededWarning,在那之后:“致命错误:无效的标记-堆限制附近的压缩分配失败- JavaScript堆内存不足”。
发布于 2020-02-06 18:18:28
每个wappalyzer实例实际上都在后台创建了一个无头浏览器,所以您运行了10个Chromium实例并运行了oom。解决方案就在源代码内部
analyze() {
this.time = {
start: new Date().getTime(),
last: new Date().getTime(),
};
return this.crawl(this.origPageUrl);}
你只需要初始化一个wappalyzer实例,然后调用url.parse来解析url字符串,然后将这个对象传递给你的wappalyzer对象爬行方法(1个实例)。不过,我还没有尝试多个实例。
https://stackoverflow.com/questions/56074866
复制相似问题