Re: Автоматизация действий в интернете
От: vRus  
Дата: 15.04.06 16:17
Оценка: 2 (1)
А Вы, собственно, на чем работаете? Если в Delphi, базовым компонентом можно, естественно, выбрать TWebBrowser или Mozilla Control (более геморройно). Далее ловим события OnBeforeNavigate и OnDocumentComplete. Вообще, однажды я столкнулся с ситуацией, когда документ полностью так и не загружался, т.е. DocumentComplete не происходило. На этом скользком принципе основаны стрим-чаты (многие из них так и не отображаются в браузерах вроде Opera — из-за бесконечной загрузки документа). Программа представляла собой клиент для чата (bizarre.kiev.ua), и в ней требовалось реализовать представление поступающих потоковых ("бесконечных") данных в реальном времени в произвольном формате (в дополнение к оригинальному веб-интерфейсу) и их сохранение. Что же я сделал? Я изменил (через DOM-интерфейс компонента TWebBrowser — Document.All.Scripts[i]) оригинальный чатовский JavaScript, который перехватывал поступающие сообщения в сжатом виде и форматировал их для вывода в главный фрейм чата — скрипт этот грузился статично. Теперь скрипт стал кроме своей основной задачи инициировать фиктивную навигацию (что позволило перехватывать OnBeforeNavigate) в выделенном для этого фрейме на URL, представляющий собой модифицированное полученное скриптом сообщение. Перехватив OnBeforeNavigate, я расшифровывал поступающие потоковые сообщения из URL и сразу же направлял их в программу, после чего отменял навигацию (это позволяет обработчик OnBeforeNavigate), таким образом, никакой лишней сетевой активности не происходило.

Фактически, универсальному решению данной проблемы мешают ограничения самого браузерного движка. Скажем, полезной была бы функция определения первого в Z-порядке (видимого) непрозрачного объекта, находящегося в точке (x,y) видимой области или всей страницы. Это, ко всему прочему, позволяет обходить "защиту" некоторых сайтов вроде GooglePrint. Там изображение страницы книги перекрыто прозрачной "пустышкой", которую и сохраняет браузер, когда юзер пытается сделать это правой кнопкой мыши. Полезнейший инструмент от Microsoft — MSIE Developer Toolbar позволил мне увидеть и положение "защищенной" картинки (фон главной страницы), и ее настоящий URL, по которому я открывал изображение в отдельном окне и спокойно его сохранял.

Можно попытаться, загрузив страницу, пройтись по ее DOM-структуре и сгенерировать соответствующий javascript, реагирующий на все события вроде onclick для всех кликабельных объектов, добавить этот скрипт в загруженную страницу (она может увеличиться в размере) и таким образом превратить любой HTML-код в некое подобие AJAX. А еще лучшим решением будет полная переработка браузерного движка (например, Firefox) с заменой (или дополнением) парадигмы "Back-Forward" на "Undo-Redo", более соответствующей концепции Web 2.0. В любом случае, существующие браузеры — крайне неудобная, нестабильная и сомнительная платформа для по-настоящему полнофункциональных веб-приложений. Будь то Opera, IE или Firefox. Опера — фактически закрытое и до недавнего времени коммерческое приложение; IE — инструмент маркетинга MS. И поэтому в ближайшее время наиболее интенсивно будет развиваться как раз Firefox, вместе с компонентами типа GreaseMonkey. Firefox как платформа представляет собой веб-аналог Linux. Так вот, если в Linux-сообществе перекомпиляция ядра под специфический софт или железо (с целью оптимизации) — обычное дело, то и браузерный движок для специфических задач (а тем более для внедрения в состав другого софта) лучше пересобирать (например, если приложение должно использовать DOM и работать как браузер, но отображение страницы не требуется — убираем рендеринг и получаем "слепой" и компактный управляемый извне псевдобраузерный компонент).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.