2

だから、私はJSoupに問題があります。

HTMLページを解析して、次のようないくつかのフォーム入力値を取得する必要があります。

<input value="210cf5f0c2db3ac6ac5112881525cfff" data-value="1355317682" type="hidden" name="token" />
<input type="hidden" name="sid" value="18c03bc9nkedyyjmbzgvmkv5tx7yhyw1" />
<input value="" name="redirect" type="hidden" />
<input value="d3edfe5b37608758516833b858b51b63" type="hidden" name="eyhy7xt5v" /> 

これらの各入力の値を取得できる必要がありますが、一度に1つずつ取得できます。私の現在のJavaコードは次のようになります。

import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;

class JSoupTest {
    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect("http://url.com/auth").get();
        Elements inputs = doc.select("input");
        for(Element input : inputs) {
            System.out.println(input.attr("name"));
            System.out.println(input.attr("value"));
        }
    }
}

現在、すべての入力の名前とその値をダンプしますが、特定の入力フィールドの値のみを出力するプログラムが必要です。

たとえば、「sid」という名前の入力フィールドの値を出力したいとします。その値だけを印刷する必要がありますが、他の値は必要ありません。

どういうわけか、そのような選択的な印刷を行う必要があります、あなたが言うことができると思います。特定の入力フィールドの値を出力するだけです。

誰かがこれを行う方法を知っていますか?

JSoupのドキュメントでは、このページを見ていましたが、探しているものが見つかりませんでした。

ありがとう!

編集:ページを更新するたびに、最後の値の名前がランダムに生成されることに気づきました。「隠された」特性以外に一定に保たれる値がない場合、それを取得する方法はありますか?

4

1 に答える 1

3

私があなたを正しく理解していれば、次のコードはあなたが望むことをします:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class MyParser {
    public static void main(String args[]) {
        String inputText = 
            "<input value=\"210cf5f0c2db3ac6ac5112881525cfff\" data-value=\"1355317682\" type=\"hidden\" name=\"token\" />"
            + "<input type=\"hidden\" name=\"sid\" value=\"18c03bc9nkedyyjmbzgvmkv5tx7yhyw1\" />"
            + "<input value=\"\" name=\"redirect\" type=\"hidden\" />"
            + "<input value=\"d3edfe5b37608758516833b858b51b63\" type=\"hidden\" name=\"eyhy7xt5v\" />" ;
        Document doc = Jsoup.parseBodyFragment(inputText);
        Element body = doc.body();
        // Grab the value attribute of the INPUT element with a given name attribute
        Element input = body.select("input[name=sid]").first();
        System.out.println(input.attr("value"));
        // Grab the value attribute of the last INPUT element
        Element lastInput = body.select("input").last();
        System.out.println(lastInput.attr("value"));
    }
}

次の構文を使用してinput、属性に特定の値を持つ要素を選択できます。name

element.select("tag_name[attr_name=value]")

Elementsこれは、要素を 1 つだけ含むオブジェクトを返します(name属性の値が一意であるため)。

input変化するname属性を持つ要素が最後であると述べたので、すべての要素を含むオブジェクトを取得し、それらの要素の最後をinput取ることで、その知識を利用できます。Elementsinput

于 2012-12-14T19:21:51.597 に答える