Java HtmlUnit form.getInputByValue («Войдите сейчас!»). Click (); - PullRequest
2 голосов
/ 28 апреля 2011

Я пытаюсь создать приложение, которое будет подключаться к сайту с логином, предоставленным пользователем. У меня нет никакого опыта взаимодействия с веб-сайтами на Java, поэтому я нашел их в Google и нашел, что hmtlunit соответствует моим потребностям.

Но я столкнулся с ошибкой при попытке нажать кнопку отправки для формы входа:

public static boolean attempt_login(String username, String password) throws ElementNotFoundException, IOException {
        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
        webClient.setJavaScriptEnabled(false);
        webClient.setThrowExceptionOnScriptError(false);
        webClient.setRefreshHandler(new RefreshHandler() {
            public void handleRefresh(Page page, URL url, int arg) throws IOException {
                System.out.println("handleRefresh");
            }
        });

        HtmlPage page = (HtmlPage) webClient.getPage(Config.LOGIN_PAGE);
        List<HtmlForm> forms = page.getForms();
        HtmlForm form = null;
        for(HtmlForm f : forms){
            if(f.getId().equals("login_form")){
                form = f;
            }
        }
        if(form == null){
            throw new NullPointerException("Could not find form!");
        }
        form.getInputByName("username").setValueAttribute(username);
        form.getInputByName("password").setValueAttribute(password);

        page = (HtmlPage) form.getInputByValue("Login Now!").click();

        System.out.println(page.asText());
        return false;}

Каким-то образом не удается найти кнопку submit для входа в систему

com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[input] attributeName=[value] attributeValue=[Login Now!]
at com.gargoylesoftware.htmlunit.html.HtmlForm.getInputByValue(HtmlForm.java:737)
at domain.Helper.attempt_login(Helper.java:41)
at TesterStartUp.main(TesterStartUp.java:15)

Исходный код HTML:

<button type="submit" value="Login Now!" onmouseover="this.style.backgroundPosition='bottom';" onmouseout="this.style.backgroundPosition='top';" onclick="return SetFocus();">Login Now!</button>

Когда я поискал решение, я обнаружил, что отключение javascript поможет. Поэтому я сказал веб-клиенту отключить его (webClient.setJavaScriptEnabled (false);), но все же имелось исключение.

Сначала у меня возникла та же проблема с попыткой выбрать форму ("login_form"), но был метод, где я мог получить список всех форм, а затем просто посмотреть, соответствует ли одна из них списку. Мне не удалось найти способ обойтись кнопкой «Отправить», поэтому я надеялся, что кто-то другой знает решение этой проблемы.

Заранее спасибо, Сэр тролль

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

Метод HtmlUnit getInputByValue() , работающий на <form>, будет возвращать только типы HtmlInput и единственный тип кнопки ввода - HtmlButtonInput - - представляет <input type="button">, а НЕ <button>. Вам нужно будет изменить свой HTML или использовать другой вызов метода HtmlUnit.

0 голосов
/ 15 января 2016

У меня была такая же проблема, которую я решил сам:

Когда вы пытаетесь войти в систему с помощью html-модуля, сначала проверьте, появляется ли окно входа в систему с помощью jquery или нет.Если после нажатия кнопки появляется поле входа в систему / div, вам необходимо обновить страницу (веб-клиент), чтобы получить доступ к новым элементам ввода

 HtmlPage page = webClient.getPage("https://www.yourwebsite.com/#");
 HtmlAnchor link=page.getElementByName("link");
 link.click();
 page.refresh();

Если на вашем сайте вместо якорной ссылки есть кнопка, измените ее на htmlКнопка, после обновления может вы можете найти элемент.

Надеюсь, это поможет и решит вашу проблему

...