属性によって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
それを送信することは何も送信しないことと同じです。
コメントの後に編集:
解析する前にWebページ要素をクリックする必要があり、私が理解していることから、これはJsoupでは実行できません。
あなたは正しいです。Jsoup はそれをサポートしていません。クリックには、JavaScript イベントなどのいくつかの副作用があります。それらを処理することは大したことです。
ただし、特定のケースでは、DOM を変更する jsoup の機能が役立つ場合があります。以下の例を確認してください。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>