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" /> 

我需要能够获取每个输入的值,但一次一个。我当前的 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

If I understand you properly the following code does what you want:

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"));
    }
}

You can select an input element with a given value for the name attribute using the following syntax:

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

This returns an Elements object that contains just one element (because the value of the name attribute is unique).

You said that the input element with a changing name attribute is the the last input so you can take advantage of that knowledge by getting the Elements object containing all the input elements and taking the last of those elements.

于 2012-12-14T19:21:51.597 回答