スクリプト変数値を取得するためのHTMLの解析

c# html-agility-pack javascript

質問

私はHTTPリクエストを行っているサーバから返されたタグの間でデータにアクセスする方法を見つけようとしています。ドキュメントには複数のタグがありますが、そのうちの1つのタグだけに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>

私は 'スペクトル'とそれを解析する間のデータを取得する理想的な方法を探しています。時には 'スペクト'と '='の間にスペースがあり、時にはそれがない場合もあります。理由は分かりませんが、私はサーバーを制御できません。

私はこの質問に尋ねられた可能性がありますが、HTMLAgilityPackのようなものを使用することを提案しています。

受け入れられた回答

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を実行/評価するためのライブラリもいくつかあります。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ