스크립트 변수 값을 얻기 위해 HTML 구문 분석하기

c# html-agility-pack javascript

문제

HTTP 요청을하는 서버에 의해 반환 된 태그 사이의 데이터에 액세스하는 메서드를 찾으려면 노력하고있어. 문서에는 여러 개의 태그가 있지만 태그 중 하나에 만 자바 스크립트 코드가 있으며 나머지는 파일에 포함됩니다. 스크립트 태그 사이의 코드에 액세스하려고합니다.

코드의 예는 다음과 같습니다.

<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과 같은 것을 사용하는 것이 좋습니다. 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();

산출:

[ "temper", "init", []], [ "fw / lib", "init", [{ "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는 합법적입니까? 예, 이유를 알아보십시오.