我試圖在PhantomJS上構建一個非常簡單的解決方案,但在撥打phantom.exit()
時它崩潰了。例如,運行下面的代碼時:PhantomJS在Linux上的phantom.exit()後崩潰
var page = require('webpage').create();
page.onResourceRequested = function (request) {
console.log('Request ' + request.url);
phantom.exit();
};
page.open('http://www.google.com/');
崩潰,並在Ubuntu(12.04.3 LTS)和CentOS(6.4)段故障。如果我註釋掉phantom.exit()
它會列出請求的URL,因此它基本上按預期工作。但是phantom.exit()
是我真正需要的,因爲我想在某些情況下終止我的腳本(例如,嘗試訪問特定域)。 我有一種感覺,我的問題太明顯了,但並不知道發生了什麼。
謝謝@Elias,第二個解決方案崩潰,但setTimeout工作正常。當然,在我發佈信息之前,我已經搜索了Google,並且看到了類似的解決方案......但是這是2012年的討論,我絕對不會認爲這樣的關鍵問題在一年之後仍然沒有解決! – Eugene
現在是2015年,接近2016年,我有同樣的問題:( – siliconrockstar
@siliconrockstar:這實際上是一個非常棘手的問題,這是JS處理回調的方法固有的問題:有一個調用隊列,它會間歇性地檢查。如果直接調用'phantom.exit(0);',調用隊列可能不是空的。使用'setTimeout'將'phantom.exit(0)'調用推到該隊列的末尾,確保所有掛起的調用都是執行......這不是一個像語言設計那樣的錯誤 –