Analyse du HTML pour obtenir la valeur variable du script

J'essaie de trouver une méthode d'accès aux données entre les tags renvoyés par un serveur auquel je fais des requêtes HTTP. Le document comporte plusieurs balises, mais une seule des étiquettes possède un code JavaScript entre elle, les autres sont inclus dans les fichiers. Je souhaite accéder au code entre la balise de script.

Un exemple du code est:

<html> // Some HTML <script> var spect = [['temper', 'init', []], ['fw\/lib', 'init', [{staticRoot: '//site.com/js/'}]], ["cap","dm",[{"tackmod":"profile","xMod":"timed"}]]]; </script> // More HTML </html> 

Je cherche un moyen idéal de saisir les données entre «spect» et de l'analyser. Parfois, il y a un espace entre 'spect' et '=' et parfois il n'y a pas. Je ne sais pas pourquoi, mais je n'ai aucun contrôle sur le serveur.

Je sais que cette question a peut-être été posée, mais les réponses suggèrent d'utiliser quelque chose comme HTMLAgilityPack, et je préfère éviter d'utiliser une bibliothèque pour cette tâche, car je n'ai besoin que d'avoir JavaScript depuis le DOM une fois.

Un exemple très simple de la façon dont cela pourrait être simple en utilisant une bibliothèque HTMLAgilityPack et Jurassic pour évaluer le résultat:

 var html = @"<html> // Some HTML <script> var spect = [['temper', 'init', []], ['fw\/lib', 'init', [{staticRoot: '//site.com/js/'}]], [""cap"",""dm"",[{""tackmod"":""profile"",""xMod"":""timed""}]]]; </script> // More HTML </html>"; // Grab the content of the first script element HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(html); var script = doc.DocumentNode.Descendants() .Where(n => n.Name == "script") .First().InnerText; // Return the data of spect and stringify it into a proper JSON object var engine = new Jurassic.ScriptEngine(); var result = engine.Evaluate("(function() { " + script + " return spect; })()"); var json = JSONObject.Stringify(engine, result); Console.WriteLine(json); Console.ReadKey(); 

Sortie:

[["Temp", "init", []], ["fw / lib", "init", [{"staticRoot": "// site.com/js/"}]],["cap" "Dm", [{"tackmod": "profil", "xMod": "chronométré"}]]]

Remarque: Je ne compta pas d'erreurs ou d'autre chose, cela sert simplement d'exemple pour saisir le script et évaluer la valeur du spectre.

Il existe quelques autres bibliothèques pour l'exécution / évaluation de JavaScript.