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