WebBrowser control-ожидание загрузки страницы после отправки формы



Я новичок в c# и его концепциях, поэтому мне жаль, если этот вопрос немного глуп.
Я пытаюсь сделать некоторую автоматизацию, используя WinForms webbrowser control



elements = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement element in elements)
{
if (element.GetAttribute("value") == "Anzeigen")
element.InvokeMember("click");
}

while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();

// do some math on recived html
// ......

// show results
MessageBox.Show(numPlanets.ToString() );


Итак, чтобы объяснить это:
Я ищу кнопку со значением "Anzeigen", имитирую щелчок по ней, затем жду, пока загрузится новая страница, и делаю свои вычисления.
К сожалению, мои расчеты сделаны на старом содержимом HTML, потому что он не ждет загрузки страницы. Странно, если я вхожу в поток.Сон (5000); после для каждого цикла этот спящий режим выполняется до имитации щелчка, и вычисление также завершается неудачей.



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



Надеюсь, вы можете помочь мне с этим, извините за мой плохой английский



Править:
Решил ее вот так:
Переменная bool webbbrowserfinished = false внутри класса, если я хочу синхронное поведение, я делаю это так:



   webbrowserfinished = false;
// do navigation here

while (!webbrowserfinished)
{
Application.DoEvents();
Thread.Sleep(100);
}
webbrowserfinished = false;
801   3  

3 ответов:

Вы можете попробовать WebBrowser.DocumentCompleted Event Происходит, когда элемент управления WebBrowser завершает загрузку документа.

private void Form1_Load(object sender, EventArgs e)
{
   webBrowser1.Navigate("google.com");
   webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
   MessageBox.Show("Completed Now!");
}

Ну, это не самое лучшее решение, но вы всегда можете запустить таймер, когда веб-браузер переходит, и установить timer1.Tick на что-то вроде 3000, затем в рамках метода timer1_Tick Вы можете сделать свои вычисления на новой странице, а затем timer1.Stop();.

Возможно, есть лучшее решение, использующее события, но я сам не слишком хорошо разбираюсь в веб-браузерах.

Вы можете использовать Thread.sleep(5000), чтобы дождаться загрузки страницы, потому что если вы этого не сделаете, метод navigate загрузит новый документ в управление веб-браузером, но он не вызовет document_complete_event_handler

Comments

    Ничего не найдено.