C # WPF - Oczekiwanie na załadowanie strony
Widziałem kilka wątków na StackOverflow dotyczących tego tematu, jednak żaden z nich nie wydaje się dostarczać odpowiedzi.
Mam przycisk, który po kliknięciu otwiera niewidoczną stronę internetową, przechodzi do adresu URL, wprowadza informacje do pola, naciska przycisk, a następnie zdrapuje ekran w celu uzyskania informacji.
Kości mojego kodu w zasadzie klikają:
WebBrowser wb = new WebBrowser;
wb.Visibility = System.Windows.Visibility.Hidden;
wb.Navigate("http://somepage.com");
I to właśnie tam staje się trudne.
Szukam drogi dozapewnić strona jest ładowana przed próbą wprowadzenia danych lub zeskrobania ekranu. Widziałem kilka wątków, o których mówięNavigated
, IsLoaded
, LoadCompleted
jak równieżBackgroundWork
rzeczy, ale nie mogę tego zrobić.
Która opcja jest najlepsza, aby określić, czy strona została w pełni załadowana? Jak uzyskałbyś wybraną metodę do pracy?
Nie mogę również uzyskać danych z ekranu, ponieważ WPF nie używa tych samych danychGetElementByID
.
Edytować:
Poniżej zamieszczam błędy, na które natrafiam:
Nawiguj najpierw, gdy tylko strona zostanie poruszona i niekoniecznie czeka, aż załadowane zostaną wszystkie obiekty. To działa zgodnie z przeznaczeniem, ale nie może być użyte do moich celów.IsLoaded
nigdy nie zwraca prawdy
private void GetData_Click(object sender, RoutedEventArgs e)
{
int x=0;
HTMLDocument doc;
wb = new WebBrowser();
wb.Visibility = System.Windows.Visibility.Visible;
wb.Navigate("somesite.com");
doc = wb.Document as mshtml.HTMLDocument;
while(!wb.IsLoaded)
{
//Wait
}
doc.getElementById("txt_One").innerText = "It Worked";
}
Umieszcza go w nieskończonej pętliwb
nigdy się nie ładuje.
Zdarzenie „System.Windows.Controls.WebBrowser.LoadCompleted” może pojawić się tylko po lewej stronie + = lub - =
private void GetData_Click(object sender, RoutedEventArgs e)
{
int x=0;
HTMLDocument doc;
wb = new WebBrowser();
wb.Visibility = System.Windows.Visibility.Visible;
wb.Navigate("somesite.com");
doc = wb.Document as mshtml.HTMLDocument;
wb.LoadCompleted += wb_LoadCompleted;
doc.getElementById("txt_One").innerText = "It Worked";
}
void wb_LoadCompleted(object sender, NavigationEventArgs e)
{
}
Powoduje błąd
W {filename} wystąpił nieobsługiwany wyjątek typu „System.NullReferenceException”
Informacje dodatkowe: odwołanie do obiektu nie jest ustawione na wystąpienie obiektu.