15

ページで、変数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ですか?はいの場合、どのように?

4

2 に答える 2

34

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

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

  • プロ:

    • 完全なJavascriptサポート
  • 短所:

    • 追加のlibraray/依存関係

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

  • プロ:

    • 追加のライブラリは必要ありません
    • 簡単なタスクには十分
  • 短所:

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

keyjsoupandを使用して「手動」コードを取得する方法の例を次に示します。

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
于 2013-02-17T20:43:04.320 に答える
0

Kotlinの質問は重複としてマークされており、この質問に向けられています。
それで、これが私がKotlinでそれをした方法です:

val (key, value) = document
    .select("script")
    .map(Element::data)
    .first { "key" in it } // OR single { "key" in it }
    .split("=")
    .map(String::trim)
val pureValue = value.replace(Regex("""["';]"""), "")
println("$key::$pureValue") // key::pqRjnA

別のバージョン:

val (key, value) = document
    .select("script")
    .first { Regex("""key\s*=\s*["'].*["'];""") in it.data() }
    .data()
    .split("=")
    .map { it.replace(Regex("""[\s"';]"""), "") }
println("$key::$value") // key::pqRjnA

脚注

ドキュメントを取得するには、次のようにします。

  • ファイルから:
    val input = File("my-document.html")
    val document = Jsoup.parse(input, "UTF-8")
    
  • サーバーから:
    val document = Jsoup.connect("the/target/url")
        .userAgent("Mozilla")
        .get()
    
于 2021-11-14T16:27:46.030 に答える