Tirando screenshots confiáveis de sites? Phantomjs e Casperjs retornam capturas de tela vazias em alguns sites
Abra uma página da web e faça uma captura de tela.
Usando ONLY phantomjs: (este é um script simples, na verdade, é o exemplo de script usado em seus documentos.http://phantomjs.org/screen-capture.html
var page = require('webpage').create();
page.open('http://github.com/', function() {
page.render('github.png');
phantom.exit();
});
O problema é que, para alguns sites (como o github), engraçado o suficiente detecta e não serve phantomjs e nada está sendo renderizado. O resultado égithub.png
é um arquivo png branco em branco.
Substitua o github por say: "google.com" e você obterá uma captura de tela (adequada) conforme pretendido.
No começo, pensei que era um problema do Phantomjs, então tentei executá-lo no Casperjs com:
casper.start('http://www.github.com/', function() {
this.captureSelector('github.png', 'body');
});
casper.run();
Mas eu tenho o mesmo comportamento dos Phantomjs.
Então achei que isso é provavelmente um problema do agente do usuário. Como em: Github fareja Phantomjs e decide não mostrar a página. Então eu configurei o user agent como abaixomas isso ainda não funcionou.
var page = require('webpage').create();
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36';
page.open('http://github.com/', function() {
page.render('github.png');
phantom.exit();
});
Então tentei analisar a página e, aparentemente, alguns sites (novamente como o github) não parecem estar enviando nada pelo ar.
Usando casperjs, tentei imprimir o título. E para google.com volteiGoogle
mas no github.com voltei bupkis. Código de exemplo:
var casper = require('casper').create();
casper.start('http://github.com/', function() {
this.echo(this.getTitle());
});
casper.run();
O mesmo que acima, também produz o mesmo resultado em puramente phantomjs.
Atualizar:Isso pode ser um problema de tempo? O github é super lento? Duvido, mas vamos testar mesmo assim ..
var page = require('webpage').create();
page.open('http://github.com', function (status) {
/* irrelevant */
window.setTimeout(function () {
page.render('github.png');
phantom.exit();
}, 3000);
});
E o resultado ainda é bupkis. Portanto, não, não é uma questão de tempo.
Como alguns sites como o github estão bloqueando os phantomjs?Como podemos tirar screenshots de TODAS as páginas da web de maneira confiável? Necessário para ser rápido e sem cabeça.