C # WPF - Warten auf das Laden der Seite
Ich habe mehrere Threads auf StackOverflow zu diesem Thema gesehen, jedoch scheint keiner von ihnen eine Antwort zu liefern.
Ich habe eine Schaltfläche, die beim Klicken eine unsichtbare Webseite öffnet, zu einer URL navigiert, Informationen in ein Feld eingibt, eine Schaltfläche drückt und dann auf dem Bildschirm nach Informationen sucht.
Die Knochen meines Codes im Grunde in den Klick:
WebBrowser wb = new WebBrowser;
wb.Visibility = System.Windows.Visibility.Hidden;
wb.Navigate("http://somepage.com");
Und hier wird es schwierig.
Ich suche einen Weg zudafür sorgen dass die Seite geladen wird, bevor versucht wird, Daten einzugeben oder den Bildschirm zu verkratzen. Ich habe mehrere Threads gesehen, über die gesprochen wirdNavigated
, IsLoaded
, LoadCompleted
ebenso gut wieBackgroundWork
Zeug, aber ich kann keines davon zum Laufen bringen.
Welche Option eignet sich am besten, um festzustellen, ob die Seite vollständig geladen wurde? Wie würden Sie die gewählte Methode zum Laufen bringen?
Ich kann die Daten auch nicht vom Bildschirm abrufen, da WPF nicht dasselbe verwendetGetElementByID
.
Bearbeiten:
Nach dem Kommentar unten sind hier die Fehler, auf die ich stoße:
Zuerst navigiert, sobald auch die Seite navigiert wurde, und nicht unbedingt warten, bis alle Objekte geladen sind. Dies funktioniert wie vorgesehen, kann aber nicht für meine Zwecke verwendet werden.IsLoaded
gibt nie wahr zurück
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";
}
Setzt es in eine Endlosschleife alswb
scheint nie zu laden.
Das Ereignis 'System.Windows.Controls.WebBrowser.LoadCompleted' kann nur links von + = oder - = angezeigt werden
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)
{
}
Erzeugt den Fehler
In {filename} ist eine nicht behandelte Ausnahme vom Typ 'System.NullReferenceException' aufgetreten.
Zusätzliche Informationen: Die Objektreferenz wurde nicht auf eine Instanz eines Objekts festgelegt.