正在分析HTML以获取脚本变量值

本文关键字:获取 脚本 变量值 HTML | 更新日期: 2023-09-27 18:27:10

我正试图找到一种方法,在我向其发出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>

我正在寻找一种理想的方法来获取"spect"之间的数据并对其进行分析。有时"pect"answers"="之间有空格,有时没有。不知道为什么,但我无法控制服务器。

我知道可能有人问过这个问题,但回复建议使用HTMLAgilityPack之类的东西,我宁愿避免使用库来完成这项任务,因为我只需要从DOM中获取一次JavaScript。

正在分析HTML以获取脚本变量值

使用HTMLAgilityPackJurassic库评估结果的简单示例:

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

输出:

[["回火"、"初始化"、[]、["fw/lib"、"init"、[{"staticRoot":"//site.com/js/"}]]、["cap"、"dm"、[{"tackmod":"profile"、"xMod":"timed"}]]

注意:我不考虑错误或其他任何事情,这只是一个如何获取脚本并评估spect值的示例。

还有一些其他库用于执行/评估JavaScript。