Невозможно войти на сайт, используя HtmlUnit 2.35.0 - PullRequest
0 голосов
/ 19 мая 2019

Я хочу войти в систему https://www.rjs.com/member/user.html#login, используя HtmlUnit, но не смог, я все равно получаю предыдущую страницу после вызова кнопки button.click.

Буду очень признателен, если кто-нибудь сможет мне помочьпо этому вопросу.

WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.setCssErrorHandler(new SilentCssErrorHandler()); 
webClient.getOptions().setUseInsecureSSL(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setTimeout(50000);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setRedirectEnabled(true); 
webClient.getCookieManager().setCookiesEnabled(true); 
HtmlPage page = webClient.getPage("https://www.rjs.com/member/user.html#login");
webClient.waitForBackgroundJavaScript(10000);
System.out.println(page.asXml());
HtmlInput heUsername = (HtmlInput)page.getHtmlElementById("login_username");
HtmlPasswordInput hePassword = (HtmlPasswordInput)page.getHtmlElementById("login_pwd");
HtmlButton heLogin = (HtmlButton)(page.getFirstByXPath("//button[@class='login-btn']"));
heUsername.setValueAttribute(<my user name>);
hePassword.setValueAttribute(<my password>);
HtmlPage page2 = heLogin.click();
webClient.waitForBackgroundJavaScript(10000);
System.out.println(page2.asXml());
webClient.close();

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Это, кажется, работает здесь (с использованием последней версии 2.36.0-SNAPSHOT).

public static void main(String[] args) throws Exception {
    String uri = "https://www.rjs.com/member/user.html#login";

    try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_60)) {
        HtmlPage page = webClient.getPage(uri);
        webClient.waitForBackgroundJavaScript(10000);

        HtmlInput heUsername = (HtmlInput) page.getHtmlElementById("login_username");
        HtmlPasswordInput hePassword = (HtmlPasswordInput) page.getHtmlElementById("login_pwd");
        HtmlButton heLogin = (HtmlButton) page.getFirstByXPath("//button[@class='login-btn']");
        heUsername.type(....);
        hePassword.type(....);

        heLogin.click();
        webClient.waitForBackgroundJavaScript(10000);

        page = (HtmlPage) webClient.getCurrentWindow().getEnclosedPage();
        System.out.println("----------------");
        System.out.println(page.asXml());
    }
}
0 голосов
/ 19 мая 2019

Не имея учетных данных, я не могу подтвердить вашу проблему.Только некоторые общие подсказки

  1. позволяют максимально упростить настройку WebClient, значения по умолчанию обычно хорошие.С моей точки зрения вам нужно только

    webClient.getOptions().setUseInsecureSSL(true);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    
  2. использовать type () для заполнения полей ввода

    heUsername.type(<my user name>);
    hePassword.type(<my password>);
    
  3. , если вы ждетеjs для завершения после входа в систему, как правило, хорошей идеей является перезапуск страницы из окна, поскольку js мог загрузить другую страницу после входа в систему.

    HtmlPage page2 = heLogin.click();
    webClient.waitForBackgroundJavaScript(10000);
    page2 = ((HtmlPage) page2.getEnclosingWindow().getEnclosedPage());
    

Надеюсь, чтопомогает.И, как всегда, возможно, журналы также содержат полезные советы.

...