Phantomjs page.content não está recuperando o conteúdo da página
Eu uso o Phantomjs para criar sites que usam JavaScript e Ajax para carregar conteúdo dinâmico.
Eu tenho o seguinte código:
var page = require('webpage').create();
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.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};
page.open('http://www.betexplorer.com/soccer/germany/oberliga-bayern-sud/wolfratshausen-unterhaching-ii/x8rBMAB8/', function () {
console.log(page.content);
phantom.exit();
});
O problema é que esse código não recupera o código fonte que eu quero.
Se você inserir o URL por meio de um navegador da web (como o chrome) e ler o código-fonte (o código-fonte dinâmico, depois que as chamadas JavaScript e Ajax forem feitas) da página, verá que o código-fonte do navegador da Web e a fonte do Phantomjs código são completamente diferentes.
Mas, neste caso, eu preciso do código-fonte dos navegadores da web.
Normalmente, esse código Phantomjs recupera o código-fonte necessário, mas no caso desse URL (muitos outros), o Phantomjs não recupera o código-fonte correto.
Presumo que o Phantomjs não saiba como lidar com as chamadas JavaScript e Ajax que carregam conteúdo dinâmico nesta página.
Eu recebo esses erros quando executo o código:
ERROR: TypeError: 'undefined' is not a function (evaluating 'function(e){
this.pointer.x = e.pageX;
this.pointer.y = e.pageY;
}.bind(this)')
TRACE:
-> http://www.betexplorer.com/gres/tooltip.js?serial=1410131213: 207
-> http://www.betexplorer.com/gres/tooltip.js?serial=1410131213: 157
-> http://www.betexplorer.com/gres/tooltip.js?serial=1410131213: 310 (in function "tooltip")
-> http://www.betexplorer.com/soccer/germany/oberliga-bayern-sud/wolfratshausen-unterhaching-ii/x8rBMAB8/: 291
-> http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js: 2
-> http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js: 2
-> http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js: 2
-> http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js: 2
CONSOLE: Invalid App Id: Must be a number or numeric string representing the application id. (from line #undefined in "undefined")
CONSOLE: FB.getLoginStatus() called before calling FB.init(). (from line #undefined in "undefined")
Então, como obtenho o código-fonte dinâmico desta página (http://www.betexplorer.com/soccer/germany/oberliga-bayern-sud/wolfratshausen-unterhaching-ii/x8rBMAB8/) usando Phantomjs?