【问题标题】:Looking for string values by name in JSoup在 JSoup 中按名称查找字符串值
【发布时间】:2012-12-12 13:22:06
【问题描述】:

所以,我在 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 文档中,我一直在查看 this page,但找不到我要查找的内容。

谢谢!

编辑:我刚刚意识到,每次刷新页面时都会随机生成最后一个值的名称。如果它除了“隐藏”特性之外没有任何保持不变的值,有什么办法可以抓住它?

【问题讨论】:

    标签: java html parsing jsoup


    【解决方案1】:

    如果我理解正确,以下代码可以满足您的要求:

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

    您可以使用以下语法为name 属性选择具有给定值的input 元素:

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

    这会返回一个只包含一个元素的Elements 对象(因为name 属性的值是唯一的)。

    您说input 元素具有不断变化的name 属性是最后一个input,因此您可以通过获取包含所有input 元素的Elements 对象并获取最后一个元素。

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 2015-08-02
      • 2011-11-27
      • 2018-05-24
      • 2012-03-02
      • 2020-06-05
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多