您好,这是我第一次使用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;
}
});
}
https://stackoverflow.com/questions/51164001
复制相似问题