Делаете надежные скриншоты сайтов? Phantomjs и Casperjs возвращают пустые снимки экрана на некоторых сайтах
Откройте веб-страницу и сделайте скриншот.
Использование ТОЛЬКО phantomjs: (это простой скрипт, на самом деле это пример скрипта, который используется в их документах.http://phantomjs.org/screen-capture.html
var page = require('webpage').create();
page.open('http://github.com/', function() {
page.render('github.png');
phantom.exit();
});
Проблема в том, что для некоторых веб-сайтов (таких как github) достаточно забавно обнаруживать и не показывать фантомы, и ничего не отображается. Результатgithub.png
пустой белый файл png
Замените github на «google.com», и вы получите хороший (правильный) скриншот, как задумано.
Сначала я подумал, что это проблема с Phantomjs, поэтому я попытался запустить ее через Casperjs с помощью:
casper.start('http://www.github.com/', function() {
this.captureSelector('github.png', 'body');
});
casper.run();
Но я получаю то же поведение, что и с Phantomjs.
Итак, я решил, что это скорее всего проблема с пользовательским агентом. Как в: Github вынюхивает Phantomjs и решает не показывать страницу. Поэтому я установил пользовательский агент, как показано нижено это все еще не сработало.
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();
});
Итак, я попытался проанализировать страницу, и, очевидно, некоторые сайты (опять же, например, github), похоже, не отправляют ничего по сети.
Используя casperjs, я попытался напечатать заголовок. И для google.com я вернулсяGoogle
но для github.com я вернул бупкис. Пример кода:
var casper = require('casper').create();
casper.start('http://github.com/', function() {
this.echo(this.getTitle());
});
casper.run();
То же, что и выше, также дает тот же результат в чисто фантомных сообщениях.
Обновить:Может ли это быть проблемой времени? Github просто супер медленный? Я сомневаюсь в этом, но давайте все равно проверить ...
var page = require('webpage').create();
page.open('http://github.com', function (status) {
/* irrelevant */
window.setTimeout(function () {
page.render('github.png');
phantom.exit();
}, 3000);
});
И результат по-прежнему bupkis. Так что нет, это не проблема времени.
Как некоторые сайты, такие как github, блокируют фантомы?Как мы можем надежно делать скриншоты ВСЕХ веб-страниц? Требуется быть быстрым и безголовым.