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

我正在尋找一種理想的方法來獲取'spect'之間的數據並解析它。有時在'spect'和'='之間有一個空格,有時則沒有。不知道為什麼,但我無法控制服務器。

我知道這個問題可能已被提出,但回復建議使用類似HTMLAgilityPack的東西,而我寧願避免使用庫來執行此任務,因為我只需要從DOM獲取一次JavaScript。

一般承認的答案

使用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中”,“初始化”,[{“staticRoot”:“// site.com/js/"}]],["cap”, “DM”,[{“tackmod”:“輪廓”,“XMOD”:“定時”}]]]

注意:我沒有考慮錯誤或其他任何問題,這僅僅是作為如何獲取腳本並評估spect值的示例。

還有一些其他庫用於執行/評估JavaScript。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因