2014-11-13 3 views
1

У меня есть список URL-адресов, которые мне нужны, чтобы извлекать их HTML для каждого отдельно. URL-адреса:C# webBrowser в цикле

foo_list = {"expamle.com", "example.net", "example.org"}; 

Код я пробовал:

foreach (string x in foo_list) { 
     webBrowser1.Navigate(x); 
} 

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    string html = webBrowser.Document.Body.Parent.OuterHtml; 
    // handle the html and save to file... 
} 

Проблема заключается в том, я только что получил HTML и данные последнего URL (example.org) в списке. Я понимаю, что команда Navigate в цикле foreach работает слишком быстро, поэтому только последний URL может ждать DocumentCompleted. Итак, как я могу справиться с этой проблемой?

+3

Использование 'async' и' await' – Shaharyar

+0

'Chelsea_cole' помнит, что веб-функциональность, просмотр и или перенаправление - это' Stateless', не то же самое, что в 'Windows', я бы поискал в свободное время' Async Task и ждал' function – MethodMan

+0

Uhm, почему бы не использовать HTTP-клиент для этого? Посмотрите REST Sharp – Crisfole

ответ

2

Вы можете обрабатывать ее, держа индекс, подождать, пока прогресс загрузки документа не завершена, а затем перейти к следующему:

int index = -1; //variable in class 
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    string html = webBrowser.Document.Body.Parent.OuterHtml; 
    if (index + 1 != foo_list) //So it will stop when there's no links left. 
     webBrowser1.Navigate(foo_list[++index]); 
} 

Но, чтобы вызвать вращение URL, вам нужно будет перейти к первый URL-адрес в списке. Для этого вы можете просто выполнить это где-то еще, чтобы вызвать его:

if (index + 1 != foo_list.Count) 
    webBrowser1.Navigate(foo_list[++index]); 

Но вместо этого я хочу предложить альтернативу: WebClient.DownloadString(System.String), который вы можете напрямую загрузить HTML, так что вы можете выбрать свой путь и перебирать во время загрузки ,

+0

Thx mate! Я понял! –