Récupérer du code HTML généré dynamiquement à l'aide de .NET a été une tâche insaisissable pour beaucoup. Bien que la classe System.Windows.Forms.WebBrowser et l'interface COM mshtml.HTMLDocument de l'assembly de la bibliothèque d'objets HTML Microsoft aient été suggérées, leur implémentation s'est avérée difficile.
Le système La classe .Windows.Forms.WebBrowser n’a pas donné de résultats satisfaisants dans la récupération du code HTML tel que rendu par le navigateur Web. Même l'accès au DomDocument d'une page Web accédée à "https://www.google.com/#q=where am i" ne parvient pas à récupérer les données générées dynamiquement qui apparaissent sur la page rendue.
De même, accéder directement à l'interface mshtml.HTMLDocument2 ne fournit pas le résultat souhaité. Le téléchargement du code HTML brut à partir de l'URL spécifiée à l'aide de System.Net.WebClient et son écriture dans l'instance IHTMLDocument2 ne parviennent pas à capturer les données générées dynamiquement.
Une solution élégante Une approche qui combine les principes d'interrogation et d'async/wait fournit une solution plus fiable. En interrogeant continuellement l'instantané HTML actuel et en vérifiant la propriété IsBusy du navigateur Web, nous pouvons déterminer quand le rendu de la page est terminé. Cette approche réduit considérablement les chances de récupérer prématurément le code HTML.
Il est important de noter que déterminer le moment exact où le rendu de la page est terminé n'est pas toujours possible avec 100 % de certitude en raison de la complexité et du potentiel de mises à jour AJAX continues sur certaines pages Web. Pour atténuer ce problème, il est recommandé d'implémenter un mécanisme de délai d'attente en plus de la logique d'interrogation.
De plus, l'activation du rendu HTML5 à l'aide du contrôle des fonctionnalités du navigateur est cruciale, car le contrôle WebBrowser s'exécute par défaut en mode d'émulation IE7. Ce paramètre peut être ajusté pour garantir la compatibilité avec les technologies Web modernes et améliorer la précision du rendu.
Le code C# fourni démontre l'application de ces principes sous une forme utilisable. Il utilise un contrôle WebBrowser, une logique d'interrogation et des constructions async/wait pour récupérer le contenu HTML dynamique à partir d'une URL spécifique. Le résultat est une solution plus précise et conviviale qui répond au besoin d’extraction HTML dynamique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!