Control WebBrowser. Часть 2: События

В предыдущей статье было продемонстрировано, как получить данные в виде html страницы и вывести их в окно элемента управления webBrowser. Сегодня более подробно рассмотрим, что происходит после нажатия кнопки btnSend на форме (клавиши Enter на клавиатуре).

Три основных события контрола webBrowser

После нажатия кнопки btnSend (Enter) мы попадаем в обработчик события Click (KeyDown), в котором происходит запуск метода Navigate. Первое, что должен выполнить данный метод, это осуществить переход, по указанному нами адресу в поле url. Но перед тем, как будет выполнен переход, в элементе управления webBrowser возникает первое событие.

Navigating

Данное событие возникает перед тем, как будет выполнен переход. В обработчике данного события можно отследить, куда будет осуществлён переход, для этого можно использовать следующую запись — e.Url, осуществить проверку на правильность введенного адреса или его отсутствие, а так же и во все отменить переход по указанному адресу.

Navigating

Забегая немного вперед, хочется рассказать о двух полезных свойствах данного элемента управления.

IsBusy

Первое свойство позволяет определить происходит ли в данный момент загрузка новых данных в webBrowser. Данное свойство принимает значение true, в момент загрузки новых данных, всё остальное время, данное свойство имеет значение false.

ReadyState

Свойство ReadyState пригодиться, если нужно отследить текущее состояние элемента управления WebBrowser.

В отличие от предыдущего свойства имеет несколько значений, начальным из которых является значение Uninitialized, которое обозначает, что control webBrowser, в данный момент, не содержит никаких данных.

На примере созданного в предыдущей статье сайта test.local, проследим за состоянием обоих свойств от момента нажатия на кнопку Enter, до полной загрузки данных в control webBrowser.

Текущее значение свойств:

Navigated

Если в событие Navigating был дан положительный ответ на запрос о переходе, то метод Navigate выполняет переход по указанному нами адресу, после чего начинается загрузка данных в control webBrowser, именно в этот момент возникает второе событие Navigated, которое оповещает о начале загрузки данных в элемент управления WebBrowser.

Текущее значение свойств:

пример:


Набираем команду codeby webinar

Набираем команду для организации и проведения вебинаров Подробнее ...

DocumentCompleted

После события Navigated происходит событие DocumentCompleted, которое обозначает, что загрузка данных в control webBrowser была выполнена полностью. Именно после возникновения этого события можно переходить к работе с полученными данными, например парсить контент, сохранять данные и так далее.

Текущее значение свойств:

пример

Фреймы

Данное событие может возникать несколько раз, например: если страница содержит фреймы, то тогда после каждого загруженного фрейма, будет происходить событие DocumentCompleted, поэтому в обработчике этого события, возможно, потребуется сделать пару дополнительных проверок.

Например: запрашиваемая страница содержит два фрейма

Исходник страницы

6

Если не делать никаких проверок, то при возникновении события DocumentCompleted в первый раз мы получаем не полную загрузку страницы, а полную загрузку первого фрейма, а так как их два, то тогда получим два вызова события DocumentCompleted для обоих фреймов. Чтобы этого избежать, можно использовать простую проверку:

При работе с фреймами, так же стоит внимательно отслеживать значение свойства isBusy, так как после первого загруженного фрейма, значение измениться на false, при этом загрузка новых данных продолжается. В таком случае лучше отслеживать свойства ReadyState, которое сначала изменит свое значение на Interactive, которое означает, что какая-та часть данных уже была загружена в элемент управления webBrowser, а затем на Complete. При этом так же потребуется выполнить код проверки на загрузку всего документа, а не отдельного фрейма.

Для Ajax запросов можно использовать вот такую проверку, опять же в событие DocumentCompleted

Так же стоит помнить, что если в поле url указан не верный адрес или он вообще не указан, то после нажатия кнопки Enter (btnSend) все 3 события будут успешно отработаны, как и при указании верного адреса.

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

Читайте также:


Требуются разработчики и тестеры для проекта codebyOS

Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

Похожие темы

Как найти html элемент по атрибуту class... Как найти html элемент по его классу? В этой статье хотелось бы рассказать, как можно быстро и легко найти html элемент по его классу. Поиск элементо...
Пишем simple-кейлогер с передачей дампа по TCP на ... Всем доброго времени суток! В продолжение первой и второй частей сегодня допишем последнее - дешифратор той каши, что у нас получалась на первых ...
Web Application Pentesting | методы HTTP запросов... Добро пожаловать на курс Web Application Pentesting. В этой статье мы с вами научимся: Вручную посылать запросы на веб сервер через консольную утил...
Протокол XML-RPC для вызова удаленных процедур Wor... Вызов удаленной процедуры WordPress с помощью протокола XML-RPC XML-RPC это протокол вызова удаленных процедур, который использует формат XML для код...
c# Как удалить колонку в DataGridView?... Удаление колонки в DataGridView В этой статье мы рассмотрим, как удалить колонку в элементе DataGridView с помощью языка c# Создадим новый проект ...