HtmlUnitを使用してログインするにはどうすればよいですか?ログインフォームがjavascriptの場合は、HtmlUnitでウェブサイトにログインしてください
URLは次のとおりです。https://www.jambox.pl/ogladaj
ログインフォームは、私がgetFormByName()
を使用してそれを得ることができないのでIDを持っていないようです。
HtmlUnitを使用してログインするにはどうすればよいですか?ログインフォームがjavascriptの場合は、HtmlUnitでウェブサイトにログインしてください
URLは次のとおりです。https://www.jambox.pl/ogladaj
ログインフォームは、私がgetFormByName()
を使用してそれを得ることができないのでIDを持っていないようです。
あなたはページのすべてのフォームを取得し、いくつかの特定の属性を検索することができますHtmlForm
を取得するためのIDまたは名前を必要としません。
また、XPathを直接使用することもできます。
public static void main(String[] args) throws Exception {
try (WebClient webClient = new WebClient()) {
webClient.getOptions().setUseInsecureSSL(true);
HtmlPage page = webClient.getPage("https://www.jambox.pl/ogladaj");
// get the form first
for (HtmlForm form : page.getForms()) {
System.out.println(form.asXml());
//if this is your form, use it.
}
// or using XPath with attribute 'action'
HtmlForm form2 = page.getFirstByXPath("//form[@action='/widget2']");
}
}
しかし、HtmlUnitはすべてのフォームを取得していないようですが、それは私が思うとバグです。
私は<form action = "/ widget2 ">
List<HtmlForm> list = new ArrayList<HtmlForm>();
list=page.getForms();
System.out.println(list.size());
HtmlForm form = list.get(0);
System.out.println(form.asXml());
第二のフォームが表示されないこのリターンコードサイズ
1
<form action="/ogladaj" accept-charset="UTF-8" method="post" id="search-theme-form">
<div>
<div id="search" class="container-inline">
<div class="form-item" id="edit-search-theme-form-1-wrapper">
<input type="text" maxlength="128" name="search_theme_form" id="edit-search-theme-form-1" size="15" value="Szukaj" class="form-text NormalTextBox txtSearch" onfocus="if (this.value == 'Szukaj') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Szukaj';}"/>
</div>
<input type="submit" name="op" id="edit-submit" value="Szukaj" class="form-submit"/>
<input type="hidden" name="form_build_id" id="form-Se_XpWDahQvAp1Wfd2dmZjjwvuAW37ojsRiy8RXlNHk" value="form-Se_XpWDahQvAp1Wfd2dmZjjwvuAW37ojsRiy8RXlNHk"/>
<input type="hidden" name="form_id" id="edit-search-theme-form" value="search_theme_form"/>
</div>
</div>
</form>
が興味のあるフォームがiframeの内部に位置しているform.but HTMLページのを取得する方法を知っています。
public static void main(String[] args) throws Exception {
try (WebClient webClient = new WebClient()) {
webClient.getOptions().setUseInsecureSSL(true);
HtmlPage page = webClient.getPage("https://www.jambox.pl/ogladaj");
HtmlInlineFrame frame = (HtmlInlineFrame) page.getElementById("jambox-frame");
HtmlPage framePage = (HtmlPage) frame.getEnclosedPage();
// the login elements
framePage.getHtmlElementById("login-field").type("[email protected]");
framePage.getHtmlElementById("password-field").type("victoria");
for (HtmlForm form : framePage.getForms()) {
if (form.getActionAttribute().equals("/widget2/")) {
// System.out.println(form.asXml());
for (HtmlElement input : form.getElementsByTagName("input")) {
if (input.getAttribute("value").startsWith("Zaloguj")) {
// System.out.println(input);
input.click();
}
}
}
}
}
}
jqueryを使用して$( "。form")を使用すると、フォームオブジェクトが表示されます。 –
Javaのサイトにログインしたい – mati2762
Java関数を呼び出すために使用するJavaアプリケーションがあるので、待ちますか?私は、JavaScriptのランナーを作成してスクリプトをダウンロードするのに手間がかからないと思います。スクリプトをダウンロードして勉強し、Javaで独自のバージョンを作成するのはもっと楽しいと思います。 JavascriptとJavaが接続されていることを間違えないでください。Javascriptは実際のランタイムや開発ではなく、Javaとその構文の一部を共有するためにのみ呼び出されます。 –