HtmlUnit: вызов ajax для получения данных json после успешного входа - PullRequest
0 голосов
/ 24 сентября 2019

Я пытался войти в некоторые сайты с помощью HtmlUnit с этим кодом:

    HtmlPage page1 = webClient.getPage("https://somesites.com/");
    HtmlForm form = (HtmlForm) page1.getElementById("FormLogin"); 
    HtmlInput name = form.getInputByName("user_name"); 
    name.setValueAttribute("my_password"); 
    HtmlInput password = form.getInputByName("password"); 
    password.setValueAttribute("my_password"); 
    HtmlButton button = (HtmlButton) page1.getElementById("btnX"); 
    HtmlPage page2 = button.click();

И эти сайты используют ajax для отображения своих данных.Но этот ajax-вызов не может быть выполнен, если не удалось войти в систему.В браузере Chrome я могу сделать это, набрав в адресной строке, как https://somesites.com/success/site.json, поэтому, если я удаляю какую-либо переменную cookie, это никогда не возвращает никакого результата.

У меня был вопрос, как сделать ajax-вызов, поддерживающий сеанс браузера после успешного входа в систему?

1 Ответ

0 голосов
/ 24 сентября 2019

Прежде всего, вы хотите установить AjaxHandler для своего веб-клиента

webClient.setAjaxController(new AjaxController(){
            @Override
            public boolean processSynchron(HtmlPage page, WebRequest request, boolean async)
            {
                return true;
            }
        });

, затем также убедитесь, что файлы cookie сохраняются ( обратите внимание, что это необходимо только в случае необходимостичтобы инициализировать новый WebClient со старыми Cookies ):

CookieManager cookieManager = new CookieManager();
webClient.setCookieManager(cookieManager);

Теперь у вас есть WebClient, в котором хранятся ваши Cookies.Выполните свою рабочую регистрацию, а затем просто выполните вызов ajax через Javascript:

page.executeJavaScript("[ajax call]").getJavaScriptResult();

Если вы хотите получить доступ только к данным json, вы можете просто перейти к URL-адресу и получить текст. ЕСЛИ вы успешно вошли в систему, он будет работать:

HtmlPage jsonPage = webClient.getPage("https://somesites.com/success/site.json ");
System.out.println(jsonPage.asText());

С этого момента вы можете анализировать его как JSON или делать с ним все, что вам нужно.

...