#javascript #redirect #login #htmlunit
#javascript #перенаправление #аутентификация #htmlunit
Вопрос:
Я пытаюсь использовать HtmlUnit для получения данных с веб-сайта, пока мне удалось ввести данные, необходимые для входа в систему (имя пользователя и пароль).
Проблема начинается с того, что в форме входа на веб-сайт есть кнопка отправки, вместо этого есть href, в которой есть функция onClick JavaScript (onclick="login_submit())
, которая проверяет данные, а затем вызывает window.location = "index.php";
Поэтому я попытался щелкнуть href с помощью:
HtmlAnchor anchor = page.getAnchorByText("כניסה");
page = anchor.click();
и попробовал:
page.executeJavaScript(javaScriptCode);
но переменная страницы dosent получает ожидаемую страницу, она получила тот же URL, что и до нажатия, и перенаправления нет. После login_submit()
вызова функции появляется метка, указывающая «login ..» но оттуда ничего не происходит.
Вот код:
// javascript login_submit() -- this is not my website and not my JS code so ive deleted some things:
function login_submit()
{
if(!LOGIN_SUBMIT_PROCESSED)
{
var approved = true;
var admin_user_username_field = document.getElementById('admin_user_username');
var admin_user_username_error = document.getElementById('admin_user_username_error');
var admin_user_password_field = document.getElementById('admin_user_password');
var admin_user_password_error = document.getElementById('admin_user_password_error');
admin_user_username_field.className = "login_form_field_input_text";
admin_user_username_error.style.display = 'none';
admin_user_password_field.className = "login_form_field_input_text";
admin_user_password_error.style.display = 'none';
if(admin_user_username_field.value.length == 0)
{
//do something
}
if(admin_user_password_field.value.length == 0)
{
//do something
}
if(approved)
{
LOGIN_SUBMIT_PROCESSED = true;
document.getElementById("login_form_options").style.display = "none";
document.getElementById("login_form_process").style.display = "";
var http_request = new XHConn();
http_request.connect(
"login_submit.php?cache=" string_unique(),
"POST",
"form_anti_bot_code=" encodeURIComponent(form_anti_bot_code_field.value)
"amp;admin_user_username=" encodeURIComponent(admin_user_username_field.value)
"amp;admin_user_password=" encodeURIComponent(admin_user_password_field.value),
function(response,callback_data)
{
if(response.readyState == 4)
{
if(response.status == 200)
{
//alert(response.responseText);
try
{
var json_response = JSON.parse(response.responseText);
if(json_response["error_code"] == "0")
{
window.location = "index.php";
}
else
{
//do something
}
}
catch(error)
{
alert(error);
}
}
LOGIN_SUBMIT_PROCESSED = false;
}
},
null
);
}
}
}
Код Java:
public static void main(String[] args) throws Exception {
WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setCssEnabled(true);
//webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setRedirectEnabled(true);
HtmlPage page = (HtmlPage) webClient
.getPage(url);
HtmlForm form = page.getFormByName("login_form");
form.getInputByName("admin_user_username").setValueAttribute("XXXXX");
HtmlInput passWordInput = form.getInputByName("admin_user_password");
passWordInput.removeAttribute("disabled");
passWordInput.setValueAttribute("XXXXXX");
HtmlAnchor anchor = page.getAnchorByText("Login");
page = anchor.click();
System.out.println(page.getBody().asText());
webClient.close();
}
После некоторого тестирования я точно знаю, что данные для входа в систему в порядке, нажимается href, и появляется индикатор того, что выполняется процесс входа в систему.
основная проблема заключается в том, что она не перенаправляется и не получает «index.php » страница.
Ответ №1:
Попробуйте это, и это должно сработать:
WebWindow window = page.getEnclosingWindow();
Ответ №2:
Это может помочь:
final HtmlPage page2 = page.getElementById("Login_Button").click();