正在分析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。
使用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"、"init"、[{"staticRoot":"//site.com/js/"}]]、["cap"、"dm"、[{"tackmod":"profile"、"xMod":"timed"}]]
注意:我不考虑错误或其他任何事情,这只是一个如何获取脚本并评估spect值的示例。
还有一些其他库用于执行/评估JavaScript。