2011-10-31 54 views
5

我正在使用phantomjs從網站上刮取一些數據。爲了加快載入我做這個禁用JS的執行網頁上:Phantomjs上的javascriptEnabled問題

page.settings.javascriptEnabled = false; 

,但是這會導致問題 - 它使page.evaluate(somefunc.toString())回報null無論函數應該返回什麼。 如果我將js設置的默認值設置爲true,那麼page.evaluate()會再次工作。

我該如何解決這個問題? 謝謝

+2

這裏比「不這樣做」有更好的答案嗎?如果您沒有啓用JS,那麼該頁面無法評估JS功能。 (另外,你可以傳遞一個函數引用到'page.evaluate()' - '.toString()'是不必要的。) – nrabinowitz

+0

我必須同意narbinowitz這個。如果關閉頁面上的JS,它肯定無法在頁面上下文中評估JS。 –

+8

我不同意這種觀點,phantomJS應該像瀏覽器一樣工作。例如,在Chrome上禁用JavaScript時,您仍然可以訪問開發人員工具中的控制檯,從而訪問'window'對象。我相信它應該模仿相同的行爲,其中禁用JavaScript意味着phantomjs應該只禁用在頁面內運行的腳本,但不會阻止開發人員評估新腳本。通過控制檯,在phantomjs「評估」是唯一的途徑。 – zanona

回答

3

一般來說,不要這樣做。

但是,如果你真的需要,你可能會保持支持JavaScript,但塊加載外部的.js文件。例如:

page.onResourceRequested = function(requestData, request) { 
    if (requestData['Content-Type'] == 'application/javascript' || requestData['Content-Type'] == 'text/javascript') { 
    console.log('Disabling JavaScript files. Aborting: ' + requestData['url']); 
    request.abort(); 
    } 
};