Привет, я впервые использую HtmlUnit [версия 2.31], я пытаюсь зайти на веб-страницу. Вот HTML-код:
<body>
<div id="login">
<div id="header">
User Log In
</div>
<div id="error">Enter your credentials to login</div>
<table>
<tr>
<th>Username</th>
<td><input type="text" id="username" /></td>
</tr>
<tr>
<th>Password</th>
<td><input type="password" id="password" /></td>
</tr>
</table>
<div id="buttons">
<input type="button" value="Login" id="button" onclick="login();" />
</div>
</div>
</body>
Вот мой код:
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_52);
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setUseInsecureSSL(true);
try{
HtmlPage page = webClient.getPage(url);
String pageContent = page.asText();
System.out.println(pageContent);
HtmlButtonInput button = page.getFirstByXPath("//input[@type = 'button']");
//I'm new to XPath, but I think this works okay
HtmlTextInput name = (HtmlTextInput) page.getElementById("username");
HtmlPasswordInput pwd = (HtmlPasswordInput) page.getElementById("password");
System.out.println(name.getSelectedText());
name.setValueAttribute(username);
pwd.setValueAttribute(password);
System.out.println(name.getSelectedText());
HtmlPage loggedInPage = button.click();
String pageContent2 = loggedInPage.asText();
System.out.println("after logged in");
System.out.println(pageContent2);
}
Обе страницы (до и после входа в систему) распечатаны одинаково. Так что я должен был сделать что-то не так здесь. Любая помощь будет оценена.
Редактировать 1:
Я уже пробовал Thread.sleep (2000) после ввода имени пользователя и пароля и перед строкой нажатия
Редактировать 2:
JS для входа в систему:
document.onkeypress = processKey;
function processKey(e) {
if (null == e)
e = window.event ;
if (e.keyCode != 13)
return;
$('button').click();
return false;
}
function parseXMLTag(tag) {
var value = '';
if (tag && tag.firstChild != undefined) {
value = tag.firstChild.nodeValue;
}
return value;
}
function login() {
new Ajax.Request('/cti/api/admin/login.xml', {
method: 'post',
parameters: {username: $('username').value, password: $('password').value},
onSuccess: function(transport) {
var response = transport.responseXML;
var success = parseXMLTag(response.firstChild.getElementsByTagName('success')[0]);
var error = parseXMLTag(response.firstChild.getElementsByTagName('error')[0]);
if (success == 1)
document.location = 'main.html';
else
$('error').innerHTML = error;
}
});
}