![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
всем примет. столкнулся с такой проблемой:
делаю парсер для сайта, но данные на сайт грузятся через ajax, т.е. их нету в изначальном DOM, и они подгружаются скриптом после определенных действий. проблема в том что у меня не получилось получить от webBrowser-а вразумительный ответ о том что он что то загружает. если бы дело касалось просто страницы то тут все просто:
но этот код никак не реагирует на ajax. т.е. браузер не считает что он что то делает в это время. единственный найденный мной способ это вынести всю работу с браузером в отдельный поток и тупо усыплять основной поток приложения(форму) на время предполагаемой загрузки содержимого(время высчитывается чисто опытным путем), но это совсем не кошерно. как узнать что браузер загружает ajax(или выполняет какой либо иной скрипт) и дождаться окончания этого процесса? |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
неужели никто не сталкивался с этой проблемой? какие есть решения кроме того что я привел выше?
|
|||
|
||||
Lols |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 21.10.2011 Репутация: нет Всего: нет |
Я так понимаю, что скрипт не грузится вообще? Тогда зачем смотреть, когда наступит окончание процесса?
|
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
плохо понимаешь. с чего вообще такой вывод? я имел ввиду скрипты которые грузятся вместе со страницей в браузер. в том то и прикол, что скрипт грузится отлично. и отрабатывает, нужно отследить когда он(javascript) закончит загрузку ajax содержимого с сервера. |
|||
|
||||
Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: 3 Всего: 18 |
Решал недавно такую проблему, в итоге сделал тупо в лоб - после DocumentCompleted запускаю backgroundWorker, в котором таймаут на несколько секунд, после чего скрипт уже успевал догрузить документ и можно было работать с текстом. Частный случай, мою задачу решил, дальше я не копал.
|
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
Voyager, да, я в первом посте описал такое решение(только у меня вся работа в отдельном потоке была), но оно мне не нравится, как то слишком коряво. мне кажется должно быть более "элегантное" решение.
|
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
По поводу полной загрузки документа и ее отслеживания это вообще не единственная проблема. Например не так просто отследить документ, имеющий фреймовую структуру, поскольку событие DocumentCompleted будет вызывать не только документ, загруженный из основного окна, но и все документы, загруженные во фреймы. И еще кто там знает, с чем можно столкнуться в реальных документах. Что касается конкретно твоей проблемы, то ожидать, что для этого существует какое-то событие, я думаю не стоит, поскольку вряд ли оно существует. Но если тебе известно имя переменной, в которой в которую загружен объект XmlHttpRequest, выполняющий запросы, окончания которых ты ждешь, то можно попробовать вытащить ссылку на него, и через определенные интервалы проверять состояние. Это не намного лучше того, что делаешь ты, но у тебя просто назначен интервал безо всяких проверок, и если сервер тормознет или по каким-то другим причинам за отведенное тобой время операция не завершится - будут проблемы. А так вроде как должно все быть нормально. Но не знаю, это просто идея, сам ее воплощать я не пробовал ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
спасибо за совет, идея вполне здравая. надо как то опробовать будет.
|
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Экскалупатор, а кстати ты не пробовал проверять значение readyState документа? Я тут малость пошаманил и выяснил, что проблема многфреймовых документов таким образом вполне решается, то есть это свойство основного документа будет иметь значение complete, только когда все фреймы загружены. Может с аяксом так же?
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
ну, не совсем уверен, делал так как в первом посте описано, там проверяется readyState(правда браузера), но это не спасало.
|
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
А ну я не знаю, конечно, одно и то же они возвращают или нет, но видимо одно. Так что с аяксом это не прокатит. Добавлено через 2 минуты и 16 секунд Да, проверил с фреймами, это свойство браузера возвращает то же самое, что и у документа, так что точно не то. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |