我的劇本後,工作細到目前爲止,sequentiell爲了通過線加載文本文件的行每一頁(page.open是asynchron和頁面對象是全球覆蓋=新的要求,這是一個大clusterfuck運行多個page.open()一次),匹配用於從它的特定域和印刷JSON值的每個請求。PhantomJS崩潰150-180網址
但是,如果我用一個.txt文件超過150〜鏈接,它只是崩潰每一次,大多是沒有錯誤消息,並沒有崩潰轉儲這樣的:
PhantomJS已崩潰。請務必閱讀正文 http://phantomjs.org/crash-reporting.html崩潰報告指南,並在 https://github.com/ariya/phantomjs/issues/new發送錯誤報告。 不幸的是,沒有崩潰轉儲可用。 (爲%TEMP%(C:\用戶\ XXX \應用程序數據\本地的\ Temp),你可以不寫的目錄)
我可以重現,很容易,如果我多次運行它,不要緊,如果我一次或一次完成。 如何防止崩潰?如果Phantom無法處理,我的腳本就沒用了。
但有時我得到一個崩潰轉儲:
PhantomJS已崩潰。請務必閱讀正文 http://phantomjs.org/crash-reporting.html崩潰報告指南,並在 https://github.com/ariya/phantomjs/issues/new發送錯誤報告。 請附上崩潰轉儲文件: C:\用戶\ XXX \應用程序數據\本地的\ Temp \ a4fd6af6-1244-44d3-8938-3aabe298c2fa.dmp
並且在極少數情況下我甚至會收到一條錯誤消息,Process Explorer說該進程一次最多有21個線程
的QThread ::開始:無法創建線程()
console.log('Hello, world!');
var fs = require('fs');
var stream = fs.open('500sitemap.txt', 'r');
var webPage = require('webpage');
var i = 1;
var hasFound = Array();
var hasonLoadFinished = Array();
function handle_page(line) {
var page = webPage.create();
page.settings.loadImages = false;
page.open(line, function() {});
page.onResourceRequested = function(requestData, request) {
var match = requestData.url.match(/example.de\/ac/g)
if (match != null) {
hasFound[line] = true;
var targetString = decodeURI(JSON.stringify(requestData.url));
var klammerauf = targetString.indexOf("{");
var jsonobjekt = targetString.substr(klammerauf, (targetString.indexOf("}") - klammerauf) + 1);
targetJSON = (decodeURIComponent(jsonobjekt));
var t = JSON.parse(targetJSON);
console.log(i + " " + t + " " + t['id']);
request.abort;
} else {
//hasFound = false;
return;
}
};
page.onLoadFinished = function(status) {
if (!hasonLoadFinished[line]) {
hasonLoadFinished[line] = true;
if (!hasFound[line]) {
console.log(i + " :NOT FOUND: " + line);
console.log("");
}
i++;
setTimeout(page.close, 200);
nextPage();
}
}
};
function nextPage() {
var line = stream.readLine();
if (!line) {
end = Date.now();
console.log("");
console.log(((end - start)/1000) + " Sekunden");
phantom.exit(0);
}
hasFound[line] = false;
hasonLoadFinished[line] = false;
handle_page(line);
}
start = Date.now();
nextPage();