Exécution de scripts dans HtmlAgilityPack
Je suis en train de gratter une page en particulier qui fonctionne comme suit.
D'abord le chargement de la page, puis il exécute une sorte de javascript pour récupérer les données dont il a besoin pour remplir la page. Je suis intéressé par les données.
Si j'Obtiens la page avec HtmlAgilityPack - le script ne s'exécute pas et j'obtiens ce que c'essentiellement un la plupart du temps-page blanche.
Est-il un moyen de forcer l'exécution d'un script, donc je peux obtenir les données?
source d'informationauteur Aabela
Vous devez vous connecter pour publier un commentaire.
Vous obtenez ce que le serveur est de retour - le même que d'un navigateur web. Un navigateur web, bien sûr, puis exécute les scripts. Html Agility Pack est un analyseur HTML seulement - il n'a aucun moyen d'interpréter le javascript ou le lier à sa représentation interne du document. Si vous voulez exécuter le script, il vous faudra un navigateur web. La réponse parfaite à votre problème serait un "headless" navigateur web. C'est quelque chose qui intègre un analyseur HTML, un interpréteur javascript, et un modèle qui simule le navigateur DOM, travaillant tous ensemble. En gros, c'est un navigateur web, à l'exception sans le rendu de la partie. En ce moment il n'y a pas une telle chose qui fonctionne entièrement à l'intérieur de l' .NET de l'environnement.
Votre meilleur pari est d'utiliser un
WebBrowser
de contrôle et de les charger et exécuter la page dans Internet Explorer sous contrôle par programmation. Ce ne sera pas rapide, ou joli, mais il va faire ce que vous devez faire.Voir aussi ma réponse à une question similaire: Charger un DOM et d'Exécuter du javascript côté serveur, avec .Net qui traite de la technologie disponible .NET pour cela. La plupart des pièces existent maintenant, mais ne sont pas encore ou n'ont pas été intégrées dans le droit chemin, malheureusement.
Vous pouvez utiliser Awesomium pour cela, http://www.awesomium.com/. Il fonctionne assez bien, mais n'a pas de support pour x64 et n'est pas thread-safe. Je l'utilise pour scanner des sites web 24x7 et il est en cours d'exécution fine pour au moins une couple de jours dans une rangée, mais ensuite il se bloque généralement.