2016-04-13 76 views
0

該javascript位於我打開的同一網站上。PhantomJS不從相同的URL加載.js

實施例:http://test.site.com

JS =>http://test.site.com/cache/6343019445fb7d95bd2bd09c5bbfb002.js

我還包括從jQuery的和googleapis出現加載!我嘗試從onResourceError等事件中獲取一些數據,但沒有顯示出來。

這是我的測試代碼:

var page = require('webpage').create(); 
page.viewportSize = { 
    width: 1366, 
    height: 720 
}; 

page.settings.loadImages = true; 
page.settings.localToRemoteUrlAccessEnabled = true; 
page.settings.javascriptEnabled = true; 
page.settings.webSecurityEnabled = false; 
page.settings.XSSAuditingEnabled = false; 

var uri = 'http://test.site.com'; 

page.onConsoleMessage = function(msg, lineNum, sourceId) { 
    console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")'); 
}; 
page.onResourceError = function(resourceError) { 
    console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')'); 
    console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString); 
}; 
page.onResourceTimeout = function(request) { 
    console.log('Response (#' + request.id + '): ' + JSON.stringify(request)); 
}; 
page.onError = function(msg, trace) { 
    var msgStack = ['ERROR: ' + msg]; 
    if (trace && trace.length) { 
    msgStack.push('TRACE:'); 
    trace.forEach(function(t) { 
     msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : '')); 
    }); 
    } 
    console.error(msgStack.join('\n')); 
}; 

page.onLoadFinished = function(){ 
    setTimeout(function(){ 
    console.log(page.content); // <script> is there 
    console.log('render');  
    page.render('test.png'); 
    phantom.exit(); 
    }, 4000); 

}; 

page.open(uri, function() { 
    console.log('loaded'); 
}); 

我看除了renderloaded和頁面內容沒有其他控制檯消息。 我在做什麼錯?

+0

爲什麼你認爲.js沒有加載?在代碼中沒有檢查。 – Vaviloff

+0

我在.js文件中添加了一些消息,它們不會通過'onConsoleMessage'顯示。此外,該js應該做文檔的可見的變化,他們應該反映在屏幕截圖中,但它們不是 –

+0

我看到'onResourceReceived'事件中的js文件,顯然它被下載,但由於某種原因它沒有執行? ! –

回答

-1

您必須評估頁面。我相信這是這樣的。

page.evaluate(function() { 
    // This is after page is evaluated and javascript is run 
}); 

請注意,評估不會讓您訪問JS函數或變量,它只會爲您運行它。如果您需要訪問Phantom的JS代碼,您需要自行將JavaScript代碼放入page.evaluate,以便您可以console.log或根據需要進行操作。

+0

這對於在頁面上下文中運行一個函數是有用的,但是我試着去測試console.log的工作,看看是否我看到'window.jQuery' ... –

+0

我在幻影JS上很生鏽,但我相信評估不會給你訪問JS函數或變量,它只是如果你需要這樣做,你只需要將javascript代碼放在'page.evaluate'裏面,這樣你就可以'console.log'或者根據需要操作。 – Goose