HtmlUnit — после входа на сайт страница не перенаправляется

#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();