Это действительно зависит от масштаба вашего проекта. Если это просто случайно, а не полностью автоматизировано, я бы настоятельно рекомендовал дополнение Firefox.
Я как раз в середине подобного проекта. Он должен анализировать DOM страницы, созданной с использованием Javascript. Писать серверный браузер было слишком сложно, поэтому мы обратились к некоторым другим технологиям: Adobe AIR, Firefox Addons, пользовательским скриптам и т. д.
Аддон Fx отличный, если вам не нужна автоматизация. Сценарий может проанализировать страницу, показать вам результаты, попросить вас исправить части, в которых он не уверен, и, наконец, отправить данные в какой-либо сервер. У вас есть доступ ко всей DOM, поэтому вам не нужно писать парсер JS/CSS/HTML или что-то еще (это была бы адская работа!)
Другой способ — Adobe AIR. Здесь у вас больше контроля над приложением — вы можете запускать его в фоновом режиме, выполняя весь синтаксический анализ и анализ без вашего участия. Недостатком является то, что у вас нет доступа ко всем DOM страниц. Единственный способ обойти это — настроить простой прокси-сервер, который извлекает целевой URL-адрес, добавляет немного Javascript (для создания моста песочницы с доверенными и ненадежными)… Это грязный хак, но он работает.
Изменить. В Adobe AIR есть два способа доступа к DOM чужого веб-сайта:
- Загрузите его через Ajax, создайте объект HTMLLoader и передайте в него ответ (
loadString
метод IIRC)
- Создайте iframe и загрузите сайт в ненадежную песочницу.
Я не помню почему, но первый метод не помог мне, поэтому мне пришлось использовать другой (думаю, это было связано с некоторыми соображениями безопасности, которые я не мог обойти). И мне пришлось создать песочницу, чтобы получить доступ к DOM сайта. Вот немного о работа с мостами песочницы. Идея состоит в том, чтобы создать прокси, который добавляет простой JS, который создает childSandboxBridge
и предоставляет некоторые методы родителю (в данном случае: приложению AIR). Содержимое скрипта примерно такое:
window.childSandboxBridge = {
// ... some methods returning data
}
(будьте осторожны — есть ограничения на то, что можно передать через мост песочницы — никаких сложных объектов точно! используйте только примитивные типы)
Таким образом, прокси в основном подделывал все запросы, которые возвращали HTML или XHTML. Все остальное было просто пропущено без изменений. Я сделал это с помощью Apache + PHP, но наверняка можно сделать и с настоящим прокси с некоторыми плагинами/кастомными модулями. Таким образом, у меня был доступ к DOM любого сайта.
конец редактирования.
Третий известный мне способ, самый сложный — настроить среду, аналогичную той, что на browsershots. Тогда вы используете Firefox с автоматизацией. Если у вас есть Mac OS X на сервере, вы можете поиграть с ActionScript, чтобы сделать автоматизацию за вас.
Итак, резюмируя:
- PHP/серверный скрипт — вы должны реализовать свой собственный браузер, JS-движок, синтаксический анализатор CSS и т. д., и т. д. Вместо этого полностью контролируемый и автоматизированный.
- Firefox Addon — имеет доступ к DOM и прочему. Требуется, чтобы пользователь управлял им (или, по крайней мере, открытым сеансом Firefox с какой-либо автоматической перезагрузкой). Приятный интерфейс для пользователя, чтобы управлять всем процессом.
- Adobe AIR — требуется работающий настольный компьютер, сложнее, чем создание надстройки Fx, но более мощный.
- Автоматизированный браузер — больше проблема настольного программирования, чем веб-разработки. Может быть установлен на терминале Linux без графического окружения. Требуются мастерские навыки взлома. :)
person
Maciej Łebkowski
schedule
01.06.2009