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

HtmlUnit - After login to website the page doesn't redirect

本文关键字:重定向 登录 网站 HtmlUnit      更新时间:2023-09-26

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

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

所以我试着点击href使用:

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

and tried:

page.executeJavaScript(javaScriptCode);

但是page变量没有得到预期的页面,它得到了与点击之前相同的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)
                + "&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();
}

经过一些测试后,我知道登录数据是ok的,href被单击,并且有一个登录正在处理的指示器。主要的问题是它没有重定向,也没有得到"index.php"页面。

试试这个,应该能成功:

WebWindow window = page.getEnclosingWindow();

这可能会奏效:

final HtmlPage page2 = page.getElementById("Login_Button").click();