Exécution de scripts dans HtmlAgilityPack

c# html-agility-pack javascript

Question

J'essaie de gratter une page Web particulière qui fonctionne comme suit.

La page se charge d’abord, puis elle exécute une sorte de javascript pour récupérer les données dont elle a besoin pour remplir la page. Je suis intéressé par ces données.

Si j'obtiens la page avec HtmlAgilityPack - le script ne s'exécute pas, alors j'obtiens une page essentiellement vierge.

Y a-t-il un moyen de le forcer à exécuter un script pour que je puisse obtenir les données?

Réponse acceptée

Vous obtenez ce que le serveur renvoie - le même qu’un navigateur Web. Bien entendu, un navigateur Web exécute ensuite les scripts. Html Agility Pack est un analyseur HTML uniquement - il n’a aucun moyen d’interpréter le javascript ou de le lier à sa représentation interne du document. Si vous voulez exécuter le script, vous aurez besoin d'un navigateur Web. La réponse parfaite à votre problème serait un navigateur Web complet "sans tête". C’est quelque chose qui incorpore un analyseur HTML, un interpréteur javascript et un modèle qui simule le DOM du navigateur, travaillant tous ensemble. Fondamentalement, il s’agit d’un navigateur Web, sauf le rendu. À l'heure actuelle, rien de tel ne fonctionne entièrement dans l'environnement .NET.

Le mieux est d’utiliser un contrôle WebBrowser et de charger et d’exécuter la page dans Internet Explorer sous contrôle programmatique. Ce ne sera ni rapide ni beau, mais il fera ce que vous devez faire.

Voir également ma réponse à une question similaire: Chargez un DOM et exécutez JavaScript, côté serveur, avec .Net, qui décrit la technologie disponible dans .NET pour le faire. La plupart des pièces existent à l'heure actuelle, mais n'y sont pas encore complètement ou n'ont pas été intégrées correctement, malheureusement.


Réponse populaire

Vous pouvez utiliser Awesomium à cet effet, http://www.awesomium.com/ . Cela fonctionne assez bien mais ne supporte pas x64 et n'est pas thread-safe. Je l'utilise pour analyser certains sites Web 24 heures sur 24, 7 jours sur 7, et tout fonctionne normalement pendant au moins deux jours d'affilée, mais il se bloque généralement.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi