Как стать автором
Обновить
0
0
Anner Manner @Zayaz

Пользователь

Отправить сообщение
Можно их вырезать.
Вряд ли. Все дело в том, что PhantomJS работает по следующему принципу:
1. Выполняется (в контексте пустого окна «браузера» ваш скрипт).
2. Если вы изменяете свойство content, либо используете метод open(), страница (пере)загружается, управление полностью передается загружаемой странице (скрипты, загрузка изображений, составление DOM-дерева, etc).
3. По событию load страницы управление опять передается вашему скрипту, точнее он снова выполняется с самого начала (однако область видимости сохраняется).

Поэтому вашу задачу выполнить средствами PhantomJS невозможно, точнее можно, но только сам профайлер и чекер ошибок вам придется сделать самостоятельно, т.е. как в моем примере выше, только переделывая всю страницу, вешая try-catch на скрипты, или свои обработчики onerror, подмиксовывать таймеры перед вызовами и так далее, в общем писать свой полноценный дебагер, который работал бы на подобии встраиваемой части Firebug, например. В общем, задача если и выполнима, но все же трудна.

Другой вопрос, что этот функционал, а так же расширить методы работы со страницей в PhantomJS, вы можете, редактируя его исходники, ведь они открыты. На данный момент нужно либо самому писать недостающий функционал, либо ждать обновлений.
Можно, конечно, выкрутиться, использовав доступный в фантоме XHR объект, синхронным запросом взять данные, обработать его и только потом загрузить для обработки в браузере, после чего отобразить.

var address = phantom.args[0];
var output = phantom.args[1];

if (phantom.state.length === 0) {
  var xmlhttp = new XMLHttpRequest();
  phantom.viewportSize = { width: 800, height: 600 };

  xmlhttp.open('GET', address, false);
  xmlhttp.send(null);

  if(xmlhttp.status == 200) {
    var response  = xmlhttp.responseText;

    /**
     * Тут мы выполняем операции по очистке response от скриптов и, например
     * внешних iframe и изображений с отличного от текущего домена. Но тут
     * придется использовать только регулярные выражения, а не DOM.
     */

    phantom.state  = 'rasterize';
    phantom.content = response;
  }
} else {
  phantom.render(output);
  phantom.exit();
}
Мда, у этой библиотеки есть несколько не очевидных минусов. Как гласит вики, функция phantom.open() запускает загрузку страницы и перевыполняет скрипт, только тогда, когда загружена вся страница, включая все скрипты, картинки, внешние картинки и далее по списку. Наличие скриптов рекапчи, большого количества onload скриптов, делает загрузку страницы очень долгой, например вы можете даже увидеть подобное:
Loading time 58859 msec

Очень огорчает, что нет ни onDOMReady событий, ни возможности отключить загрузку и выполнение скриптов на странице, так что, скорее всего, для сервисов онлайн-скриншотов эта библиотека подойдет едва ли.
Небольшой гайд для тех, кто захочет использовать эту библиотеку для создания скриншотов сайта:

1. Идем на code.google.com/p/phantomjs/wiki/Installation и устанавливаем, как там написано, либо собираем, как написано на странице помощи по сборке: code.google.com/p/phantomjs/wiki/BuildInstructions

2. Устанавливаем Xvfb (frame buffer), он нужен будет для того, чтобы создать виртуальный x server.

3. Запускаем Xvfb, например со следующими параметрами:
Xvfb :1 -screen 0 1024x768x32 &

4. Теперь запускаем скрипт с первым виртуальным дисплеем:
:# DISPLAY=:1 phantomjs rasterize.js google.ru google.png
Все, как я понял можно использовать xvfb
Вот-вот, это огромная проблема, которую хотелось бы обсудить. Что необходимо для полноценной растеризации веб-сайта через эту библиотеку? Что именно нужно из X? Возможно ли это поднять на сервере без видеокарты и так далее?
А есть какие-то причины комментировать, если вы даже не вчитались в суть топика?
Нет, в этом случае я бы так и спросил. Меня интересует полезность алгоритма, представленного в топике.
Вы его привели, как пример полезного графа, а теперь он нечитаем. Давайте не будем дальше продолжать эту дискуссию.
Давайте сойдемся на том, что такие графы сделаны для того, чтобы отдел программистов отдохнул, ползая по простыне графа и красиво расставляя узлы.
Мы про топик с вами говорим, или что?
Видимо вам не зря платят, раз вы нашли человека, который в определенных кругах был деанонимизирован при путинвзрываетдома.рф.
Оцените какой-нибудь из представленных посте графиков и я с вами сразу же соглашусь.
Не поймите меня неправильно, графы для анализа системы могут быть полезны во многих задачах.
Но представленные в посте — только для красоты, функциональная нагрузка практически нулевая.
Такая же польза, как от генерации фракталов.
На каких диаграммах? image
Очень красиво, прямо как windows seven mobile.
Просмотрите изображения еще раз. Вы уверены, что они как-то приспособлены для анализа?

Трудно представить себе такую реплику:
— Вот тут посмотрите, у вас связи вокруг класса идут в форме ласточки, перепишите класс, чтобы в этом месте образовался зайчик.
Никогда не понимал, зачем же это вообще нужно-то? На стену повесить в рамочку?
Да, действительно, это из виду я упустил, но автор не сравнил цены на траффик, а это, я считаю, тоже немаловажно.

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность