C# WPF - dans l'Attente de la page à charger
J'ai vu plusieurs threads sur StackOverflow concernant ce sujet, mais aucune d'entre elles semblent apporter une réponse.
J'ai un bouton qui, lorsqu'on clique dessus, ouvre une page web invisible, accède à une URL, saisit les informations dans une boîte, il appuie sur un bouton, et racle l'écran pour plus d'informations.
Les os de mon code en gros, dans la cliquez sur:
WebBrowser wb = new WebBrowser;
wb.Visibility = System.Windows.Visibility.Hidden;
wb.Navigate("http://somepage.com");
Et c'est là que ça devient délicat.
Je suis à la recherche d'un moyen de assurer que le chargement de la page avant d'essayer d'entrer des données ou de gratter l'écran. J'ai vu plusieurs threads qui parlent de Navigated
, IsLoaded
, LoadCompleted
ainsi que BackgroundWork
trucs, mais je ne peux pas obtenir tout cela fonctionne.
Qui est la meilleure option pour les utiliser afin de déterminer si la page est entièrement chargée? Comment voulez-vous obtenir la méthode choisie pour travailler?
Je ne peux pas obtenir les données à partir de l'écran comme WPF ne pas utiliser le même GetElementByID
.
Edit:
Par le commentaire ci-dessous, voici les erreurs que j'ai couru dans:
- Navigué en premier dès que la page a été navigué trop et ne pas forcément attendre jusqu'à ce que tous les objets sont chargés. Cela fonctionne comme prévu, mais ne peut pas être utilisé pour mes fins.
-
IsLoaded
jamais renvoie trueprivate 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"; }
Met dans une boucle infinie comme wb
ne jamais charger.
- C'est la version avec LoadCompleted
L'événement " le Système de.De Windows.Les contrôles.WebBrowser.LoadCompleted' ne peut apparaître sur le côté gauche de l' += ou -=
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)
{
}
Produit l'erreur
Une exception non gérée du type 'System.NullReferenceException' s'est produite dans {nom de fichier}
Informations supplémentaires: Objet de référence non définie à une instance d'un objet.
- Veuillez donner des détails sur "ne peut pas obtenir tout cela fonctionne". Afficher votre code, décrire le problème à chaque tentative dans beaucoup plus de détails. Nous ne pouvons pas vous dire pourquoi cela ne fonctionne pas sans voir le code.
- Merci pour votre travail d'édition... mais s'il vous plaît afficher votre code.
Vous devez vous connecter pour publier un commentaire.
Le contrôle webbrowser a un loadedevent (que vous avez):
LoadCompleted: se déclenche lorsque le dom est chargé complètement.
Lier l'événement et dans le cas de la méthode get le document au lieu de tout de suite.
Que vous devez faire doc = wb.Document mshtml.HTMLDocument; dans le loadcompleted événement. Parce que jusqu'à ce que la charge est terminée, vous ne pouvez pas obtenir le document.