解析 HTML 以获取脚本变量值

IT技术 c# javascript html-agility-pack
2021-03-01 00:46:02

我试图找到一种方法来访问我正在向其发出 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”之间的数据并对其进行解析。有时在“spect”和“=”之间有一个空格,有时没有。不知道为什么,但我无法控制服务器。

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

1个回答

一个非常简单的例子,说明如何使用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();

输出:

[["temper","init",[]],["fw/lib","init",[{"staticRoot":"//site.com/js/"}]],["cap", "dm",[{"tackmod":"profile","xMod":"timed"}]]]

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

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

我在这里提出了一个问题,但似乎没有回应。 stackoverflow.com/questions/23636885/...
2021-05-02 00:46:02
@buffer_overflow 从你发布它到现在才不到一天,等着吧,有人会帮你解决的!请记住,这不是付费服务网站,您可以在此发布并获得解决所有问题的即时答案。
2021-05-10 00:46:02
尽管我选择使用正则表达式,但我实际上喜欢这个答案,因为我从未使用过侏罗纪,而且它会在未来的项目中派上用场。
2021-05-12 00:46:02
@buffer_overflow 针对您的问题提出一个新问题,我相信有人会帮助您解决这个问题。
2021-05-18 00:46:02
如果脚本需要读取 DOM 怎么办?我们可以将 HTML 传递到侏罗纪吗?
2021-05-19 00:46:02