.NET WebBrowser узнать загрузилась ли страничка
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
.NET WebBrowser узнать загрузилась ли страничка - 2011-08-25 19:25:49.723333
|
|
|
ololo__schoolboy
Сообщений: 118
Оценки: 0
Присоединился: 2011-06-14 12:42:52.573333
|
Есть примерно такой:
for(int i=0;i<size;++i)
{
this->webBrowser1->Navigate("http://site.ru/param=" + Convert::ToString(Array[0]));
/*
do{
Sleep(1000);
}while(незагружено);
тут надо парсить
*/
} как мне определить, что страничка уже загрузилась ? ps DocumentCompleted не катит
|
|
|
RE: .NET WebBrowser узнать загрузилась ли страничка - 2011-08-26 12:27:53.750000
|
|
|
ALE}{_Y
Сообщений: 35
Оценки: 0
Присоединился: 2010-02-14 03:23:27.436666
|
quote:
как мне определить, что страничка уже загрузилась ? Для этого необходимо использовать событие WebBrowser - Navigated следующим образом:
void YourOwnFunc()
{
//допустим тут Вы создаете свой браузер
WebBrowser webBrowser1 = new WebBrowser();
//добавляете обработчик события Navigated
//обратите внимание, необходимо самому создать функцию которая будет выполняться
//при наступлении данного события (в данном случае функция wb_Navigated)
webBrowser1.Navigated += new WebBrowserNavigatedEventHandler(wb_Navigated);
//тут осуществляете переход на нужную страницу
webBrowser1.Navigate("http://site.ru/param=" + Convert.ToString(Array[0]));
}
//функция wb_Navigated, о которой упоминалось ранее
static void wb_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
//тут производите необходимые Вам действия
throw new NotImplementedException();
}
P.S. Код пишу на C#. Переделать на С++ труда не составит, так как главное, чтобы Вы уловили суть.
|
|
|
RE: .NET WebBrowser узнать загрузилась ли страничка - 2011-08-26 17:47:40.050000
|
|
|
ololo__schoolboy
Сообщений: 118
Оценки: 0
Присоединился: 2011-06-14 12:42:52.573333
|
возникла еще проблема, как синхронизировать обработчик события с циклом который переключает странички. Пробовал так:
for(int i=0;i<size;++i)
{
this->webBrowser1->Navigate("http://site.ru/param=" + Convert::ToString(Array[0]));
//жду пока произойдет событие
do{
Sleep(5000);
}while(!IsLoaded);
//что-то делаю
IsLoaded = false;
}
соответственно при загрузке IsLoaded = true. Но проблема в том, что при вызове Sleep загрузка останавливается
|
|
|
RE: .NET WebBrowser узнать загрузилась ли страничка - 2011-08-26 20:44:49.583333
|
|
|
ALE}{_Y
Сообщений: 35
Оценки: 0
Присоединился: 2010-02-14 03:23:27.436666
|
Функция Sleep() блокирует выполнение потока, так что по сути Вы получаете бесконечный цикл. Мне кажеться, Вам нужно перенести часть кода программы в функцию обработки события Navigated. Что-то типа такого:
void YourOwnFunc()
{
//...........................
//предыдущий код работы програмы
//добавление все того же обработчика события Navigated
webBrowser1.Navigated += new WebBrowserNavigatedEventHandler(webBrowser1_Navigated);
//тут осуществляете переход на первую страницу
webBrowser1.Navigate("http://site.ru/param=" + Convert.ToString(Array[0]));
}
//функция webBrowser1_Navigated
static void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
//последующие итерации цикла
//обратите внимание, начало цикла уже с 1, а не с 0
int i;
for(i=1;i<size;++i)
{
//тут производите переход на остальные страницы
this.webBrowser1.Navigate("http://site.ru/param=" + Convert.ToString(Array[0]));
}
if(i == size-1)
{
//..........................
//код из предыдущего метода
//или вызов другого
}
}
В результате получаем прохождение всех итераций цикла (в зависимости от переменной size), выполнение последующего кода программы или вызов соответствующего метода. Данное решение задачи не являеться единственно праильным, но для решения "на скорую руку" думаю покатит. P.S. ololo__schoolboy, напишите пожалуйста, какое решение в результате примете. Чисто в целях научного интереса)))
|
|
|
RE: .NET WebBrowser узнать загрузилась ли страничка - 2011-08-27 18:20:38.626666
|
|
|
ololo__schoolboy
Сообщений: 118
Оценки: 0
Присоединился: 2011-06-14 12:42:52.573333
|
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
i = 0;
this->webBrowser1->Navigate("...");
}
System::Void webBrowser1_DocumentCompleted_1(System::Object^ sender, System::Windows::Forms::WebBrowserDocumentCompletedEventArgs^ e) {
if(i)
{
if(!(this->webBrowser1->Document->GetElementById(gcnew String("no_results"))))
{
HtmlElementCollection^ Results = this->webBrowser1->Document->GetElementById(gcnew String("results"))->Children;
for(int i=0;i<Results->Count;++i)
this->textBox1->Text += "\r\n" + Results[i]->Children[1]->Children[1]->Children[0]->InnerHtml;
}
}
if(i<size)
this->webBrowser1->Navigate
(
"..."
+Convert::ToString(Schools[i++])+
"..."
);
}
ps если, что ты сам попросил =)
|
|
|
|
|