Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / WebBrowser не отдает страничку после Navigate (цепочка переходов) / 5 сообщений из 5, страница 1 из 1
05.03.2014, 11:32
    #38578671
dred_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser не отдает страничку после Navigate (цепочка переходов)
Задача по парсингу сайта.
Часть переходов - это подгрузка через Ajax данных на ту же страничку по ссылке, а часть переходов обычные уникальные ссылки.
На каком-то из этапов после выполнения WebBrowser.Navigate (Url) WebBrowser просто ничего не отображает: белая страничка и все. Посмотрел где обрывается: в Navigating (событие перед началом навигации) еще заходит, а вот в уже в Navigated (после навигации) уже не попадает (естественно, в DocumentCompleted в этом случае так же не попадает).
Виснуть может на любом из этапов цепочки переходов: первую страничку перехода отображает всегда, а вот начиная со второй, может произойти описанное выше, причем каждый раз это может быть вторая, третья или еще какая-то страничка при переходе. Попробовал проанализировать и увидел, что при парсинге аналогичного сайта, который обрабатывается как часики, в DocumentCompleted попадает обработка ссылки “about: blank”, а вот с этим проблемным сайтом в DocumentCompleted “about: blank” ни разу не было, может в этом проблема?...
Вообщем буду признателен за советы.

--
MS SQL SERVER 2008R2 (RTM) 10.50.1600.1 (X64) + C# .Net 3.5/4 + Delphi 5\7
...
Рейтинг: 0 / 0
05.03.2014, 18:01
    #38579365
dred_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser не отдает страничку после Navigate (цепочка переходов)
кажется, проблема в том, что WebBrowser перейдя не первую ссылку дальше пытается переходить по следующим ссылкам не дождавшись загрузки предыдущих документов и из-за этого его в каком-то событии и клинит. DocumentCompleted очень простой:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
private void webBrowserMain_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
      {
         // избегаем многократного срабатывания этого события
         if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath) return;

         if (!(e.Url.ToString().StartsWith("http://") || e.Url.ToString().StartsWith("https://"))) return;  // для Ajax

         nPage();
      }


где nPage(); - метод, который содержит переход на следующую страницу.
Получается, что nPage(); срабатывает когда предыдущая ссылка еще не полностью загружена, хотя по приведенному коду такого не должно происходить…
...
Рейтинг: 0 / 0
05.03.2014, 19:36
    #38579442
dred_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser не отдает страничку после Navigate (цепочка переходов)
нет, не в DocumentCompleted дело (
...
Рейтинг: 0 / 0
06.03.2014, 14:22
    #38580206
dred_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser не отдает страничку после Navigate (цепочка переходов)
интересное наблюдение: если перед проблемным сайтом автоматически в этом WebBrowser обрабатываются иные сайты, то зачастую ошибка не возникает. Можете что-то с Cookie в текущей сессии заставляет стопориться WebBrowser…

прикрепил эмуляцию моей ошибки. После нескольких запусков скомпилированного *.exe-ника у меня начинает появляться белое окно WebBrowser без какой-либо информации, то есть он виснет. Может кто у себя попробовать, повторяется ли ошибка?
...
Рейтинг: 0 / 0
06.03.2014, 17:57
    #38580474
dred_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser не отдает страничку после Navigate (цепочка переходов)
почитал о “временной петле” решения проблемы отслеживания подгрузки данных через AJAX. Часто еще совершенствуют такой подход тем, что в событии таймера Tick проверяют дополнительно наличие на странице некого элемента, но способ не универсальный и требует фактически программирование каждой из загружаемых страниц.
2. Кроме того, добавление
Код: c#
1.
2.
3.
4.
private void webBrowserMain_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
   webBrowserMain.Stop();
}


снизило на порядок частоту возникновения проблемы.

Вывод сделал такой: суть проблемы – это отсутствие на текущий момент в webBrowserMain_DocumentCompleted универсального кода проверки загрузилась ли страничка полностью или нет (через AJAX). За такой вердикт говорит то, что применение “временной петли” значительно уменьшает частоту возникновения проблемы.
Если же кто-то поделится универсальным кодом для DocumentCompleted проверки полной загрузки страницы (наверное, через AJAX), то будет здорово.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / WebBrowser не отдает страничку после Navigate (цепочка переходов) / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]