我的html网页上有动态加载和应用样式表的javascript。所有内容和渲染都发生在div标签内。这不是加载div标签的内容,它具有id ='tagid'。你知道这里有什么问题吗?我正在使用jquery函数来确保页面已加载。但似乎page.evaluate甚至没有被调用。
我正在使用phantomjs编写单元测试。幻影的新手。请参阅下面的代码段。
page.open(address, function(status){
console.log('status '+status)
if(status=='success'){
console.log('inside status if ')
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", function() {
console.log('after include js ')
page.evaluate(function(){
console.log('inside evlaute ')
$(window).load(function(){
console.log(document.getElementById("tagid").innerHTML)
});
});
setTimeout(function(){phantom.exit()},18000)
})
}
})
答案 0 :(得分:1)
您的代码是正确的,但默认情况下console.log
调用没有任何效果,因为它发生在PhantomJS页面的上下文中。
您可以使用evaluate
调用的返回值,如下所示:
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", function() {
console.log('after include js ')
var tagid = page.evaluate(function(){
console.log('inside evlaute ')
return document.getElementById("tagid").innerHTML;
});
console.log('Got tag ID: ' + tagId)
setTimeout(function(){phantom.exit()},18000)
})
或者您可以选择使用onConsoleMessage
显示在页面中记录的消息(更复杂的设置):
page.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log('PAGE CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};
重要提示是PhantomJS和网页的上下文是分开的:在evaluate
次调用中,您无法从外部访问变量。实际上,在引用evaluate
之前,给予page
的回调被转换为字符串。这是PhantomJS中一个非常令人困惑的部分,必须加以考虑。
答案 1 :(得分:0)
您可以尝试在调用evaluate之前给出一些超时。
window.setTimeout(function () {
page.evaluate(function() {
console.log(document.getElementById("tagid").innerHTML)
});
}, 1000 // adjust the time here
要检查phantomjs中正在呈现的内容,您可以使用page.content
并检查您的“tagid”元素是否确实存在。