2017-02-20 22 views
0

Как я могу войти в систему с помощью HtmlUnit?Войти на сайт с HtmlUnit, когда форма для входа в систему javascript

URL является: https://www.jambox.pl/ogladaj

Сформируйте Войти, кажется, не имеет идентификатора, так что я не могу получить его с помощью getFormByName().

+0

Используйте jquery и используйте $ (". Form"), и вы получите объект forms. –

+0

Я хочу войти на сайт в Java – mati2762

+0

Подождите, так что у вас есть приложение Java, которое вы хотите использовать для вызова функции javascript? Я думаю, что вам не повезло, если не создать javascript-бегун и загрузить скрипт ... Я думаю, вам больше повезло бы загрузить скрипт и изучить его и создать свою собственную версию на Java. Не ошибитесь, что Javascript и Java будут связаны, Javascript так называется только потому, что он разделяет некоторые из его синтаксиса с Java, а не с его фактическим временем выполнения или развитием. –

ответ

0

Вам не нужен идентификатор или имя, чтобы получить HtmlForm

Вы можете получить все формы на странице, и искать какой-то конкретный атрибут.

Или вы также можете использовать 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 не извлекает все формы, что является ошибкой, я думаю.

0

Я знаю, как добраться до form.but HTMLPage не видит вторую форму <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> 
1

Форма вас интересует находится внутри фрейма , Вам нужно копать немного глубже ...

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(); 
        } 
       } 
      } 
     } 
    } 
}