Анализ HTML для получения значения переменной скрипта

c# html-agility-pack javascript

Вопрос

Я пытаюсь найти способ доступа к данным между тегами, возвращаемыми сервером, к которому я делаю HTTP-запросы. Документ имеет несколько тегов, но только один из тегов имеет код JavaScript между ним, остальные - из файлов. Я хочу получить доступ к коду между тегом скрипта.

Пример кода:

<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>

Я ищу идеальный способ захватить данные между «спектром» и проанализировать его. Иногда между «спектром» и «=» существует пробел, а иногда нет. Не знаю, почему, но у меня нет контроля над сервером.

Я знаю, что этот вопрос, возможно, был задан, но ответы предлагают использовать что-то вроде HTMLAgilityPack, и я бы предпочел не использовать библиотеку для этой задачи, так как мне нужно только один раз получить JavaScript из DOM.

Принятый ответ

Очень простой пример того, как это может быть легко с помощью библиотеки HTMLAgilityPack и Jurassic для оценки результата:

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();

Вывод:

[[ "Нрав", "INIT", []], [ "ФВ / Библиотека", "INIT", [{ "staticRoot": "// site.com/js/"}]],["cap", "дм", [{ "tackmod": "профиль", "Xmod": "приурочено"}]]]

Примечание. Я не учитываю ошибки или что-то еще, это просто пример того, как захватить скрипт и оценить значение спектра.

Есть несколько других библиотек для выполнения / оценки JavaScript.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему