Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WebBrowser отследить окончание загрузки 
:(
    Опции темы
Экскалупатор
Дата 30.10.2011, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



всем примет. столкнулся с такой проблемой:
делаю парсер для сайта, но данные на сайт грузятся через ajax, т.е. их нету в изначальном DOM, и они подгружаются скриптом после определенных действий. проблема в том что у меня не получилось получить от webBrowser-а вразумительный ответ о том что он что то загружает. если бы дело касалось просто страницы то тут все просто:
Код

while (browser.IsBusy || browser.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }



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

 как узнать что браузер загружает ajax(или выполняет какой либо иной скрипт) и дождаться окончания этого процесса?
PM MAIL ICQ   Вверх
Экскалупатор
Дата 31.10.2011, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



неужели никто не сталкивался с этой проблемой? какие есть решения кроме того что я привел выше?
PM MAIL ICQ   Вверх
Lols
Дата 31.10.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 21.10.2011

Репутация: нет
Всего: нет



Я так понимаю, что скрипт не грузится вообще? Тогда зачем смотреть, когда наступит окончание процесса?
PM MAIL   Вверх
Экскалупатор
Дата 31.10.2011, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



Цитата(Lols @  31.10.2011,  15:57 Найти цитируемый пост)
Я так понимаю, что скрипт не грузится вообще?

плохо понимаешь. с чего вообще такой вывод? я имел ввиду скрипты которые грузятся вместе со страницей в браузер.

в том то и прикол, что скрипт грузится отлично. и отрабатывает, нужно отследить когда он(javascript) закончит загрузку ajax содержимого с сервера.
PM MAIL ICQ   Вверх
Voyager
Дата 31.10.2011, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Решал недавно такую проблему, в итоге сделал тупо в лоб - после DocumentCompleted запускаю backgroundWorker, в котором таймаут на несколько секунд, после чего скрипт уже успевал догрузить документ и можно было работать с текстом. Частный случай, мою задачу решил, дальше я не копал.
PM   Вверх
Экскалупатор
Дата 31.10.2011, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



Voyager, да, я в первом посте описал такое решение(только у меня вся работа в отдельном потоке была), но оно мне не нравится, как то слишком коряво. мне кажется должно быть более "элегантное" решение.
PM MAIL ICQ   Вверх
diadiavova
Дата 3.11.2011, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Цитата(Экскалупатор @  31.10.2011,  17:50 Найти цитируемый пост)
неужели никто не сталкивался с этой проблемой? 

По поводу полной загрузки документа и ее отслеживания это вообще не единственная проблема. Например не так просто отследить документ, имеющий фреймовую структуру, поскольку событие DocumentCompleted будет вызывать не только документ, загруженный из основного окна, но и все документы, загруженные во фреймы. И еще кто там знает, с чем можно столкнуться в реальных документах.
Что касается конкретно твоей проблемы, то ожидать, что для этого существует какое-то событие, я думаю не стоит, поскольку вряд ли оно существует. Но если тебе известно имя переменной, в которой в которую загружен объект XmlHttpRequest, выполняющий запросы, окончания которых ты ждешь, то можно попробовать вытащить ссылку на него, и через определенные интервалы проверять состояние. Это не намного лучше того, что делаешь ты, но у тебя просто назначен интервал безо всяких проверок, и если сервер тормознет или по каким-то другим причинам за отведенное тобой время операция не завершится - будут проблемы. А так вроде как должно все быть нормально. 
Но не знаю, это просто идея, сам ее воплощать я не пробовал smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Экскалупатор
Дата 3.11.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



спасибо за совет, идея вполне здравая. надо как то опробовать будет.
PM MAIL ICQ   Вверх
diadiavova
Дата 3.11.2011, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Экскалупатор, а кстати ты не пробовал проверять значение readyState документа? Я тут малость пошаманил и выяснил, что проблема многфреймовых документов таким образом вполне решается, то есть это свойство основного документа будет иметь значение complete, только когда все фреймы загружены. Может с аяксом так же?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Экскалупатор
Дата 3.11.2011, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



ну, не совсем уверен, делал так как в первом посте описано, там проверяется readyState(правда браузера), но это не спасало.
PM MAIL ICQ   Вверх
diadiavova
Дата 3.11.2011, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Цитата(Экскалупатор @  4.11.2011,  00:18 Найти цитируемый пост)
ну, не совсем уверен, делал так как в первом посте описано, там проверяется readyState(правда браузера), но это не спасало. 

А ну я не знаю, конечно, одно и то же они возвращают или нет, но видимо одно. Так что с аяксом это не прокатит.

Добавлено через 2 минуты и 16 секунд
Да, проверил с фреймами, это свойство браузера возвращает то же самое, что и у документа, так что точно не то.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0819 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.