2012-04-15 4 views
3

Я использую элемент управления C# WebBrowswer, и у меня есть проблема, когда при нажатии кнопки, такой как «Далее», когда страница еще не загружена, программа пытается продолжить, но вместо этого дает мне null ошибка.Подождите, пока страница не загрузится в элементе управления веб-браузером

Есть ли функция, чтобы программа дождалась загрузки страницы?

Я попытался поместить цикл while в программу, которая проверяет заголовок html-страницы, но затем программа замерзает. Нечто подобное будет заморозить программу:

while(!webbrowser1.Document.Title.ToString().Equals("NextPageTitle")) 
    { 
    } 
    ::NextCommands:: 

он не работает, я попробовал, что и кнопка «fblqf» не нажата. но его не возвращает нулевой ошибки ..

public void button1_Click(object sender, EventArgs e) 
{ 



    webBrowser1.Document.GetElementById("q").SetAttribute("value", "חחח"); 
    webBrowser1.Document.GetElementById("btnK").InvokeMember("Click"); 
    webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 


} 
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    // do the work you need to do now that that page has completed loading 
    webBrowser1.Document.GetElementById("fblqf").InvokeMember("Click"); 
} 

Решение:

public void button1_Click(object sender, EventArgs e) 
{ 
    webBrowser1.Document.GetElementById("q").SetAttribute("value", "חחח"); 
    webBrowser1.Document.GetElementById("btnK").InvokeMember("Click"); 
    int x=0; 
    while (x==0) 
    { 
     System.Windows.Forms.Application.DoEvents(); 
     if(webBrowser1.Document.GetElementById("pnnext") != null) 
     break; 
    } 

    webBrowser1.Document.GetElementById("pnnext").InvokeMember("Click"); 
    webBrowser1.Document.GetElementById("q").Focus(); 
} 

ответ

1

Я нашел простое решение !!!

public void button1_Click(object sender, EventArgs e) 
{ 
    webBrowser1.Document.GetElementById("q").SetAttribute("value", "חחח"); 
    webBrowser1.Document.GetElementById("btnK").InvokeMember("Click"); 

    while (true) 
    { 
     System.Windows.Forms.Application.DoEvents(); 
     if(webBrowser1.Document.GetElementById("pnnext") != null) 
     break; 
    } 

    webBrowser1.Document.GetElementById("pnnext").InvokeMember("Click"); 
    webBrowser1.Document.GetElementById("q").Focus(); 
} 
+2

Вам действительно нужен x? Не могли бы вы поместить webBrowser1.Document.GetElementById ("pnnext") == null внутри условия while? – Puce

+0

Возможно, вы правы, так как вы можете видеть, что это один из моих первых фрагментов кода. – hagai

7

Вам нужно подключить WebBrowswer.DocumentCompleted событие:

Возможно, в конструкторе или ваш OnLoad:

webBrowser1.Document.GetElementById("q").SetAttribute("value", "חחח"); 
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 
webBrowser1.Document.GetElementById("btnK").InvokeMember("Click"); 

Затем вы видите следующее:

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    // do the work you need to do now that that page has completed loading 
} 
+0

Я добавил еще несколько кода, чтобы объяснить проблему – hagai

+0

@ user1335131, я обновил свой код. Перед попыткой загрузить следующую веб-страницу необходимо настроить обработчик событий. –

+0

Я пробовал это, по-прежнему та же проблема – hagai

Смежные вопросы