HtmlUnit - 登录网站后,页面不会重定向

时间:2016-10-09 23:54:31

标签: javascript redirect login htmlunit

我正在尝试使用HtmlUnit从网站获取数据, 到目前为止,我设法输入了登录所需的数据(用户名和密码)。

问题始于网站登录表单dosent有一个提交按钮,而是有一个具有onClick JavaScript函数的href (onclick="login_submit()) 验证数据,然后调用window.location = "index.php";

所以我尝试点击href:

HtmlAnchor anchor = page.getAnchorByText("כניסה");
page = anchor.click();

并尝试:

page.executeJavaScript(javaScriptCode);

但是页面变量dosent得到了预期的页面,它获得了与点击之前相同的URL,并且没有重定向。调用login_submit()函数后,会出现一个标签,指示“登录...”但没有任何反应。

以下是代码:

// 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)
                + "&admin_user_username="+encodeURIComponent(admin_user_username_field.value)
                + "&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 个答案:

答案 0 :(得分:0)

试试这个,应该可以解决这个问题:

WebWindow window = page.getEnclosingWindow();