2015-07-28 2 views
0

Я кодирую сервер в java, а для части сервера мне нужен веб-сканер. Чтобы очистить веб-сайт, мне нужно войти в систему, и веб-скребок отлично работает при запуске в качестве основного метода, но при запуске на сервере нажатие кнопки не перенаправляется на новую страницу. Вот код.HtmlUnit - Проблемы с нажатием кнопки

String loginUrl="MY_URL"; 
    WebClient web = new WebClient(); 
    WebClientOptions options=web.getOptions(); 
    web.getCookieManager().setCookiesEnabled(true); 
    options.setJavaScriptEnabled(true); 
    options.setPrintContentOnFailingStatusCode(false); 
    options.setCssEnabled(false); 
    options.setThrowExceptionOnFailingStatusCode(false); 
    options.setThrowExceptionOnScriptError(false); 
    options.setRedirectEnabled(true); 
    try { 
     final HtmlPage firstPage = (HtmlPage)web.getPage(loginUrl); 
     final HtmlForm form = firstPage.getForms().get(0); 
     final HtmlTextInput userNameField = form.getInputByName("USER"); 
     userNameField.setValueAttribute("MY_USERNAME"); 
     final HtmlPasswordInput passWordField = form.getInputByName("PASSWORD"); 
     passWordField.setValueAttribute("MY_PASSWORD"); 
     HtmlButton button =(HtmlButton)firstPage.getElementById("safeLoginbtn"); 
     System.out.println(firstPage.getUrl().toString()); 
     button.click(); 
     System.out.println(web.getEnclosedPage().getUrl().toString()); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 

При запуске этого в главном способе два заявления печати показывает две разных страниц, журнал на странице и страницу за журналом в соответственно. Но при работе на сервере два оператора печати имеют почти одинаковый URL-адрес, и оба являются URL-адресами для страницы входа в систему. Почему это могло произойти? Почему код действует по-другому в основном методе по сравнению с запуском на сервере?

Сервер управляется платформой Spring, если это связано с ней.

EDIT: Пример здесь:.

WebClient webClient = new WebClient(); 
    HtmlPage page1 = webClient.getPage("http://www.facebook.com"); 
    HtmlForm form = page1.getForms().get(0); 
    HtmlSubmitInput button = (HtmlSubmitInput) form.getInputsByValue("Log In").get(0); 
    HtmlTextInput textField = form.getInputByName("email"); 
    textField.setValueAttribute("[email protected]"); 
    HtmlPasswordInput textField2 = form.getInputByName("pass"); 
    textField2.setValueAttribute("MY_PASS"); 
    HtmlPage page2 = button.click(); 
    System.out.println(page2.asText()); 

Это работает в главном методе приложения Java, но при запуске на сервере рейсовой аннотации Spring, она не будет регистрировать меня в

+0

'HtmlPage page2 = button.click();' и затем проверить 'page2.asXml()'. Вы также можете опубликовать свой полный случай с URL-адресом, пожалуйста, прочитайте http://htmlunit.sourceforge.net/submittingJSBugs.html –

+0

@AhmedAshour Я отредактировал сообщение, чтобы подать пример – JoeSpletts

+0

Интересно, можете ли вы опубликовать минимальный проект Spring, чтобы мы могли отлаживаем дальше. –

ответ

0

На пути может быть перенаправление. Возможно, вы можете сделать следующее:

HtmlPage pageAfterLogin = button.fireEvent("onclick").getNewPage(); 
System.out.println(pageAfterLogin.getUrl().toString()); 
+0

По-прежнему не везет с этим методом – JoeSpletts

+0

У вас нет ошибок при регистрации на сервере? –

+0

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

Смежные вопросы