所以,我在 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 ,但我找不到我要找的东西。
谢谢!
编辑:我刚刚意识到,每次刷新页面时最后一个值的名称都是随机生成的。如果它除了“隐藏”特征之外没有任何保持不变的值,是否有任何方法可以获取它?
最佳答案
如果我正确理解您的意思,以下代码可以满足您的要求:
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
属性的值是唯一的)。
您说过,具有不断变化的 name
属性的 input
元素是最后一个 input
,因此您可以通过获取来利用该知识包含所有 input
元素并获取最后一个元素的 Elements
对象。
关于java - 在 JSoup 中按名称查找字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13840774/