我正在尝试找到一种方法来访问我发出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。
使用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();
输出:
[[ “回火”, “初始化”,[]],[ “FW / lib中”, “初始化”,[{ “staticRoot”: “// site.com/js/"}]],["cap”, “DM”,[{ “tackmod”: “轮廓”, “XMOD”: “定时”}]]]
注意:我没有考虑错误或其他任何问题,这仅仅是作为如何获取脚本并评估spect值的示例。
还有一些其他库用于执行/评估JavaScript。