В Википедии:
DOM (от англ. Document Object Model — «объектная модель документа») — это не зависящий от платформы и языка программный интерфейс, позволяющий программам и скриптам получить доступ к содержимому документов, а также изменять содержимое, структуру и оформление документов.
Суть объектной модели браузера в том, что мы через простой интерфейс можем получить доступ к любым элементам страницы. Например, к любой ссылке (или ко всему массиву ссылок), к любой форме, к любому элементу ввода, к любой кнопке и так далее. К объектам и их свойствам и методам, естественно. Нас больше всего будут интересовать объекты, связанные с тегами HTML. Они соответствуют тегам, которые формируют текущий документ, и включают такие элементы как гиперсвязи и формы.
К объектам можно обращаться по id, по номеру в массиве (например, если надо перебрать все элементы одинакового типа).
Я бы посоветовала взять в руки какой-нибудь толстенный спровочник по JavaScript, например. И просмотреть раздел, посвященный объектной модели браузера. В свое время я так и делала. Необязательно знать и помнить все объекты, свойства и методы — важно оценить возможности и прикинуть, для чего все это может пригодиться. Тем, кто уже изучал JavaScript, будет немного легче.
Так, сейчас немного о том, как работать с объектной моделью в Delphi, используя рассмотренный в предыдущем посте компонент TWebBrowser.
Существует интерфейс IHTMLDocument2, который позволяет с легкостью это делать. А можно напрямую через OleObject. Например, если в html-документе, заруженном в WebBrowser, есть, допустим, инпут с id='message', то код:
WebBrowser.OleObject.document.getElementById('message').Value := 'Привет!';запишет в этот инпут строку "Привет!".
А код:
ovElements := WebBrowser1.OleObject.Document.Forms.Item(0).Elements;переберет все элементы первой по счету формы страницы, найдет в ней кнопку, на которой будет написано "Send" и сымитирует ее нажатие.
for i := 0 to (ovElements.Length-1) do
if (AnsiUpperCase(ovElements.Item(i).tagName) = 'INPUT') then
if (AnsiUpperCase(ovElements.Item(i).type) = 'SUBMIT') or
(AnsiUpperCase(ovElements.Item(i).type) = 'BUTTON') then
if (ovElements.item(i).Value = 'Send') then
ovElements.Item(i).Click;
Как видите, объектная модель — очень полезная и удобная штука. Хотя основное ее применение — не парсинг, а автоматизация регистраций, заполнения форм и так далее. Чтобы показать, насколько она может быть полезна, в следующих постах приведу пример разработки и создания небольшой утилиты для автоматизации добавления вашей RSS-ленты в RSS-агрегаторы.
Читаю Ваш блог с самого начала ( в смысле с первого поста) - все понятно и легко. Спасибо за блог. :)
ОтветитьУдалитьДа, мегаполезный блог... хоть сам на с++ пишу )))
ОтветитьУдалитьОчень полезная информация ^_^
ОтветитьУдалитьПрямо сейчас сижу и пробую все это исполнить на C#.
Подскажите, а как можно программно щелкнуть вот в такой строчке
ОтветитьУдалитьdiv class="action unavailable"
span onclick="doOperation(this, 38)" class="bathe fleas tooltip"
Анонимный, может, вам поможет вот эта статья: http://parsing-and-i.blogspot.com/2009/02/javascript-twebbrowser-delphi.html.
ОтветитьУдалитьА как нажать на кнопку вида: div class="word-submit">Добавить /div>?
ОтветитьУдалитьЧеловеки, здравствуйте! помогите, пожалуйста, мне нужна программа для вытаскивания DOM со страницы. Сам пытаюсь разобраться, но ни как не получается. может кто нить помочь с этим? если что мое мыло damir89.mail@mail.ru
ОтветитьУдалить