您必须使用数据来设置字段的值by its name
属性.
当您使用:
.data("selected", "Option2")
与请求页面上有此元素相同form
(注意name="selected"
):
<select name="selected">
<option value="Option1">Option 1</option>
<option selected="selected" value="Option2">Option 2</option>
<option value="Option3">Option 3</option>
</select>
所以,你正在尝试的方式POST
是正确的。事情可能是名为的参数(字段)selected
不存在于form
(您正在尝试模仿),因此发送它与不发送任何内容相同。
在您的评论后编辑:
我真正需要做的是在解析之前单击网页元素,据我所知,这不能用 Jsoup 来完成。
你是对的。 Jsoup 不支持这一点 - 单击可能会产生多种副作用,例如 JavaScript 事件等。处理它们是一件大事。
不过,对于您的具体情况,jsoup 更改 DOM 的功能可能很有用。检查下面的示例。在其中我们通过显式设置它来“选择”一个选项selected
属性为selected
(并将其从所有其他选项中删除)。
import org.jsoup.Jsoup;
import org.jsoup.nodes.*;
import org.jsoup.select.*;
public class JSoupChangeDom {
public static void main(String[] args) {
Document doc = Jsoup.parse(""+
" <html><body> " +
" <div>example</div> " +
" <form> " +
" <select name='mySelect'> " +
" <option value='Option1'>Option 1</option> " +
" <option value='Option2'>Option 2</option> " +
" <option value='Option3'>Option 3</option> " +
" </select> " +
" <form> " +
" </body></html> ");
Element mySelect =
doc.getElementsByAttributeValue("name", "mySelect").get(0);
String optionValueToBeSelected = "Option2";
Elements options = mySelect.getElementsByTag("option");
for (Element option : options) {
if (option.attr("value").equals(optionValueToBeSelected)) {
option.attr("selected", "selected");
} else {
option.removeAttr("selected");
}
}
System.out.println(doc);
}
}
Output:
<html>
<head></head>
<body>
<div>example</div>
<form>
<select name="mySelect">
<option value="Option1">Option 1</option>
<option value="Option2" selected="selected">Option 2</option>
<option value="Option3">Option 3</option>
</select>
</form>
</body>
</html>