Это действительно зависит от масштаба вашего проекта. Если это просто случайный, не полностью автоматизированный, я настоятельно рекомендую аддон Firefox.
Я нахожусь в середине подобного проекта. Он должен анализировать DOM страницы, сгенерированной с использованием Javascript. Написание серверного браузера было слишком сложно, поэтому мы обратились к другим технологиям: Adobe AIR, аддоны Firefox, скрипты пользователей и т. Д.
Fx addon отлично подходит, если вам не нужна автоматизация. Скрипт может проанализировать страницу, показать вам результаты, попросить вас исправить детали, в которых он не уверен, и, наконец, опубликовать данные в какой-нибудь бэкэнд. У вас есть доступ ко всем DOM, поэтому вам не нужно писать JS / CSS / HTML / любой другой парсер (это было бы адской работой!)
Другой способ - Adobe AIR. Здесь у вас есть больше контроля над приложением - вы можете запустить его в фоновом режиме, выполняя весь анализ и анализ без вашего взаимодействия. Недостатком является то, что у вас нет доступа ко всем DOM страниц. Единственный способ пройти это - установить простой прокси-сервер, который выбирает целевой URL-адрес, добавляет некоторый Javascript (для создания моста песочницы, которому нельзя доверять) ... Это грязный хак, но он работает.
Edit:
В 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 без графического окружения. Требуются мастерские навыки взлома. :)