web-dev-qa-db-ja.com

jsoupでJavaScriptを解析する

HTMLページで、javascript変数の値を選択します。以下はHTMLページのスニペットです。

<input id="hidval" value="" type="hidden"> 
<form method="post" style="padding: 0px;margin: 0px;" name="profile" autocomplete="off">
<input name="pqRjnA" id="pqRjnA" value="" type="hidden">
<script type="text/javascript">
    key="pqRjnA";
</script>

私の目的は、keyを使用してこのページから変数jsoupの値を読み取ることです。 jsoupで可能ですか?はいの場合、どのように?

13
Ravi Joshi

JsoupはJavaScriptライブラリではないため、これを解決するには2つの方法があります。

A. JavaScriptライブラリを使用する

  • プロ:

    • JavaScriptの完全サポート
  • Con:

    • 追加のlibraray /依存関係

B. Jsoup +手動解析を使用する

  • プロ:

    • 追加のライブラリは不要
    • 単純な作業には十分
  • Con:

    • JavaScriptライブラリほど柔軟ではありません

Jsoupといくつかの "manual"コードでkeyを取得する方法の例を次に示します。

Document doc = ...
Element script = doc.select("script").first(); // Get the script part


Pattern p = Pattern.compile("(?is)key=\"(.+?)\""); // Regex for the value of the key
Matcher m = p.matcher(script.html()); // you have to use html here and NOT text! Text will drop the 'key' part


while( m.find() )
{
    System.out.println(m.group()); // the whole key ('key = value')
    System.out.println(m.group(1)); // value only
}

出力(HTMLパーツを使用):

key="pqRjnA"
pqRjnA
31
ollo