Делаете надежные скриншоты сайтов? 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, блокируют фантомы?Как мы можем надежно делать скриншоты ВСЕХ веб-страниц? Требуется быть быстрым и безголовым.

Ответы на вопрос(1)

Ваш ответ на вопрос