C# - WebBrowser - 30 stron na raz....

0

Otwieram kilkanascie stron w webBrowser (w jezyku C#) poszukiwaniu pewnych treści....
Mam procedure która wyszukuje danych i klika odpowiedni link, to działa dobrze.

Strony otwieram w WebBrowserze:

webBrowser1.Navigate("strona1.....");
webBrowser1.Navigate("strona2.....");
webBrowser1.Navigate("strona3.....");
itd. itd.

Na stronie mogę operować dopiero po jej wczytaniu (DocumentCompleted), wiec obsluzylem to zdarzenie, wpisalem tam funkcje ktora operuje na stronie.

Niestety w efekcie mam wyniki tylko z OSTATNIO wczytanej strony, tej na koncu. Wszystkie pozostale 30+ stron nie jest brane pod uwage...
Z tego co widze procedura dla DocumentCompleted wykonywana jest tylko raz, a powinna (wydaje mi sie) tyle razy ile mam stron do otwarcia, czyli ile razy wywoluje Navigate.

Nie rozumiem co xle robie. Probowalem z opcja "delay" (Thread.Sleep(3500);) miedzy kazdym otworzeniem innej strony w WebBroserze, ale nic to nie pomoglo...

PROSZE O POMOC!

PS. Sorry za bledy, pisze z netbooka z mala klawiaturka :O

0

Tytul dałem niefortunny. Powinno byc: 30 stron po kolei.

Chodzi o to ze chciałbym obsłużyć każdą stronę (np. w petli for), ale zeby wykonanie programu zatrzymywało sie az strona sie wczyta (czyli DocumentCompleted) i operuje na danych ze strony i dopiero wczytujemy kolejna strone, itd. itd. itd.

0

Błąd masz w idei. Jeżeli chcesz tylko przeszukiwać strony, to nie potrzebujesz żadnego WebBrowser, wystarczy Ci WebClient i metoda DownloadString.

0

Być może, ale z WebBrowserem umiem podejrzeć kod, kliknąć w link, czy przycisk, itp. A to o czym mówisz to ciemna magia. Webbrowsera trochę znam i jest sporo przykładów z nim na sieci...

0

No to @somekind rzucił dobre rozwiązanie.
Jaka tam ciemna magia...

using (WebClient wc = new WebClient())
{ 
    string s = wc.DownloadString("http://google.pl");
}
0
KAtsssss napisał(a)

Być może, ale z WebBrowserem umiem podejrzeć kod, kliknąć w link, czy przycisk, itp.

Ale po co chcesz klikać w link czy przycisk? Napisałeś, że chcesz pobrać treść ze strony. WebClient ściąga właśnie kod strony, nie o to Ci chodzi?

Webbrowsera trochę znam i jest sporo przykładów z nim na sieci...

A z WebClientem to nie ma?

0

WITka!

A jakie ma możliwości ten WebClient?? Jakie zastosowania typowe i te mniej typowe??

Przejrzałem w Googlach i widzę, że głownie ściaganie plików, upload plików (także na FTP), podglądanie kodu strony i logowanie się do stron.... Co jeszcze? Gdzie można tą bibliotekę wykorzystać, znacie jakieś ciekawe zastosowania?

Jak zmusić WC do zrobienia własnej "szukajki" opartej na Google? (tu znalazłem: http://answers.oreilly.com/topic/2165-how-to-search-google-and-bing-in-c/ - ale nie wiem jak to odpalić)
Jak ściągnąć treść strony (sam tekst), ale nie kod strony, tylko to co jest wyświetlone przez przeglądarkę?
Czy na WC da się zrobić takie programy:

  • wypełnianie formularza + kliknięcie w button (submit)?
  • ściąganie danych z Google Analytics?
  • czy można się dowiedzieć o wielkośc pliku, przed jego ściągnięciem korzystając z WC?? (np. pliki PDF czy ISO - sprawdzenie rozmiaru plików na pewnej stronie...).

Sorry, że tyle pytań na raz, ale temat wydaje się ciekawy i złapałem dzieki wam faze na WebClienta... :D

0

Kliknięcie w submit spowoduje wysłanie danych do pewnej strony - kliknąć się nie da, ale da się wysłać dane z formularza bezpośrednio do odbiorcy. Pobrać wielkość pliku też się pewnie da. Ale raczej to nie z użyciem WebClient, ale HttpWebRequest i HttpWebResponse, które to WebClient opakowuje w nieco przyjemniejsze API.

Ściągnąć samego tekstu, a nie kodu, strony się nie da. Tutaj musisz mieć coś, co zinterpretuje kod, np. WebBrowser.

0

No a wracając do mojego problemu.... Jak zatrzymac (tj. pauza) działanie programu na czas, aż strona się wczyta?? Wykonać co ma wykonać (to już mam) i wczytać kolejną stronę (Navigate) i znowu wstrzymać dalsze działanie, do czasu aż strona się w WB załaduje, itd. itd... Tylko jak to zrobić??? :)

0

Nikt nie wie jak to zrobić??

KATssss

0

Luknij na mój post i pokombinuj, bo ja nie wiem jak to przerobić C#
WebBrowser sprawdzenie czy strona jest załadowana

0
KATssss napisał(a)

Nikt nie wie jak to zrobić??

Zamiast kombinować:

  1. Zdefiniuj jakąś listę (albo kolejkę) stron do wczytania.
  2. Rozpocznij wczytywanie 1 strony.
  3. W zdarzeniu DocumentCompleted zrób, co chcesz z nią zrobić.
  4. A następnie rozpocznij wczytywanie następnej strony z listy/kolejki.
  5. Rób to, dopóki strony są w liście.

1 użytkowników online, w tym zalogowanych: 0, gości: 1