четверг, 26 сентября 2013 г.

Crawljax: Автоматизация краулинга web-приложений


Crawljax: Crawling Ajax-based Web Applications - это Java-инструмент с открытым исходным кодом, которое позволит вам протестировать ваше web-приложение фактически имитируя действия пользователя по браузингу сайта. Crawljax может исследовать сайт использующий технологию ajax, при этом автоматически создавая динамический граф состояний DOM.

Для тех кому требуется проводить инвентаризацию сайта, может понравиться возможность снятия скриншотов каждого состояния и странички сайта так, как это выглядит в реальном браузере. Crawljax использует для этого движки реальных браузеров, работая через Selenium WebDriver.

В основе Crawljax лежат исследования 2007 года Али Мешбаха и Ари Ван Дёрсеном. Основная идея была изложена в их совместной работе "Exposing the Hidden-WebInduced by Ajax", в которой они показали как динамический сайт, использующий технологию ajax, может быть представлен в виде графа статических состояний DOM и переходов между ними. Позже эта работа использовалась при создании алгоритмов для поисковых систем, позволяя им краулить и анализировать содержимое динамических web-приложений.

Скачать Crawljax можно в GitHub-репозитории проекта: 

Для управления Crawljax используется простой консольный интерфейс. 
usage: 
java -jar crawljax-cli-version.jar theUrl theOutputDir

Для получения полного списка консольных ключей воспользуйтесь помощью:
java -jar crawljax-cli-3.3.jar -h

Например, для запуска краулинга данного блога параллельно в пяти браузерах, в том числе с идентификацией "скрытых" ссылок, была дана команда:
java -jar crawljax-cli-3.3.jar -p 5 -a -log log.txt http://forworktests.blogspot.ru/ forworktests


В конце работы Crawljax формирует html-репорт содержащий граф состояний и переходов по сайту, статистику по своей работе, список посещённых url-ов и подробную информацию о каждом состоянии в которое может переходить DOM.

На вкладке State graph визуально представляется граф переходов состояний DOM сайта:



Увеличивая или уменьшая масштаб графа можно получить представление о взаимодействии каждой отдельной странички (состояния) с другими и их связях:


Кликнув на конкретное состояние можно получить подробную информацию по нему, включающую его url, обнаруженные интерактивные элементы, структуру DOM, скриншот состояния и прочее:


На вкладке Statistics можно получить информацию о работе Crawljax:


На вкладке URL's представлены все пройденные Crawljax ссылки и связанные с ними состояния:


На вкладке Configuration можно узнать с какими параметрами был запущен Crawljax, а также информацию о его версии:


Из недостатков Crawljax следует отметить то, что общий размер каталога с отчетом получается довольно большим. Например, после анализа данного блога был получен отчет размером ~710Mb. Но это объясняется значительным числом ссылок в блоге (теги - тоже ссылки). При этом он прошёл по каждой страничке сайта и всем найденным на ней ссылкам, нажал на все кнопки, сохранил DOM каждого состояния и сделал их скриншоты в браузере, определил все интерактивные элементы странички, построил граф переходов для каждой странички и многое другое.

Ко всему вышесказанному можно добавить, что проект Crawljax продолжает развиваться и поддерживается разработчиками. Также можно воспользоваться возможностями краулера в своих проектах, используя готовые плагины или написав свой. Подробные примеры использования API имеются в документации к проекту Crawljax.