gpt4 book ai didi

java - Jsoup 发布 : Defining a selected option to return HTML?

转载 作者:太空狗 更新时间:2023-10-29 16:20:08 25 4
gpt4 key购买 nike

我正在尝试生成一个 HTML 帖子到一个包含选项列表的页面。有一个下拉列表,用户可以在其中选择一个项目,然后单击生成按钮。根据选择的选项,它会返回各种结果。我对前后的 HTML 进行了比较,可以看出不同之处如下:

之前

<option value="Option1">Option 1</option>
<option value="Option2">Option 2</option>
<option value="Option3">Option 3</option>

之后

<option value="Option1">Option 1</option>
<option selected="selected" value="Option2">Option 2</option>
<option value="Option3">Option 3</option>

我无法理解 jsoup 文档生成的语法。到目前为止我有这个但它只是不断返回原始 HTML 而没有结果:

doc = Jsoup.connect("MYurl...")
.timeout(5000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.cookie("auth", "token")
.data("selected", "Option2")
.post();

最佳答案

您必须使用数据来通过其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 中不存在(您正在尝试模拟),因此发送它与不发送任何内容相同。

评论后编辑:

What I really need to do perform a click on the web page element before parsing and from what I understand this can't be done with 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);
}
}

输出:

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

关于java - Jsoup 发布 : Defining a selected option to return HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com