У меня проблема с HTMLUnit. Вкратце, что я делаю, я заполняю форму и вхожу на веб-страницу, затем нажимаю кнопку на этой странице. На самом деле, я не могу сделать этот процесс, но я пытаюсь. Вот мои исходные коды формы HTML и исходный код Java:
Это с экрана входа:
<form action="/login" method="post">
...
<input type="text" name="login_email" id="login_email" value="" />
<input type="password" name="login_password" id="login_password" />
<input type="submit" id="login_submit" name="login_submit" value="Sign in" />
</form>
В этой форме есть несколько скрытых входных данных. Я знаю, это звучит смешно, но мой Java-код работает, когда я ничего не делаю со скрытыми входными данными.
Вот мой код Java для входа в систему с использованием этой формы:
Это код из вопроса stackoverflow. Я просто тестирую, не более того.
WebClient webClient = new WebClient();
webClient.setThrowExceptionOnScriptError(false);
HtmlPage currentPage = webClient.getPage("https://www.blablabla.com:1234");
final HtmlForm form = currentPage.getFirstByXPath("//form[@action='/login']");
HtmlTextInput username = (HtmlTextInput) currentPage.getElementById("login_email");
HtmlPasswordInput password = (HtmlPasswordInput) currentPage.getElementById("login_password");
username.setText("[email protected]");
password.setText("passW0rd");
HtmlButton submitButton = (HtmlButton) currentPage.createElement("button");
submitButton.setAttribute("type", "submit");
form.appendChild(submitButton);
HtmlPage newPage = submitButton.click();
System.out.println(newPage.asText());
Все хорошо до следующей части. Я могу войти, посмотреть содержимое новой страницы.
Однако, когда я пытаюсь нажать кнопку на новой странице, я ничего не получаю. На самом деле, я даже не могу нажать на нее, я думаю.
Вот исходный HTML-код моей кнопки и новой веб-страницы:
<form action="auth" method="post">
<input type="submit" name="allow" value="Allow"/>
</form>
Есть и скрытые входы.
Вот код Java для попытки нажать кнопку с именем «разрешить»:
HtmlButton button = newPage.getElementByName("allow");
HtmlPage page = button.click() ;
И чтобы проверить все в последний раз, я использую еще один фрагмент кода:
System.out.println(page.asText());
Но я получаю такие ошибки
начинаются ошибки
WARNING: getElementById(script1338426904717) did a getElementByName for Internet Explorer
31.May.2012 04:15:04 com.gargoylesoftware.htmlunit.javascript.host.ActiveXObject jsConstructor
WARNING: Automation server can't create object for 'ShockwaveFlash.ShockwaveFlash'.
31.May.2012 04:15:04 com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message=[Automation server can't create object for 'ShockwaveFlash.ShockwaveFlash'.] sourceName=[https://www.jdkahsjkda/dksajda.js] line=[12] lineSource=[null] lineOffset=[0]
31.May.2012 04:15:04 com.gargoylesoftware.htmlunit.javascript.host.ActiveXObject jsConstructor
конец ошибок
Эти ошибки в порядке для меня, пока я могу войти в систему.
Я могу войти и увидеть страницу. В нем говорится что-то вроде «Добро пожаловать, пароль пользователя...» Но я не могу нажать кнопку или сделать что-нибудь еще.
Я надеюсь, что вы, ребята, можете помочь мне с этой проблемой.
Спасибо большое.
Береги себя, и спасибо.
Изменить:
Теперь я получаю эту ошибку:
Exception in thread "main" com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[*] attributeName=[name] attributeValue=[allow]
at com.gargoylesoftware.htmlunit.html.HtmlPage.getElementByName(HtmlPage.java:1565)
at cza.main(cza.java:54)
Тем не менее, есть кнопка под названием «разрешить». Я просматриваю исходный код второй страницы и вижу следующее:
<input type="submit" name="allow" value="Allow"/>
<input type="submit" name="deny" value="Deny"/>
Итак, есть кнопка с именем «разрешить» и «запретить». Однако этот код не работает. Может ли это быть из-за JS или чего-то еще? Я попытался найти кнопку отправки на первой странице и отправить форму с ее помощью. Не с поддельной кнопкой, она снова не работает. Я использовал для этого HTMLSubmitInput, он снова терпит неудачу.
Спасибо еще раз.